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

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

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 ?

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,43 secondi.