Autore |
Discussione  |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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)
)
|
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
|
Terminator
Utente Master
725 Messaggi |
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. |
Modificato da - Terminator in data 17 dicembre 2012 16:23:30 |
 |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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)
|
Modificato da - arri in data 18 dicembre 2012 08:09:54 |
 |
|
joseph
Utente Master

Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
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) )
|
 |
|
Terminator
Utente Master
725 Messaggi |
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
Utente Master

Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
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
Utente Master
725 Messaggi |
Inserito il - 18 dicembre 2012 : 17:35:29
|
@Joseph Con INSERT va tranquillamente, è con vla-insertblock che non va. |
 |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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") |
 |
|
joseph
Utente Master

Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
Inserito il - 18 dicembre 2012 : 17:59:41
|
Probabilmente "*" è un comando non riconosciuto dall'ambiente ActiveX. |
 |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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
|
Modificato da - arri in data 19 dicembre 2012 07:47:09 |
 |
|
joseph
Utente Master

Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
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
Utente Master
Regione: Lombardia
14951 Messaggi |
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'è |
Modificato da - arri in data 19 dicembre 2012 12:08:46 |
 |
|
joseph
Utente Master

Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
Inserito il - 19 dicembre 2012 : 13:33:40
|
Annegavo in un bicchier d'acqua!! :(( La ricerca di una soluzione, quindi, non finisce qui.
|
 |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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   |
Modificato da - arri in data 19 dicembre 2012 18:12:35 |
 |
|
Terminator
Utente Master
725 Messaggi |
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
Utente Master
Regione: Lombardia
14951 Messaggi |
|
|
Discussione  |
|