| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Layer erstellen mit Lisp (2626 mal gelesen)
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 23. Jan. 2007 08:40 <-- editieren / zitieren --> Unities abgeben:
Hallo wer kann mir Helfen Habe ein Var. "BMA" wenn die wahr spring zu BMA und Erstell Layer BMA. wo ist da mein Denkfehler, funkt nicht so (setq test "BMA");;'("BMA" "SWS" "STS" "NOTB")) (if(= test) (SWS (command "_-layer" "_m" test "fa" 3 "" "") (BMA (command "_-layer" "_m" test "fa" 1 "" "") ))) Danke
------------------ Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 23. Jan. 2007 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
(if(= test "BMA") (command "_-layer" "_m" test "fa" 3 "" "") (command "_-layer" "_m" test "fa" 1 "" "") ) da du aber scheinbar mehrere Sachen testen willst, nimm doch cond (cond ((= test "BMA")(command "_-layer" "_m" "BMA" "fa" 1 "" "")) ((= test "SWS")(command "_-layer" "_m" "SWS" "fa" 2 "" "")) ((= test "STS")(command "_-layer" "_m" "STS" "fa" 3 "" "")) ('T (command "_-layer" "_m" "0" "fa" 1 "" "")) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 23. Jan. 2007 09:22 <-- editieren / zitieren --> Unities abgeben:
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 23. Jan. 2007 09:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas Will mal zeigen was daraus werden soll. Doslib17.arx muss Installiert sein (defun c:mlayer () (setq la (dos_listbox "Setze Layer aktuell" "Wähle Layer" '("Starkstrom" "Beleuchtung" "Schwachstrom" "Notbeleuchtung" "Lichtruf" "EIB" "Branmeldeanlage" "Erdung"))) (cond ((= la "Starkstrom")(command "_-layer" "_m" "---E_Starkstrom" "fa" 5 "" "")) ((= la "Beleuchtung")(command "_-layer" "_m" "---E_Beleuchtung" "fa" 22 "" "")) ((= la "Schwachstrom")(command "_-layer" "_m" "---E_Schwachstrom" "fa" 3 "" "")) ((= la "Notbeleuchtung")(command "_-layer" "_m" "---E_Notbeleuchtung" "fa" 94 "" "")) ((= la "Lichtruf")(command "_-layer" "_m" "---E_Lichtruf" "fa" 6 "" "")) ((= la "EIB")(command "_-layer" "_m" "---E_EIB" "fa" 162 "" "")) ((= la "Brandmeldeanlage")(command "_-layer" "_m" "---E_Brandmeldeanlage" "fa" 1 "" "")) ((= la "Erdung")(command "_-layer" "_m" "---E_Erdung" "fa" 200 "" "")) ('T (command "_-layer" "_m" "0" "fa" 7 "" "")) ) )
------------------ Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Jan. 2007 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
Hallo Heinz, ich habe da noch einen Verbeserungsvorschlag. Ich habe den Teilstring des Layernames und die Farbe in eine Liste geschrieben. Auf diese Liste greift dann die Funktion "dos_listbox" zu. Über die Rückgabe kannst Du dann unter der Verwendung von "assoc" wieder auf dieselbe Liste zugreifen. Der Vorteil: Wenn Du die Liste erweitern willst mußt Du das nur an einer Stelle tun. Ob der Code läuft weiß ich nicht, da mir die Funktion "dos_listbox" nicht zur Verfügung steht, aber eigentlich sollte es funktionieren. Code:
(defun c:mlayer ( / liste la) (setq liste '(("Starkstrom" 5) ("Beleuchtung" 22) ("Schwachstrom" 3) ("Notbeleuchtung" 94) ("Lichtruf" 6) ("EIB" 162) ("Branmeldeanlage" 1) ("Erdung" 200) )) (setq la (dos_listbox "Setze Layer aktuell" "Wähle Layer" (mapcar 'car liste))) (cond ((assoc la liste) (command "_-layer" "_m" (strcat "---E_" (car (assoc la liste))) "fa" (cadr (assoc la liste)) "" "")) ('T (command "_-layer" "_m" "0" "fa" 7 "" ""))))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 23. Jan. 2007 10:48 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied | |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 26. Jan. 2007 07:31 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied | |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 26. Jan. 2007 09:11 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied | |
Ex-Mitglied | |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 26. Jan. 2007 10:18 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 26. Jan. 2007 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
Hallo Heinz, wenn du jetzt noch die Liste mit den Parametern der Layer in eine Textdatei wurschtelst die du einliest, kannst du dir ganz bequem alle Layer die du brauchst anlegen ohne das Programm ändern zu müssen. Un wenn die Textdatei etwa wie folgt aussieht, kannst du die mit "load" auf einen Schlag in eine Variable pcken ohne jede Zeile einzeln einlesen zu müssen. (quote ( ("Layername1" "Farbe1" "Linientyp1") ("Layername2" "Farbe2" "Linientyp2") ("Layername3" "Farbe3" "Linientyp3") ("Layername4" "Farbe4" "Linientyp4") )) und im Programm dann einfach z.B. : (setq pfad "c:\layerliste.txt") (setq layerliste (load pfad)) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 27. Jan. 2007 08:25 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
@Rabbit, Zitat:
@Jörn zu deinem Beitrag hier möchte ich mal den Finger heben !!! Ich dachte cond ist eine Bedingungsfunktion wo sich mir die Frage stellt was macht das cond da ich kann doch nur einen (so wie hier) einen Layernamen zurückerhalten oder nil und bei nil soll wie in deiner funktion der layer "0" neu erstellt werden und sogar die farbe wird gesetzt. Damit ich das verstehe also : wenn Erg=Layername erstell Layer , wenn nil dann änderst du einfach mal ne layerfarbe , WENN , WENN , WENN <---Hier müßten Antworten von dir kommen um die cond funktion mal für mich zu begründen. Für mich schreit das einfach mur nach einem If wenn dann ansonten nix.
ich kann dafür keine Begründung geben, außer, das ich mal eben auf die Schnelle den Code von Heinz mit einer neuen Idee versehen habe. Also, es müßte ein IF genommen werden, es kann aber auch weiterhin das COND genommen werden, das tut der Funktionalität, und bei diesen geringen Datenmengen der Performance keinen Abbruch. =>Rubrik "nicht schön aber selten" ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |