TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 Inserire tutti i dwg di una cartella
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 12 dicembre 2012 : 11:37:33  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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

Inserito il - 17 dicembre 2012 : 15:04:27  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
ma in Autolisp non è possibile anteporre l'asterisco al nome per inserire blocchi esplosi ?
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 17 dicembre 2012 : 16:18:56  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
(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
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 18 dicembre 2012 : 07:46:52  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 18 dicembre 2012 : 14:53:49  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
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)
)
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 18 dicembre 2012 : 16:21:37  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
(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)
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 18 dicembre 2012 : 17:05:54  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Prova a sostituire 0.0 con 0

(vl-cmdf "_INSERT" (strcat "*" dir "\\" b) (setq pt1 (polar pt1 0.0 d)) 1 0)
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 18 dicembre 2012 : 17:35:29  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
@Joseph
Con INSERT va tranquillamente, è con vla-insertblock che non va.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 18 dicembre 2012 : 17:41:29  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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")
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 18 dicembre 2012 : 17:59:41  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Probabilmente "*" è un comando non riconosciuto dall'ambiente ActiveX.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 18 dicembre 2012 : 19:09:40  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 19 dicembre 2012 : 11:51:44  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
......
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?
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 19 dicembre 2012 : 11:58:11  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 19 dicembre 2012 : 13:33:40  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Annegavo in un bicchier d'acqua!! :((
La ricerca di una soluzione, quindi, non finisce qui.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 19 dicembre 2012 : 13:53:51  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 19 dicembre 2012 : 15:43:44  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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).
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 29 gennaio 2014 : 15:03:32  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
http://www.cadstudio.cz/en/download.asp?file=InsertBlks

hanno aggiornato,
è possibile scegliere di inserirli esplosi
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,76 secondi.