Lisp

Wie man LISP-Routinen für die Zeichnungseinrichtung erstellt.

BricsCAD Lisp

Migration von AutoCAD

Wenn Sie mit der Migration beginnen, werden Sie feststellen, dass BricsCAD LISP im Vergleich zu OtherLISP so gut wie keine Unterschiede aufweist. Ihr Code wird geladen und ausgeführt, und die Funktionalität ist identisch. Die Hauptunterschiede bei der "Portierung" Ihrer Anwendungen sind ein paar kleinere Einrichtungsschritte, die Befehlszeilenstruktur und möglicherweise die Dateispeicherorte. Lassen Sie uns zunächst die Einrichtung und den Start Ihrer bestehenden Programme in BricsCAD überprüfen.

Wenn Sie Ihre Programme automatisch mit Acad.lsp oder Acaddoc.lsp starten, müssen Sie sie umbenennen in on_start.lsp oder auf_doc_load.lsp . Die beste Lösung ist die Verwendung von on_doc_load.lsp, anstatt on_start.lsp.

BricsCAD Einstellungen-Panel
Um das automatische Starten Ihres Programms zu aktivieren, setzen Sie die Systemvariable ACADLSPASDOC auf 1 oder schalten Sie die Option einfach in Einstellungen / Programm Optionen / System um:
Es wird auch empfohlen, dass Sie ein wenig Zeit damit verbringen, sich mit dem Menü Optionen/Einstellungen in BricsCAD vertraut zu machen, da es Einstellungen und Optionen gibt, die spezifisch für die BricsCAD-Umgebung sind.
Der nächste Schritt im Einstellungsdialog besteht darin, Ihre Support-Ordner zum Dateisuchpfad hinzuzufügen, der sich unter Einstellungen / Programm Optionen / Dateien befindet:
Es wird empfohlen, die Supportpfade zu verwenden, die wie oben hinzugefügt wurden und/oder eine Ebene unterhalb des aktuellen Projektordners liegt. Es ist eine gute Praxis, eine Funktion findfile zu verwenden, um zu überprüfen, ob die Datei existiert, bevor Sie mit Ihren Befehlen fortfahren, wie in der folgenden Methode:
(if (findfile "custom-code.lsp") (load "custom-code")) 
Dies ist eine der Methoden, die Sie für bei Bedarf laden von Ihren Funktionen innerhalb der Datei on_doc_load.lsp verwenden können:

Dies ist eine der Methoden, die Sie für bei Bedarf laden von Ihren Funktionen innerhalb der Datei on_start.lsp verwenden können:

Der Befehl DEFUN (DEfine FUNction) hat den gleichen Namen wie die Funktion in Ihrer on_doc_load.lsp Datei und diese Funktion definiert die aufrufende Funktion neu, wenn sie gestartet wird.

Lisp-Routinen zum Einrichten von Zeichnungen für BricsCAD

Code-Beispiel
Die nachstehende einfache Routine zum Einrichten von Zeichnungen kann mit minimalen Änderungen an Ihre Bedürfnisse angepasst werden.
(defun C:MYSETUP ( / )               ;Befehlszeilenfunktion "mysetup" definieren
  (setvar "cmdecho" 0)
  (Befehl "_audit" "_y")             ;Aktuelle Zeichnung prüfen
  (Befehl "_-purge" "_all" "*" "_n") ;löschen Sie alle nicht verwendeten Stile, usw.
  (Befehl "_-layer" "_m" "1" "_c" "1" "" "") ;Layer "1" Farbe "1" erstellen
  (Befehl "_-layer" "_m" "2" "_c" "2" "" "")
  (Befehl "_-layer" "_m" "3" "_c" "3" "" "")
  (Befehl "_-layer" "_m" "4" "_c" "4" "" "")
  (Befehl "_viewres" "_y" "20000")   ;Anzeigeaufslosung auf Maximum setzen
  (setvar "filedia" 1)               ;Dateidialoge einschalten
  (setvar "attdia" 1)                ;Attributdialoge einschalten
  (setvar "attreq" 1)                ;Attributbearbeitung bei Platzierung einschalten
  (setvar "cecolor" "bylayer")       ;aktuelle Farbe VonLayer setzen
  (setvar "clayer" "0")              ;setzen Sie den aktuellen Layer auf "0"
  (setvar "maxsort" 5000)            ;setzen Sie die Maximale Layersortierung auf 5,000
  (Befehl "_zoom" "_e" "_zoom" "0.95x")   ;Grenzen vergrößern, dann etwas verkleinern
  (setvar "cmdecho" 1)
  (princ)
)
Jede einzelne Zeile in dieser Zeichnungseinrichtungsroutine hätte in der Befehlszeile in BricsCAD eingegeben werden können. Indem man sie in eine Lisp-Routine verpackt, macht die defun (define function) die Zeichnungseinrichtungsroutine "aufrufbar" aus einem Menü oder durch Eingabe ihres Namens in der BricsCAD Befehlszeile.

