Trasformare blocchi in gruppi tramite esplosione simultanea blocchi

MANOLI63

Utente poco attivo
Professione: progettista
Software: autocad MAP 3D 2018
Regione: lombardia
Buonasera a tutti,

allego un lisp che mi aiuta a creare gruppi esplodendo blocchi. Sto cercando l'aiuto di qualcuno per ottenere un comando simile che permetta però un'unica selezione per l'esplosione dei blocchi e la creazione contestuale di gruppi che includano gli stessi oggetti dei blocchi precedenti.
Grazie a chi vorrà aiutarmi
 

Allegati

  • 308 bytes Visualizzazioni: 9

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Codice:
(defun c:B2G(/ sel count n obj selB name handle)
    (prompt "\nSeleziona blocchi da esplodere: ")
    (setq sel (ssget (list (cons 0 "INSERT"))))
    (command "._UNDO" "_Begin")
    (setq count 0)           
    (repeat (sslength sel)
        (setq n (ssname sel count))
        (setq obj (vlax-ename->vla-object n))
        (setq name (vlax-get-property obj 'EffectiveName))
        (setq handle (vlax-get-property obj 'Handle))
        (setq selB (fnExplode2Sel n))
        ;(command "._-GROUP" "_Create" (strcat name "-" handle) "" selB "")  ; crea gruppo con nome+handle
        (command "._-GROUP" "_Create" "*" (strcat "Explode: " name) selB "") ; crea gruppo senza nome con descrizione
        (setq count (1+ count))
    )
    (command "._UNDO" "_En")
)

; esplode entita n e ritorna gruppo di selezione
(defun fnExplode2Sel(n / sel Qaflag Order)   
    (setq Order (getvar "draworderctl"))
    (setq Qaflag (getvar "qaflags"))
    (setvar "draworderctl" 0)
    (setvar "qaflags" 1)
    (command "_explode" n "")
    (setvar "qaflags" Qaflag)
    (setvar "draworderctl" Order)       
    (ssget "_p")       
)
Puoi scegliere se utilizzare la creazione del gruppo senza nome o con nome blocco + handle.
Handle l'ho utilizzato per rendere il nome del gruppo univoco.
La funzione fnExplode2Sel esplode l'entità e ritorna il gruppo di selezione.

Ciao
 

MANOLI63

Utente poco attivo
Professione: progettista
Software: autocad MAP 3D 2018
Regione: lombardia
Grande!
Sia il comando che rpor66.
Funziona benissimo: per ora ho provato con 4 blocchi, tra poco proverò con 200-250 (di solito lavoro con queste quantità).
Non ho l'esigenza di nominare i gruppi (che normalmente consistono in 10-12 tipologie differenti e contengono campi dati con dimensioni di lunghezze e aree che banalmente mi identificano i tipi), però (scusa l'ignoranza) per eventuali esigenze future mi piacerebbe capire come fare la scelta gruppo con/senza nome: cosa significa "blocco + handle"?
Intanto ancora Grazie!
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Ti basta mettere il ; sulla riga ed eliminarlo dall'altra.
;(command "._-GROUP" "_Create" (strcat name "-" handle) "" selB "") ; crea gruppo con nome+handle
(command "._-GROUP" "_Create" "*" (strcat "Explode: " name) selB "") ; crea gruppo senza nome con descrizione

Handle è l'identificativo univoco di ogni entità presente nel dwg; nello specifico, serve ad assegnare il nome del blocco al gruppo e nel caso di 2 blocchi uguali, handle permette di avere nomi dei gruppi univoci.

Ciao
 

MANOLI63

Utente poco attivo
Professione: progettista
Software: autocad MAP 3D 2018
Regione: lombardia
Ok, terrò presente. Sicuramente mi hai dato uno spunto in più per scervellarmi su come potrebbe tornarmi utile anche questa opzione.
Domani lo metterò alla prova.
Grazie
Buona serata