Il Bar dell'Ingegneria

Excel --> Autocad. Disegno Automatico camerette CLS da soli dati Excel

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Ragionandoci un po' sopra e guardando qualche schema di pozzetto in opera più generale, nasce l'esigenza, dato che siamo in tempo, di differenziare anche la fondazione introducendo quindi un ulteriore elemento.
    Per la fondazione di queste operette è inutile pensare ad una forma circolare o eccentrica (troppo lusso) rispetto alla cameretta. La fondazione sarà, quindi, sempre quadrata e centrata.
    Ho introdotto questo quinto elemento rinumerando il tutto e correggendo gli indici dei parametri.

    L'unico fatto che per adesso mi infastidisce è il limite della forma quadrata e sto pensando di correggere il tutto cambiando il quadrato in rettangolo, tanto il quadrato altro non è che un rettangolo particolare. Vedrò.

    eQdesb7

     
    Top
    .
  2.     +2   +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Completato, anche se in maniera parziale, lo studio anatomico del pozzetto, ho iniziato a pensare come scrivere il programma avendo per questo diverse possibilità:

    1 - da VBA in excel a VBA in Autocad:
    selezionato il pozzetto che si vuole far disegnare, excel salva i parametri in un file *.txt e richiama un progetto *.dvb scritto in VBA per autocad;

    2 - da VBA in excel a file DXF per Autocad:
    selezionato il pozzetto che si vuole far disegnare, attraverso macro Excel compila la "Consolle DXF" e quindi crea il dxf del pozzetto che apre con autocad;

    3 - da VBA in excel a file Script per Autocad:
    selezionato il pozzetto che si vuole far disegnare, attraverso macro Excel crea il file *.scr del pozzetto che successivamente viene aperto in Autocad;

    4 - direttamente da VBA in Autocad:
    in ambiente autocad si apre il progetto *.dvb e si avvia la sub contenuta. Attraverso dialogo di input si inseriscono i dati necessari e si genera il disegno. Qui sarebbe possibile leggere i dati da un file di tipo ascii esterno.

    La prima e la quarta possibilità passano entrambe attraverso la scrittura di un programma in VBA in Autocad.
    Preferisco quest'ultima e quindi ho immediatamente abbozzato un dialogo di Input dei dati.
    Per adesso è solo una bozza che sarà modificata nel corso dello sviluppo e che allo stato attuale non fa proprio nulla.
    Per esempio, mentre stavo scrivendo mi sono accorto che i rapporti kx, ky e kz che indicano le posizioni relative degli elementi, sono adimensionali e non espressi in cm. Correggerò strada facendo.
    Attached Image
    Figura01

     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Siccome sembra che DavideComi voglia essere guidato nella composizione del programma "... per capire dal vivo una struttura da adattare alle mie esigenze..." per poter poi essere in grado di estendere il processo ad altri elementi standardizzati (come cabine gas, pozzetti acque bianche/nere...), allora penso di iniziare a dare le informazioni per creare il dialogo che ho proposto.
    Le informazioni saranno utili a quanti volessero seguire la stessa via di Davide.

    Pertanto non fornirò il file *.dvb già bello e pronto ma le istruzioni per poterlo comporre in proprio e il codice per poterlo gestire.
    Solo dopo parlerò del codice che esegue il disegno.
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    La prima cosa da fare è quella di scaricare ed installare il modulo VBA per la versione di AutoCAD in vostro possesso.
    Tenete presente che se avete Autocad LT qualsiasi versione, non vi sarà possibile alcuna interazione con VBA Excel. L'unica via per far comunicare i due programmi Autocad e Excel è quella che passa attraverso il formato DXF. Non ho idea se la stessa cosa vale per i file Script.
    Il modulo VBA per Autocad è disponibile per il download nel sito della Autodesk. Vi basta fare una ricerca su internet e lo trovate.

    Modulo VBA per Autocad

    Non è necessario scaricare il modulo per le versioni di autocad antecedenti alla 2008, perchè era già preinstallato.
     
    Top
    .
  5.     +1   +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Installato il modulo VBA, il secondo passo è quello di riuscire ad entrare in ambiente programmazione e di creare un nuovo progetto.

    Per accedere all'ambiente di programmazione le vie sono:
    1- aprire un disegno vuoto di Autocad e dal menu strumenti-->macro selezionare la voce "Editor Visual Basic"

    j3ZmgWG



    2 - attraverso pressione dei tasti ALT+F11

    In questo modo siamo entrati in ambiente VBA in cui ancora non è presente alcun progetto.

    Le altre voci presenti nel menu Strumenti-->macro, servono alla gestione delle macro e dei progetti e in particolare la voce "Strumenti-->macro-->Carica progetto" serve per caricare un progetto esistente per poterlo editare, mentre la voce "Strumenti-->macro-->Gestione VBA" serve per incorporare o scorporare il progetto dal disegno.

    In genere un progetto VBA per autocad è un unico file avente estensione *.dvb che viaggia in maniera separata dal disegno *.dwg; con la voce "Strumenti-->macro-->Gestione VBA" si può scegliere di legare il progetto al disegno dwg.
    Un progetto puo' essere caricato anche attraverso la vce di menu "Strumenti-->Carica applicazione". Con questa si possono caricare oltre ai progetti VBA anche quelli in Autolisp.

    Notare anche la presenza della voce "Strumenti-->Esegui script". Si ricorre a questa opzione quando si vogliono fare eseguire dei comandi contenuti in un file di tipo script.
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Entrati in ambiente VBA ci ritroveremo la relativa finestra.

    T7a9pnS

    Questa è suddivisa in diverse regioni il cui numero dipende da cosa abbiamo scelto di far visualizzare attraverso scelte compiute dal menu "Visualizza" che vi invito ad esplorare.
    La zona rappresentata in grigio è quella in cui si scrive il codice (adesso è grigia perché non c'è ancora nessun progetto)
    La zona a sinistra si divide in due: la parte alta in cui sono elencati tutti i progetti presenti coi loro moduli e form (per adesso nessun progetto), la parte in basso che elencherà le proprietà degli oggetti selezionati (per adesso è vuota).

    Sotto alla zona grigia io ho deciso di far visualizzare tre finestrelle "Finestra immediata" "Variabili locali" e "Espressioni di controllo" che si riferiscono a strumenti per il debug.

    Edited by afazio - 2/10/2016, 19:47
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Un progetto VBA si compone dei seguenti elementi:

    - Moduli : spazio dove inseriremo il nostro codice. I moduli possono essere più di uno ognuno atto a raccogliere funzioni o sub specifiche ad un prefissato scopo. Un progetto deve avere almeno un Modulo.

    - UserForm : dialoghi dove costruiremo la nostra interfaccia. I form possono essere più di uno anche questi dedicati a qualcosa di specifico. Un progetto può anche non avere form

    - Moduli di Classe: spazi dove poter definire nostri oggetti con funzionalità e proprietà che decidiamo noi. Siamo quindi nella programmazione avanzata dalla quale mi sono tenuto a distanza. Un progetto puo' anche non avere alcuna Classe.

    Per inserire uno qualsiasi di questi elementi basta clickare col destro in qualsiasi punto della zona "Progetto- AcadProject" e selezionare l'elemento che si vuole inserire.

    sqFBWBM

    Nel nostro caso, per il disegno di un pozzetto, ho pensato per adesso di inserire due moduli di programma, uno principale ed uno in cui raccolgo le procedure di disegno, ed un form (quello che vi ho mostrato).
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Procedo quindi inserendo il primo modulo e ne cambio subito il nome proposto modulo1 in ModuloMain agendo come indicato nell'immagine:

    clt40tB

    La zona che prima era grigia adesso è diventata bianca ma sempre vuota.

    Inserisco il secondo modulo e lo rinomino in ModuloDisegni passando quindi all'inserimento del Form

    Dopo aver inserito il form, avrete la seguente situazione:

    YzMCu0S

    Capirete subito a cosa serve ognuno degli elementi rappresentati.

    C'è il nostro dialogo vuoto e di dimensioni di default, che puo' essere ridimensionato a piacimento trascinandone gli spigoli
    c'è la tavolozza degli strumenti, cioè dei controlli (bottoni, edit text, static text, controlli, immagini...) che possiamo inserire sul form
    c'è sempre la zona con l'elenco degli elementi facenti parte del progetto che adesso si è arricchita di tre nuove voci
    c'è sempre la zona delle proprietà dell'oggetto selezionato. Nell'immagine sono elencate le proprietà della form.

    Adesso dobbiamo cambiare sia il nome di questa form, anziche l'anonimo "UserForm1" mettiamo l'altrettanto anonimo "Finestra" e come titolo della finestra (Caption) metteremo "Disegno Pozzetti per Autocad".

    NhQVkzi

    cS8XjUf

    Per adesso basta.

    Salviamo il progetto dandogli un nome per esempio "Pozzetti.dvb" e chiudiamo Autocad. La prossima volta dovremo solo caricare il progetto e continuare.
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Junior Member

    Group
    Member
    Posts
    39
    Reputation
    0

    Status
    Offline
    Buongiorno Afazio, ho letto tutto ora perché nel weekend non sono proprio riuscito a mettermi al computer. Ti ringrazio per le numerose risposte e gli sviluppi nell’affrontare l’argomento.
    Allora, vado con ordine in base ai post. Cercherò di rispondere in modo puntuale in base agli argomenti sviscerati:

    1) La distinzione tra le varie parti che compongono il pozzetto mi pare corretta. Per quanto riguarda il parametro s2 (che stabilisce la dimensione del dente dove si appoggia il chiusino) potremmo fissarlo (come faccio già ora) ad una dimensione standard fissa pari a 2 cm sia in caso di chiusino circolare che quadrato.

    2) Ottima idea definire la coppia di rapporti che genera le due eccentricità. l’eccentricità del collare rispetto alla cameretta capita abbastanza di frequente, mentre capita molto di rado di avere eccentricità del chiusino rispetto al collare. Nonostante ciò, lascerei e implementerei comunque i 2 rapporti, lasciando di default nell’excel il valore 0.5 nel secondo rapporto in modo da avere chiusino e collare centrati tra loro.

    3) Il chiusino può essere circolare, quadrato, ma pure rettangolare; ma non penso generà problemi dato che, come accennato, la situazione quadrata non è altro che una particolare situazione rettangolare.

    4) Ottima idea introdurre la fondazione, la quale sarà sempre quadrata o rettangolare, introducendo come parametri 2 svasi rispetto alle dimensoni x e y della cameretta (in pianta)

    5) Essendo acerbo rispetto alle varie combinazioni per far dialogare excel e autocad, mi affido ad Afazio per quanto riguarda la migliore scelta tecnica per l’implementazione dell’automatismo.
    Mi pare di aver capito che la strada sia quindi usare direttamente uno script in VBA in autocad, dando “in pasto” al VBA un codice ascii esterno (esportato quindi dai dati excel ?) in modo che i dati non siano da inserire ogni volta manualmente nelle finestre di input del codice VBA.

    Mi accingo a inserire nell’excel le colonne di dati mancanti per il disegno (come la famosa s2) e le coordinate x1, z1 e anche y1 per definire la posizione di ogni tubo in pianta e in sezione (successivamente pubblicherò il file.) Di default queste potranno essere imposte in modo tale da disegnare ogni tubo in modo centrato sulla x e sulla y (non sulla z, per quella ci si affida alla profondità tubo).

    Vado ad eseguire gli step spiegati fino all’ultimo post, aspetto ulteriori delucidazioni per arrivare a costruire il form…
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (DavideComi @ 3/10/2016, 10:23) 
    1) La distinzione tra le varie parti che compongono il pozzetto mi pare corretta. Per quanto riguarda il parametro s2 (che stabilisce la dimensione del dente dove si appoggia il chiusino) potremmo fissarlo (come faccio già ora) ad una dimensione standard fissa pari a 2 cm sia in caso di chiusino circolare che quadrato.

    A seguito rinumerazione degli elementi, quello che tu indichi con s2 è diventanto s3.

    La numerazione e la nomenclatura non sono a caso.
    Se noti ogni elemento è caratterizzato dai seguenti parametri:
    - larghezza secondo x Lx
    - larghezza secondo y Ly
    - spessore parete s
    - spessore piastra sommitale : a
    - altezza: H
    - forma
    - eccentricità

    quindi ognuno di essi può essere identificato attraverso i quattro ( o più) parametri.

    Avremo cosi :
    Fondazione [ Lx0; Ly0; 0;0; H0]
    Cameretta [ Lx1; Ly1; s1;a1; H1]
    Colletto [ Lx2; Ly2; s2;a2; H2]
    Chiusino [ Lx3; Ly3; s3;a3; 0]

    Cosi sarà possibile creare una variabile strutturata unica per tutti gli elementi ed avente i campi descritti.
    Volendo possiamo anche inserire nella struttura del tipo di variabile che definiremo anche le due eccentricità e la forma.
    Nel caso di forma circolare basterà porre Lx=Ly e considerare il diametro pari all'unico valore di L.

    Per quanto riguarda i parametri relativi al chiusino sarebbero quelli rappresentati nell'immagine allegata
    Attached Image
    Schema4

     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    3,345
    Reputation
    +213

    Status
    Offline
    CITAZIONE (afazio @ 3/10/2016, 11:24) 
    Nel caso di forma circolare basterà porre Lx=Ly e considerare il diametro pari all'unico valore di L.

    immagino che Lx=Ly debba significare forma quadrata, prima ancora che forma circolare.
    per riconoscere il cerchio io suggerirei Lx=-Ly.
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (reversi @ 3/10/2016, 11:37) 
    immagino che Lx=Ly debba significare forma quadrata, prima ancora che forma circolare.
    per riconoscere il cerchio io suggerirei Lx=-Ly.

    No. C'è il flag relativo alla forma.
    Se il flag della forma è circolare allora faremo cambiare la caption Lx[cm] in D[cm], disattiveremo il campo relativo ad Ly e da codice porremo Ly=Lx.

    CITAZIONE (DavideComi @ 3/10/2016, 10:23) 
    4) Ottima idea introdurre la fondazione, la quale sarà sempre quadrata o rettangolare, introducendo come parametri 2 svasi rispetto alle dimensioni x e y della cameretta (in pianta)

    Cosa intendi per i due svasi?

    CITAZIONE (DavideComi @ 3/10/2016, 10:23) 
    5) Essendo acerbo rispetto alle varie combinazioni per far dialogare excel e autocad, mi affido ad Afazio per quanto riguarda la migliore scelta tecnica per l’implementazione dell’automatismo.
    Mi pare di aver capito che la strada sia quindi usare direttamente uno script in VBA in autocad, dando “in pasto” al VBA un codice ascii esterno (esportato quindi dai dati excel ?) in modo che i dati non siano da inserire ogni volta manualmente nelle finestre di input del codice VBA.

    Si, hai capito bene.

    Il programma dovrà poter funzionare "da solo" cioè mediante input diretto dei parametri nel dialogo. oppure leggere i dati registrati da excel in un file formato Ascii di cui definiremo il protocollo di registrazione. Una volta letti i dati questi si possono anche modificare nel dialogo prima di avviare il disegno.

    Inoltre si può anche pensare di creare un database di pozzetti partendo da quelli che via via disegniamo.

    CITAZIONE (DavideComi @ 3/10/2016, 10:23) 
    Mi accingo a inserire nell’excel le colonne di dati mancanti per il disegno (come la famosa s2) e le coordinate x1, z1 e anche y1 per definire la posizione di ogni tubo in pianta e in sezione (successivamente pubblicherò il file.) Di default queste potranno essere imposte in modo tale da disegnare ogni tubo in modo centrato sulla x e sulla y (non sulla z, per quella ci si affida alla profondità tubo).

    Vado ad eseguire gli step spiegati fino all’ultimo post, aspetto ulteriori delucidazioni per arrivare a costruire il form…

    - Hai già installato il modulo VBA in autocad?
    - Sei riuscito a creare il primo progetto vuoto come ho indicato?
     
    Top
    .
  13.     +1   -1
     
    .
    Avatar

    Junior Member

    Group
    Member
    Posts
    39
    Reputation
    0

    Status
    Offline
    Ok perfetto, quindi la struttura dei parametri di disegno, ulteriormente implementabile sarebbe così

    struttura

    per svaso intendo di quanto la fondazione dovrà uscire dalla linea del muro

    Cattura1

    sisi, modulo VBA installato e funzionante, sono riuscito ad importare e a far girare l'esempio trovato sul forum dei pali di fondazione. :rolleyes: :rolleyes:

    tra un attimo creo il progetto in VBA come indicato sopra
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (DavideComi @ 3/10/2016, 12:00) 
    per svaso intendo di quanto la fondazione dovrà uscire dalla linea del muro

    (IMG:https://upload.forumfree.net/i/ff12347424/Cattura1.jpg)

    sisi, modulo VBA installato e funzionante, sono riuscito ad importare e a far girare l'esempio trovato sul forum dei pali di fondazione. :rolleyes: :rolleyes:

    tra un attimo creo il progetto in VBA come indicato sopra

    Lo svaso allora sarebbe già determinato attraverso L0 , L1 e s1

    svaso= (L0 -L1-2*s1)/2

    quindi non serve ulteriore parametro.
    Tuttavia, volendo possiamo far stampare nel dialogo il valore dello svaso per controllo e verifica. Direi però di rinviare questi dettagli di affinamento solo dopo essere riusciti a far fare il "grosso"

    Bene, quando riesci a creare e salvare il primo tuo progetto vuoto, partiamo. Ho un'ora di tempo.
     
    Top
    .
  15.     +1   -1
     
    .
    Avatar

    Junior Member

    Group
    Member
    Posts
    39
    Reputation
    0

    Status
    Offline
    hai ragione :o: :woot:
    ok prima facciamo il grosso poi sistemiamo le finezze

    domanda: ogni tubo avrà una xi, una yi e una zi per essere posizionato e disegnato, oltre che diametro e verso. Tutto ciò sarà deciso in un altro form dedicato ai tubi che andrà a sovrapporsi al disegno del pozzetto ?
     
    Top
    .
217 replies since 30/9/2016, 09:08   7895 views
  Share  
.