Il Bar dell'Ingegneria

VBA e Autocad. Primi passi

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

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    B843H3d

    Segnalo altri topic che riguardano VBA ed AutoCad
    ___________________________________________________________________________
    - VBA e Autocad. Primi passi
    - VBA e Autocad. Ancora primi passi
    - VBA e AutoCad- Le primitive: la polilinea
    - VBA e AutoCAd Le primitive- IL cerchio
    - VBA Autocad --->Excel
    - VBA e AutoCad - Pick Points
    - PickPoints: salvare i dati da Autocad in Excel
    - VBA e Autocad. Il controllo del controllo
    - VBA e AutoCAD- Un esempio pronto all'uso

    - VBA AutoCad - Disegnare ellisse e nocciolo con un clik
    - Spirali logaritmiche in AutoCad
    - Disegno segmento in Autocad attraverso macro VBA Excel
    - Avviare una macro Autocad da Macro Excel
    - Progetto Sovratensioni e tracciamento ISOBARE in autocad
    - VBA E aUTOcAD- La numerazione automatica
    - VBA e AutoCad - La fotonumerazione
    - Autocad e VBA
    - Tower
    ___________________________________________________________________________


    Dopo tanto tempo di assenza al bar, dopo tanto peregrinare e dopo che m'è morto l'Argo pidocchioso, ho deciso di riaprire qui una finestra e prender un pò d'aria fresca.

    In questo 3d mi propongo di dare le prime istruzioni su come costruire un dialogo in VBA per autocad, come richiamarlo da codice e sopratutto come chiuderlo.
    Successivamente ci dedicheremo a popolare il dialogo con immagini, caselle di input piu' o meno combinate, bottoni, box radio ed altro finalizzate al disegno automatico di quel che ci viene in testa.
    Infine vedremo come interagire con gli eventuali "oggetti" presenti sul foglio di disegno di Autocad, come generare nuovi layer attribuirne le proprietà fondamentali, come generare un blocco e cose cosi.
    Sia chiaro a tutti coloro che avranno voglia di seguire queste righe che il sottoscritto non è un vero programmatore, che molto probabilmente alla prima domanda non saprà dare la risposta giusta e che è consapevole del fatto che esistono centinaia di siti dedicati al VBA per Autocad che trattano o avranno trattato gli stessi argomenti con molta professionalità. Tuttavia, come disse qualcuno nel recinto dei suini della circe meghera, capita che molti non arrivano alla prima rampa soltanto perchè non sono in grado di superare il primo gradino.


    Come accedere all'ambiente VBA in autocad.

    Più che cento parole val una sola immagine.

    1kIpqer

    Noterete che la via abbreviata per accedere all'ambiente VBA di autocad è la combinazione di tasti ALT+F11


    Vi si apre finalmente lo spazio dove possiamo inserire sia codice che dialoghi. L'ambiente è praticamente uguale a quello che abbiamo avuto modo di vedere in VBA per Excel.

    dBq2spv

    Inseriamo adesso un Form dove successivamente costruiremo il nostro primo dialogo, ed un modulo dove metteremo il codice necessario per richiamare il dialogo.

    Clik col destro in un punto qualsiasi della finestra del progetto VBA (o in alternativa selezionare la voce di menu "inserisci") e scegliere la voce "inserisci" e da qui prima selezionare "UserForm" ed una seconda volta selezionare al voce "modulo".

    6x9NpU0

    Edited by afazio - 26/12/2015, 15:13
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Occupiamoci adesso di costruire il nostro primo dialogo. Per fare questo: doppio clik sulla voce "userform1" del progetto VBA.
    A destra appare il nostro primo dialogo completamente vuoto avente come barra del titolo "UserForm1". Insieme al dialogo appare anche la tavoletta degli strumenti (oggetti che possiamo inserire nel nostro dialogo).

    Da sottolineare che gli strumenti possono essere estesi se si posseggono le relative librerie pubblicate nel sistema attraverso click col destro su un punto vuoto della tavoletta strumenti e selezionando la voce "Controlli aggiuntivi". L'utilizzo di strumenti aggiuntivi attraverso questa procedura rende poco portabile il progetto VBA verso altri utilizzatori dato che non è detto che gli altri abbiano le stesse nostre estensioni. Vi consiglio pertanto di usare solo gli strumenti standard.

    Fed8h7x

    Nell'immagine postata ho già cambiato il titolo del dialogo dall'anonimo "Userform1" al banale "Il Primo dialogo". Questa modifica si esegue digitando semplicemente ciò che si vuole nella proprietà Caption del dialogo. Ma il titolo della barra potrebbe anche essere cambiato attraverso codice mediante la semplice istruzione:

    Userform1.caption="Ciò che si vuole"

    Il dialogo, le sue proprietà, il suo contenuto, è accessibile attraverso il suo nome che rappresenta la variabile con la quale viene memorizzato all'atto dell'apertura.
    E' opportuno dare dei nomi ai dialoghi che siano significativi di quello che sono destinati a compiere.

    Edited by afazio - 26/12/2015, 14:41
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Occupiamoci adesso di predisporre la via di fuga da questo dialogo per evitare di restare intrappolati in esso una volta che lo avviamo col rischio di dover resettare il sistema per tornare operativi.

    Per far questo selezioniamo dalla tavola degli strumenti il "Pulsante di comando", posizioniamoci sul form, clik in un punto e trasciniamo il puntatore fino a raggiungere le dimensioni che vogliamo per quel comando.
    Al rilascio del clik, VBA inserisce un bottone nel dialogo dandogli il nome "CommandButton1" e come caption ancora "Command Button1".
    XD16oMJ
    RIcordate sempre che "Nome" e Caption" sono due cose completamente diverse. Il nome è la variabile con la quale viene riconosciuto quell'oggetto e con la quale si puo' accedere a qualsiasi proprietà o metodo dello stesso, mentre la Caption è l'etichetta che appare scritta all'interno dell'oggetto.
    Cambiamo la caption in "ESCI".
    97ucR9v
    Conviene anche cambiare il nome dell'oggetto. Se lasciassimo il nome proposto dal VBA potremmo avere la presenza di diversi bottoni coi nomi CommandButton1, CommandButton2, ..... CommandButton8 con evidenti difficolta all'interno del codice. Non riusciremmo facilmente a capire quale bottone fa questa cosa o quell'altra. In questo primo esempio non cambio il nome.

    Edited by afazio - 26/12/2015, 14:48
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Doppio clik sul pulsante esci
    viene visualizzato lo spazio dove inserire tutto il codice privato relativo al dialogo ed ai suoi elementi con già scritta l'intestazione della procedura da eseguire al verificarsi dell'evento clik sul pulasante:

    Vo44h58

    Private Sub CommandButton1_Click()

    End Sub


    Tra le due righe proposte inseriamo il comando che chiude il dialogo:

    UserForm1.Hide

    Da notare che dalla lista a destra è possibile scegliere i diversi eventi da gestire.

    Lz3ssdw

    Edited by afazio - 26/12/2015, 14:52
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Infine scriviamo il codice che visualizza il nostro primo dialogo. Chiamo il codice con il nome Avvia().

    doppio clik sul modulo che avevamo creato all'inizio. Si apre la pagina dove inserire il codice pubblico e scriviamo la procedura che visualizza il dialogo:
    CODICE
    Sub avvia()
       UserForm1.Show
    End Sub


    1O4AI2e

    Chiudiamo tutto quanto avendo l'accortezza di salvare il progeto VBA non appena ci verrà richiesto.

    Adesso vediamo come utilizzare la banalità che fin qui abbiamo scritto.
    Apriamo una nuova sessione di autocad con foglio vuoto o anche con il file sul quale stiamo lavorando.
    Appena aperto il file scegliamo dal menu "strumenti" la voce "carica applicazione",
    CA2d6js
    indi navighiamo fino a trovare il nostro progetto precedentemente salvato e diamo il comando "carica".
    4Gheq3e
    Quindi chiudiamo quella finestra.

    Adesso possiamo far eseguire il codice premendo ALT+F8. Compare un dialogo con la lista di tutte le sub contenute in tutti i progetti caricati, noi selezioniamo quella che ci interessa (nel nostro caso "Avvia") e diamo l'ok
    pwv8UcI

    Vedremo apparirci il nostro bel dialogo che per ora non fa un bel nulla.

    B843H3d

    Edited by afazio - 26/12/2015, 15:13
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,654
    Reputation
    +11

    Status
    Offline
    CITAZIONE (afazio @ 4/7/2012, 10:18) 
    dopo tanto peregrinare e dopo che m'è morto l'Argo pidocchioso

    ehehehe....un ritorno che si preannuncia sfavillante, visto questo inizio...stasera provo subito questi primi passi nel mirabolante mondo di vba in autocad. Intanto, grazie :)
     
    Top
    .
  7. RenatoL80
        +1   -1
     
    .

    User deleted


    Ciao vorrei farti una domanda....
    io dovrei sviluppare una applicazione VBA che mi permetta di scegliere componenti già disegnati in autocad e comporre un assieme, ed in più devo stilare anche la ditinta base di ogni singolo componente immesso. Dove posso guardare per fare questa cosa?

    Grazie

    Renato
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Cosa intendi per "componenti gia disegnati in autocad"?
    Sono dei blocchi aventi un nome definito, oppure semplicemente una serie di primitive.

    Dove puoi guardare? Bho, questo non lo so e poi dipende dal tuo grado di consocenza del VBA per Autocad. Posso consigliarti qualche manuale che puoi trovare on line.
     
    Top
    .
  9. RenatoL80
        +1   -1
     
    .

    User deleted


    Si scusa hai ragione .. i componenti cui mi riferisco sono particolari di carpenteria meccanica...di quelli possiedo già i disegni 2d in autocad, ma se serve posso fare anche altrettanti blocchi.
    Per quello che riguarda i manuali on line sai dirmi qualche titolo, per guardarci un po in rete?

    Grazie

    Renato
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    Prova a cercare nel forum Cad3d.it
    Ho visto richieste simili alle tue ed a molte di queste qualcuno ha anche dato risposta.
     
    Top
    .
  11. RenatoL80
        +1   -1
     
    .

    User deleted


    ok grazie, anche se ti confesso che mi aspettavo già un titolo......
    ciao alla prox
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    CITAZIONE (RenatoL80 @ 19/7/2012, 12:13) 
    ok grazie, anche se ti confesso che mi aspettavo già un titolo......
    ciao alla prox

    Mi spiace. Io ho acquistato una decine ai anni fa un tomo di qualche migliaio di pagine col quale ho iniziato prima in excel e poi in autocad. Ma quel testo è ormai ampiamente superato e certamente ormai non piu reperibile.
    Poi, ripeto, dipende molto dal tuo grado di conoscenza prima di programmazione ed algoritmi, poi di un qualche linguaggio ed infine del VBA.
    Una cosa è fornire indicazioni a chi non conosce nemmeno un ciclo "Do while" anzichenò un "Repeat Until" o a chi conosce abbastanza bene un linguaggio di programmazione e si vuole dedicare al VBA.
     
    Top
    .
  13. RenatoL80
        +1   -1
     
    .

    User deleted


    si si capisco perfettamente quello che dici... e sulla sintassi non sono molto icuro ma di sicuro capire un "DO While" od un "Repeat Until" penso di averlo fatto una quindicina di anni orsono, eppoi con VBA ci ho gia lavorato, anche se non in autocad.
    Il mio problema è quello di trovare la forma giusta per dire al VBA di importare dei disegni già fatti in una nuova tavola..tutto qui! Te non hai idea di come si potrebbe fare? O quali sono i comandi giusti?
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +294

    Status
    Offline
    CITAZIONE (RenatoL80 @ 19/7/2012, 12:43) 
    si si capisco perfettamente quello che dici... e sulla sintassi non sono molto icuro ma di sicuro capire un "DO While" od un "Repeat Until" penso di averlo fatto una quindicina di anni orsono, eppoi con VBA ci ho gia lavorato, anche se non in autocad.
    Il mio problema è quello di trovare la forma giusta per dire al VBA di importare dei disegni già fatti in una nuova tavola..tutto qui! Te non hai idea di come si potrebbe fare? O quali sono i comandi giusti?

    Posso provare a scrivere un esempio banale. Non adesso però. Forse stasera

    ciao

    P.S.: Ma intanto che ci penso, lo puoi fare direttamente dal cad.
    - apri il primo disegno dove ci sono i "componenti già disegnati"
    - apri contemporaneamente un nuovo disegno dove vuoi inserire le varie parti copiate dal primo disegno
    - vai sul primo disegno e selezioni ciò che vuoi sia copiato. Dai il comando di "copia con punto base"
    - attivi il secondo disegno e dai il comando "incolla come blocco"
    Esegui questa sequenza quante volte necessario.
    Mentre per la distinta la cosa è un pochino piu complessa dato che se non hai "oggetti" contenenti in se l'informazione di cosa rappresentano nella realtà potrai solo ottenere una distinta di quantitativi di rette, curve, polilinea punti e cosi via.
    Se nessuno ha detto ad autocad che un determinato blocco composto da 327 linee e due curve, è un bullone di tale diametro, non riuscirai mai ad estrarre una lista contenente il numero dei bulloni di tale o cotale diametro.
    Chiaro?

    Edited by afazio - 19/7/2012, 12:56
     
    Top
    .
  15. RenatoL80
        +1   -1
     
    .

    User deleted


    Dai se mi dici a che ora ti aspetto..e comunque grazie dell' interessmento.
    A dopo
     
    Top
    .
20 replies since 4/7/2012, 08:59   7260 views
  Share  
.