Wenn Sie defun nicht einschließen, wird das Programm einmal ausgeführt, wenn Sie es über seinen Dateinamen laden. Wenn Sie defun verwenden und diese Routine in Ihre lsp laden, ist die Funktion jederzeit verfügbar, wenn Sie ihren Funktionsnamen eingeben: mysetup.

Die Befehle mit vorangestellten Bindestrichen (z. B. -layer und -purge) werden verwendet, um das Starten des Dialogs des Befehls zu verhindern.

Anmerkung: Verwenden Sie immer englische Befehls- und Optionsnamen, um Fehler in lokalisierten (nicht-englischen) BricsCAD-Versionen zu vermeiden.

Eine gute Praxis beim Öffnen von Dateien von anderen ist es, eine Prüfung mit anschließender Bereinigung durchzuführen, um alle nicht verwendeten Elemente zu entfernen.

Der Befehl Purge konnte mehrfach ausgeführt werden, um verschachtelte Elemente zu entfernen. Siehe das folgende Beispiel:

(repeat 3 (command "-purge" "all" "*" "n"))
Anmerkung: Bereinigung wird vor dem Hinzufügen der neuen, leeren Layer durchgeführt, da sie bei einer nachträglichen Durchführung entfernt würden.

Die command-Aufrufe zum Setzen von Layern könnten in einer einzigen Befehlsanweisung zusammengefasst werden, aber es ist einfacher zu lesen, wenn jede Zeile für sich steht.

Mit setvar wird eine Systemvariable auf einen bestimmten Wert gesetzt, z. B. Stil-Einstellungen für Abmessungen und Text, Einheiten-Einstellungen usw.

Die Einstellung maxsort wurde aus zwei Gründen eingeführt.
  1. Maxsort steuert die maximale Anzahl von Dialogeinträgen, die sortiert werden.
  2. Der Standardwert für maxsort ist 1.000. Mit den heutigen Computern und den oft größeren Projektdateien kann diese Zahl zu niedrig sein.
Wenn Sie Zeichnungen öffnen, in denen die Layernamen nicht in alphabetischer Reihenfolge sortiert werden, könnte der Standardwert maxsort der Grund dafür sein.
Ein vielseitigerer Layer-Erzeuger für Ihre Zeichnungseinrichtungsroutine
Das folgende Beispiel könnte zu Ihrer Version von mysetup.lsp hinzugefügt werden. Durch Erstellen einer einfachen Textdatei "Layers.txt" mit einem Editor wie Notepad können Sie eine Liste mit Layernamen hinzufügen, die beim Ausführen der Routine erstellt werden sollen. Dies ist eine Alternative zum oben dargestellten Hartcodierte-Prozess. Wenn Sie die findfile-Funktion verwenden, durchsucht BricsCAD zunächst das aktuelle Verzeichnis und anschließend sequenziell die definierten Support-Ordner, um die Datei "Layers.txt" zu finden. Sie können Ihre Standard-Textdatei für die Layerkonfiguration im Support-Pfad ablegen und alternative Versionen davon in einzelnen Projektordnern ablegen.

(if (not (findfile "Layers.txt"))                   ;"not" = sucht kein Ergebnis von findfile
(alert "Can't find Layers.txt!")                    ;Kein Datei? Schrei den Benutzer an und beende das Programm!
(progn                                              ;Andernfalls mach die Sachen in der Progn-Gruppe
(setq layerfile (open (findfile "Layers.txt") "r")) ;öffne layers.txt zum "Lesen"
(while (setq layername (read-line layerfile))       ;beim Lesen jeder Zeile den Text in Layername speichern
(command "-layer" "m" layername "")                 ;erstelle einen Layer mit dem Layernamen
)                                                   ;beende die While-Schleife
(close layerfile)                                   ;schließen Sie den Datei Layers.txt
)                                                   ;beende progn
)                                                   ;beende if