Aprire un file autocad con autolisp

Iniziamo a trovare una soluzione a questo problema con il metodo più rude, cioè utilizzando il comando standard "_OPEN" che è quello col quale normalmente apriamo tutti i file.

 

Voglio ricordare brevemente che il prefisso "_" davanti al comando indica che sto richiamando il nome originale di un comando che solitamnte viene tradotto nelle varie versioni multilingue di autocad. Infatti se su una versione italiana cerco di lanciare un comando "OPEN" o "PASTE" mi dira che il comando non esiste, mentre se lancio il comando "_OPEN" o "_PASTE" questi verranno sicuramente riconosciuti.

Per usare il comando "_OPEN" è necessario prima impostare 2 variabili di sistema, le quali mi permetteranno di usare il comando da script senza avere l'interazione della finestra di dialogo. Procediamo con lo script:

 (setq filename "C:\\DRAWING1.DWG") 
 (defun C:apri( / )   
   (setvar "SDI" 1)   
   (setvar "FILEDIA" 0)   
   (command "_OPEN" filename)   
) 

Una volta eseguito il comando sarebbe consigliabile ripristinare la situazione iniziale, che solitamente è SDI=0 e FILEDIA=1.

Questo fatto del dover ripristinare le variabili non è molto funzionale a una logica di script, la soluzione è quella di usare le funzioni di libreria, che dovrò appositamente caricare all'inizio del mio script:

;carico librerie
 (vl-load-com)
 (defun C:apri2( / )
   (setq filename "C:\\DRAWING1.DWG")
   (progn
     (setq filename (vla-open (vla-get-documents (vlax-get-acad-object)) filename))
     (vla-activate filename)
   )
))

Se volessi utilizzare una finestra di dialogo per scegliere il file da aprire potrei usare la funzione "getfiled" il cui uso è spiegato in dettaglio nel manuale autocad:

;carico librerie
 (vl-load-com)
 (defun C:apri3( / )
   ;definisco alcune variabili per usare la funzione getfiled
   (setq titolo_finestra "Scegli file dwg")
   (setq percorso_iniziale "C:\\")
   (setq estensione "dwg")
   (if (setq file (getfiled titolo_finestra percorso_iniziale estensione 16))
     (progn
       (setq file (vla-open (vla-get-documents (vlax-get-acad-object)) file))
     (vla-activate file)
   )
)

Proviamo ora ad aprire tutti i file dwg presenti in una directory usando la funzione acet-ui-pickdir :

(defun C:apri3( / )
  (if (setq files (acet-ui-pickdir))
    (mapcar '(lambda (x) 
      (vla-open (vla-get-documents (vlax-get-acad-object)) 
        (strcat files "\\" x))) 
      (vl-directory-files files "*.dwg" 1)))
 )

Allo stesso modo della funzione getfiled la funzione acet-ui-pickdir può accettare dei parametri:

(acet-ui-pickdir "Messaggio" "c:\\" "Titolo")

Il quadro ora è quasi completo l'ultima cosa che ci rimane da prendere in considerazione, cioè vogliamo passare dei parametri alla nostra funzione, infatti passandogli il nome del file da aprire e il modo con cui lo voglio usare (sola lettura o lettura e scrittura) non dovrò più usare la finestra di dialogo.

(defun apri4 (FileName ReadOnly / )
(vla-Open
(vla-get-Documents
(vlax-get-Acad-Object))
FileName
(if ReadOnly
:vlax-true
:vlax-false)
))
 

 

 

 

Compago