V I S U A L I Z Z A D I S C U S S I O N E |
arri |
Inserito il - 12 dicembre 2012 : 11:37:33 Batch insert of multiple DWG files into one
(defun c:InsertBlks (/ d doc lst pt pt1 dir b)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if
(and (setq
dir (vl-filename-directory
(getfiled "Select a DWG" (getvar 'dwgprefix) "dwg" 8)
)
)
(setq lst (vl-directory-files dir "*.dwg"))
(setq pt1 (getpoint "\nSelect point for first block: "))
(setq d
(distance (getpoint pt1 "\nSelect distance to space blocks: ")
pt1
)
)
)
(foreach b lst
(vla-insertblock
(if (= (getvar 'cvport) 1)
(vla-get-paperspace doc)
(vla-get-modelspace doc)
)
(vlax-3d-point (setq pt1 (polar pt1 0.0 d)))
(strcat dir "\\" b)
1
1
1
0.0
)
)
)
(princ)
) |
16 U L T I M E R I S P O S T E (in alto le più recenti) |
arri |
Inserito il - 29 gennaio 2014 : 15:03:32 http://www.cadstudio.cz/en/download.asp?file=InsertBlks
hanno aggiornato, è possibile scegliere di inserirli esplosi |
Terminator |
Inserito il - 19 dicembre 2012 : 15:43:44 | Messaggio inserito da arri la prima l'ha risolta Terminator
|
Risolta per modo di dire... Cerco di ottenere i risultati utilizzando il meno possibile la funzione command e vl-cmdf soprattutto perché non mi permettono di disegnare entità fuori dallo schermo, cosa invece possibile con le funzioni vla-... ed entmake. Fra le cose meno importanti c'è anche quella che le callback function dei reattori non le accettano, come non accettano le funzioni ssget ed entsel (le analoghe funzioni VLisp sono veramente molto, ma molto macchinose). |
arri |
Inserito il - 19 dicembre 2012 : 13:53:51 Messaggio inserito da joseph
Annegavo in un bicchier d'acqua!! :(( La ricerca di una soluzione, quindi, non finisce qui.
joseph, quando hai voglia e tempo, puoi vedere la seconda richiesta qui
http://www.cadlandia.com/topic.asp?TOPIC_ID=14819
la prima l'ha risolta Terminator
P.S.
ha terminato anche la seconda   |
joseph |
Inserito il - 19 dicembre 2012 : 13:33:40 Annegavo in un bicchier d'acqua!! :(( La ricerca di una soluzione, quindi, non finisce qui.
|
arri |
Inserito il - 19 dicembre 2012 : 11:58:11 Messaggio inserito da joseph Anche se inserisci il disegno con l'asterisco (o mettendo il segno di spunta nel riquadro di dialogo Inserisci) la definizione di blocco esiste sempre nel disegno e non la puoi eliminare. O mi sta sfuggendo qualcosa di molto elementare?
non è così,
Comando: -BLOCCO Digitare nome del blocco o : ? Digitare uno o più blocchi da elencare <*>: Blocchi definiti. vedrai che non c'è
per averne la conferma, prova a salvare il dwg e uscire, ricaricalo e vedrai che la definizione non c'è |
joseph |
Inserito il - 19 dicembre 2012 : 11:51:44 | ...... ma il problema non è esploderli, ma inserirli puliti, caratteristica dell'asterisco, che evita la memorizzazione dei nomi dei dwg come definizioni di blocchi
|
Anche se inserisci il disegno con l'asterisco (o mettendo il segno di spunta nel riquadro di dialogo Inserisci) la definizione di blocco esiste sempre nel disegno e non la puoi eliminare. O mi sta sfuggendo qualcosa di molto elementare? |
arri |
Inserito il - 18 dicembre 2012 : 19:09:40 Messaggio inserito da joseph
Rimanendo in ambito Active-x, si può utilizzare la funzione vla-explode.
(defun c:ins-dwg (/ d doc lst pt pt1 dir b) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (and (setq dir (vl-filename-directory (getfiled "Select a DWG" (getvar 'dwgprefix) "dwg" 4))) (setq lst (vl-directory-files dir "*.dwg")) (setq pt1 (getpoint "\nSelect point for first block: ")) (setq d (distance (getpoint pt1 "\nSelect distance to space blocks: ") pt1)) ) ;and
(foreach b lst (vla-explode (vla-insertblock (if (= (getvar 'cvport) 1) (vla-get-paperspace doc) (vla-get-modelspace doc) ) (vlax-3d-point (setq pt1 (polar pt1 0.0 d))) (strcat dir "\\" b) 1 1 1 0.0 ) ;vla-insert.. ) ;vla-explode ) ;foreach ) ;if (princ) )
grazie joseph,  ma il problema non è esploderli, ma inserirli puliti, caratteristica dell'asterisco, che evita la memorizzazione dei nomi dei dwg come definizioni di blocchi
|
joseph |
Inserito il - 18 dicembre 2012 : 17:59:41 Probabilmente "*" è un comando non riconosciuto dall'ambiente ActiveX. |
arri |
Inserito il - 18 dicembre 2012 : 17:41:29 Messaggio inserito da Terminator
@Joseph Con INSERT va tranquillamente, è con vla-insertblock che non va.
era questo che intendevo dire prima,
forse dovevo evidenziare solo questo
quindi ho usato il banale (vl-cmdf "_INSERT") |
Terminator |
Inserito il - 18 dicembre 2012 : 17:35:29 @Joseph Con INSERT va tranquillamente, è con vla-insertblock che non va. |
joseph |
Inserito il - 18 dicembre 2012 : 17:05:54 Prova a sostituire 0.0 con 0
(vl-cmdf "_INSERT" (strcat "*" dir "\\" b) (setq pt1 (polar pt1 0.0 d)) 1 0)
|
Terminator |
Inserito il - 18 dicembre 2012 : 16:21:37 (defun c:InsertBlks (/ d doc lst pt pt1 dir b)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if
(and
(setq dir (cartella "Select a DWG" "C:\\"))
(setq lst (vl-directory-files dir "*.dwg"))
(setq pt1 (getpoint "\nSelect point for first block: "))
(setq d (distance (getpoint pt1 "\nSelect distance to space blocks: ") pt1))
)
(foreach b lst
(vl-cmdf "_INSERT" (strcat "*" dir b) (setq pt1 (polar pt1 0.0 d)) 1 0.0)
)
)
(princ)
)
(defun cartella (selezione percorso / shell folder2 folderitem selcartella)
(setq shell (vlax-create-object "Shell.Application")
folder2 (vlax-invoke-method shell 'BrowseForFolder 0 selezione 1 percorso)
)
(if folder2
(progn
(setq folderitem (vlax-get-property folder2 'Self)
selcartella (vlax-get-property folderitem 'Path)
)
)
nil
)
)
@arri Continua a non funzionarmi: (strcat "*" dir "\\" b)  |
joseph |
Inserito il - 18 dicembre 2012 : 14:53:49 Rimanendo in ambito Active-x, si può utilizzare la funzione vla-explode.
(defun c:ins-dwg (/ d doc lst pt pt1 dir b) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (and (setq dir (vl-filename-directory (getfiled "Select a DWG" (getvar 'dwgprefix) "dwg" 4))) (setq lst (vl-directory-files dir "*.dwg")) (setq pt1 (getpoint "\nSelect point for first block: ")) (setq d (distance (getpoint pt1 "\nSelect distance to space blocks: ") pt1)) ) ;and
(foreach b lst (vla-explode (vla-insertblock (if (= (getvar 'cvport) 1) (vla-get-paperspace doc) (vla-get-modelspace doc) ) (vlax-3d-point (setq pt1 (polar pt1 0.0 d))) (strcat dir "\\" b) 1 1 1 0.0 ) ;vla-insert.. ) ;vla-explode ) ;foreach ) ;if (princ) )
|
arri |
Inserito il - 18 dicembre 2012 : 07:46:52 Messaggio inserito da Terminator
(defun c:Insert1 (/ d doc lst pt pt1 dir b)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if
(and
(setq dir (vl-filename-directory (getfiled "Select a DWG" (getvar 'dwgprefix) "dwg" 4)))
(setq lst (vl-directory-files dir "*.dwg"))
(setq pt1 (getpoint "\nSelect point for first block: "))
(setq d (distance (getpoint pt1 "\nSelect distance to space blocks: ") pt1))
)
(foreach b lst
(vl-cmdf "_INSERT" (strcat "*" dir b) (setq pt1 (polar pt1 0.0 d)) 1 0.0)
)
)
(princ)
)
Alcune considerazioni: 1) Il flag settato a 8 non mi funziona, perché elimina la directory dove si trova il file, l'ho sostituito con 4 2) L'asterisco si può anteporre al file ma deve essere inserito PRIMA della directory 3) Stranamente vla-insertblock invece non accetta l'asterisco, quindi ho usato il banale (vl-cmdf "_INSERT") al posto dell'ActiveX method 4) Mi sembra meglio usare invece di (getfiled) la funzione (cartella) presente in vari post, in fondo devo selezionare una cartella non un file da cui estrapolare la cartella relativa.
grazie, infatti con questa modifica funziona, (strcat "*" dir "\\" b)
|
Terminator |
Inserito il - 17 dicembre 2012 : 16:18:56 (defun c:Insert1 (/ d doc lst pt pt1 dir b)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if
(and
(setq dir (vl-filename-directory (getfiled "Select a DWG" (getvar 'dwgprefix) "dwg" 4)))
(setq lst (vl-directory-files dir "*.dwg"))
(setq pt1 (getpoint "\nSelect point for first block: "))
(setq d (distance (getpoint pt1 "\nSelect distance to space blocks: ") pt1))
)
(foreach b lst
(vl-cmdf "_INSERT" (strcat "*" dir b) (setq pt1 (polar pt1 0.0 d)) 1 0.0)
)
)
(princ)
)
Alcune considerazioni: 1) Il flag settato a 8 non mi funziona, perché elimina la directory dove si trova il file, l'ho sostituito con 4 2) L'asterisco si può anteporre al file ma deve essere inserito PRIMA della directory 3) Stranamente vla-insertblock invece non accetta l'asterisco, quindi ho usato il banale (vl-cmdf "_INSERT") al posto dell'ActiveX method 4) Mi sembra meglio usare invece di (getfiled) la funzione (cartella) presente in vari post, in fondo devo selezionare una cartella non un file da cui estrapolare la cartella relativa. |
arri |
Inserito il - 17 dicembre 2012 : 15:04:27 ma in Autolisp non è possibile anteporre l'asterisco al nome per inserire blocchi esplosi ? |