Lisp

Come creare routine LISP per l'impostazione del disegno.

BricsCAD Lisp

Migrazione da AutoCAD

Quando inizi la migrazione a BricsCAD, scoprirai che praticamente non vi sono differenze tra BricsCAD LISP e AltriLISP. Il codice viene caricato ed eseguito e la funzionalità è identica. Le principali differenze durante il "porting" delle app saranno alcuni passaggi minori di configurazione, la struttura della barra dei comandi e probabilmente le posizioni dei file. Per iniziare, esaminiamo il setup ed il lancio dei programmi esistenti in BricsCAD.

Se stai lanciando automaticamente i tuoi programmi utilizzando Acad.lsp o Acaddoc.lsp, dovrai rinominarli rispettivamente come on_start.lsp o on_doc_load.lsp . La soluzione migliore è utilizzare on_doc_load.lsp, piuttosto che on_start.lsp.

Pannello Impostazioni di BricsCAD
Per abilitare l'avvio automatico del programma, impostare la variabile di sistema ACADLSPASDOC su 1 o semplicemente attivare l'opzione in Impostazioni / Opzioni programma / Sistema:
Si consiglia inoltre di dedicare un po' di tempo a familiarizzare con il menu Opzioni/Impostazione in BricsCAD, poiché esistono impostazioni e opzioni specifiche per l'ambiente BricsCAD.
Il prossimo passo nella finestra di dialogo delle Impostazioni è quello di aggiungere le cartelle di supporto nei Percorsi di Ricerca dei File di Supporto, che si trova in Impostazioni / Opzioni programma / File:
Si consiglia di utilizzare i percorsi di supporto aggiunti come sopra indicato e/o collocati un livello sotto la cartella del progetto corrente. È buona norma utilizzare una funzione findfile per convalidare l'esistenza del file prima di procedere con i comandi, come nel metodo seguente:
(if (findfile "custom-code.lsp") (load "custom-code")) 
Si tratta di uno dei metodi che è possibile utilizzare per richiedere e caricare le funzioni all'interno del file on_start.lsp :

Si tratta di uno dei metodi che è possibile utilizzare per richiedere e caricare le funzioni all'interno del file on_start.lsp :

Il comando DEFUN (DEfine FUNction) è lo stesso nome della funzione all'interno del on_doc_load.lsp e quella funzione ridefinisce la funzione di chiamata quando viene lanciata.

Routine Lisp per l'Impostazione del Disegno in BricsCAD

Esempio di codice
La seguente semplice routine di impostazione del disegno potrebbe essere adattata alle tue esigenze con modifiche minime.
(defun C:MYSETUP ( / ) ;definisce la funzione della riga di comando "mysetup" (setvar "cmdecho" 0) (command "_audit" "_y") ;verifica disegno corrente (command "_-purge" "_all" "*" "_n") ;elimina tutti gli stili inutilizzati, ecc (command "_-layer" "_m" "1" "_c" "1" "" "") ; crea layer "1" colore "1" (command "_-layer" "_m" "2" "_c" "2" "" "") (command "_-layer" "_m" "3" "_c" "3" "" "") (command "_-layer" "_m" "4" "_c" "4" "" "") (command "_viewres" "_y" "20000") ;imposta la risoluzione della vista al massimo (setvar "filedia" 1) ;attiva le finestre di dialogo dei file (setvar "attdia" 1) ;attiva le finestre di dialogo degli attributi (setvar "attreq" 1) ;abilita la modifica degli attributi al momento del posizionamento (setvar "cecolor" "bylayer") ;imposta il colore corrente come DaLayer (setvar "clayer" "0") ;imposta il layer corrente su "0" (setvar "maxsort" 5000) ;imposta l'ordinamento massimo dei layer su 5,000 (command "_zoom" "_e" "_zoom" "0.95x") ;estendi di zoom, quindi riduci un poco (setvar "cmdecho" 1) (princ) )
Ogni singola riga in questa routine di impostazione del disegno avrebbe potuto essere digitata nella barra dei comandi in BricsCAD®. Inserendoli in una routine Lisp, la defun (define function) rende la routine di impostazione del disegno "chiamabile" da un menu o digitandone il nome nella barra dei di comandi BricsCAD®."

Se non includi defun, il programma verrà eseguito una riga alla volta, quando viene caricato con il suo nome file. Utilizzando defun, e caricando la routine all'interno del tuo lsp renderà disponibile la funzione in qualsiasi momento digitando il nome della funzione: mysetup.

I comandi con i trattini precedenti (es. _-layer e _-purge) vengono utilizzati per impedire l'avvio delle finestre di dialogo dei comandi. Mentre il simbolo "_" è necessario per rendere compatibile il codice con qualsiasi lingua del software BricsCAD.

Note: Utilizzare sempre i nomi dei comandi e delle opzioni in inglese per evitare errori nelle versioni localizzate (non in inglese) di BricsCAD.

Una buona pratica quando si aprono file provenienti da terzi è eseguire una verifica seguito da un elimina per rimuovere qualsiasi elemento inutilizzato.

Il comando Purge può essere eseguito più volte per rimuovere gli elementi nidificati. Vedere il seguente esempio:

(repeat 3 (command "_-purge" "_all" "*" "_n"))
Note: Purge viene eseguito prima di aggiungere i nuovi layer vuoti, poiché verrebbero rimossi se lo facessimo dopo.

Le chiamate command per le impostazioni dei layer possono essere combinate in una singola istruzione command, ma pensiamo che sia più facile da leggere come le righe separate.

Le chiamate setvar per le impostazioni delle variabili di sistema su un valore specificato, ad es. le impostazioni degli stili di quota e di testo, impostazioni unità, ecc.

L'impostazione maxsort è stata introdotta per due motivi.
  1. Maxsort controlla il numero massimo di voci che verranno ordinate nella finestra di dialogo.
  2. Il valore predefinito per maxsort è 1.000. Con i computer di oggi e poiché spesso abbiamo trovato file più grandi, quel numero può essere troppo basso.
Se si aprono disegni in cui i nomi dei layer non verranno ordinati in ordine alfabetico, il valore predefinito di maxsort potrebbe esserne il motivo.
Un creatore di layer più versatile per la tua routine di impostazione del disegno
Il seguente esempio potrebbe essere aggiunto alla tua versione di mysetup.lsp. Creando un semplice file di testo "Layers.txt" con un editor come Notepad, è possibile aggiungere un elenco di nomi di layer da creare quando viene eseguita la routine. Questa è un'alternativa al processo hard-coded mostrato sopra. Utilizzando la funzione findfile, BricsCAD cercherà prima nella cartella corrente, quindi in sequenza attraverso le cartelle di supporto definite per trovare il file layers.txt. Ciò premesso, è possibile posizionare il file di testo di impostazione dei layer predefiniti nel percorso di supporto e posizionare versioni alternative nelle singole cartelle di progetto.

(if (not (findfile "Layers.txt"))                   ;"not" = cerca per nessun risultato da findfile
(alert "Can't find Layers.txt!")                    ;No file? Avverte l'utente ed esce!
(progn                                              ;Altrimenti, esegui il codice nel gruppo progn
(setq layerfile (open (findfile "Layers.txt") "r")) ;apre layers.txt in "lettura"
(while (setq layername (read-line layerfile))       ;durante la lettura di ogni riga, memorizza il testo in layername
(command "-layer" "m" layername "")                 ;crea un layer con il nome di layename
)                                                   ;termina il ciclo while
(close layerfile)                                   ;chiude il file Layers.txt file
)                                                   ;chiude il progn
)                                                   ;fine di if