| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Buchempfehlung (1661 mal gelesen)
|
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 08:13 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen zusammen, ich bin ganz dringend auf der Suche nach guter Literatur für die Programmiersprache AutoLISP. Es sollte die Syntax beschrieben sein und wenn möglich, der Aufbau der command-Befehle. Als ich nämlich beispielsweise den Befehl "_section" (Querschnitt) automatisiern wollte, wusste ich nicht, das die richtige Befehlsfolge z.B. so: (command "_section" (car (entsel)) "" "_3p" p1 p2 p3) auszusehen hat. Woher kann man so etwas erfahren? Gibt es irgendeine Literatur, die diese Befehle auflistet und erklärt oder gibt es da ganz einfache Regeln, die ich nur noch nicht durchschaut habe? Vielen Dank für Eure Hilfe Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Aug. 2002 08:52 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo Andrea, ich kann dir nur folgenden Link empfehlen. http://www.autolisp-tutorial.mapcar.net Anschaulichere Literatur habe ich bisher nirgends gefunden. Es wird nicht nur auf die reinen Lisp-Befehle eingegangen, sondern auch der Sinn dieser Funktionen anschaulich erläutert. Das ist das, was in der mir bekannten Literatur fehlt. Aber Achtung: Dieses Tutorial ist nicht anspruchslos. Man braucht Zeit, und die sollte man sich auch nehmen, um einige Sachen zu verstehen. Nun zu Deinen (Command - Problem. Die Reihenfolge der Befehlsparameter bekommst du am einfachsten raus, wenn du den Befehl einfach mal im AutoCAD ausführst. Denn genau diese Reihenfolge erwartet dann auch der (command- Befehl. Aber Vorsicht bei der Verwendung, denn diese Reihenfolge kann sich von Release zu Release ändern, was dann zur Folge hat, dass die Prog. nicht mehr laufen. Deshalb sollte man, soweit möglich, auf andere, unabhängige Wege ausweichen. Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 09:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, mit dem Tutorium von Mapcar habe ich bereits begonnen und finde es auch echt sehr gut. Aber da habe ich direkt eine andere Frage: wie kann ich denn die entsprechenden Befehle finden, um die Command-Befehle zu umgehen? Wie mache ich dann z.B. Querschnitte, wenn ich den Befehl "_section" nicht benutzen darf? Viele Grüße Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Aug. 2002 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo Andrea, die meisten Befehle erzeugen, oder manipulieren irgendwelche AcadObjekte (Linien, Blöcke,...) Diese lassen sich allesamt mit den Befehlen (entmake, (entmod, (entupd erzeugen und auch ändern. Die 3d- Objekte geben Ihre Definitionsdaten jedoch nur verschlüsselt aus, da diese anders erzeugt werden. Ich weiß bis her nicht, wie ich an diese Daten der Objekte rankommen sollte, Wenn es also jemand anders weiß, bitte mitteilen!!! In diesem Fall kann man sich natürlich auch nicht die Definitionsdaten rausholen und ändern. Somit bleibt, nach meinem Wissensstand tatsächlich nur die (command - Lösung. Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 09:39 <-- editieren / zitieren --> Unities abgeben:
Also, wenn ich dich richtig verstanden habe, dann muss ich (zumindest deines Wissens) auch zum Beispiel Layer (und alle anderen Befehle, die nicht mit den Zeichenbefehlen zu tun haben) mit dem command-Befehl erzeugen, oder? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 09:48 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Aug. 2002 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für AB
... das ist so nicht richtig. Die Ausnahme ist nur der 3D-Bereich. Layer,... können mit den genannten Befehlen bearbeitet und auch erzeugt werden. Nachstehende Zeilen erzeugen einen roten Layer namens Andrea. Weiterhin werden die Tabellenobjekte durchforstet und aufgelistet. (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(2 . "ANDREA") '(70 . 0) '(62 . 1) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) (setvar "CLAYER" "ANDREA") ;;Tabelleneinträge folgen (setq tbllist (list "APPID" "BLOCK" "DIMSTYLE" "LAYER" "LTYPE" "STYLE" "UCS" "VIEW" "VPORT" ) ) (mapcar '(Lambda (TBL) (princ "---------------------------------") (princ TBL) (princ "---------------------------------") (setq elem (tblnext TBL T)) (terpri) (while elem (princ elem) (princ (strcat "\n---------DATA--" TBL ": " (cdr (assoc 2 elem)) "-------")) (terpri) (princ(entget (tblobjname TBL (cdr (assoc 2 elem))))) (setq elem (tblnext TBL)) (terpri) ) ) tbllist ) Untersuche mal verschiedene AutoCAD-Objekte mit folgender Zeile (entget(car(entsel))) Es werden die Elementdaten aufgelistet. Der Unterschied zwischen 2d- und 3d Objekten wird dir auffallen. Solchen Befehlen wie _measure liegt ja auch irgendein Programm zu Grunde. Man kann dieses nach programmieren, damit man nicht die (command- Schiene fahren muß oder man geht den (Command- Weg. (Aufwand - Nutzen) Es heißt ja nicht, dass man die (command- Lösung nicht nutzen soll, aber es kann eben sein, dass Acad die Befehlsparameter ändert oder den Befehl löscht. Dessen muß man sich bewußt sein.
Bei Fragen ... Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 10:33 <-- editieren / zitieren --> Unities abgeben:
Ja super, danke. Werde das gleich mal ausprobieren. Kannst du mir nur noch sagen, wo ich nachlesen kann, was die einzelnen Gruppen (...) festlegen? Also, was sie einzelnen Zahlen in den Klammern bedeuten? Ich habe ein Buch "AutoCad 2.6 organisiert" (tewi), da ist die AutoCAD Geometriedatenbank ein wenig erläutert, allerdings ist es sehr alt. Ich habe eine neuere Auflage nicht ausfindig machen können. Vielleicht hast Du noch eine Idee. Aber auch bisher hast Du mir schon sehr geholfen. Danke, Andrea
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 11:00 <-- editieren / zitieren --> Unities abgeben:
Ich muss leider direkt noch eine Frage hinterher stellen. Ich möchte nicht nur einen Layer, sondern mehrere in verschiedenen Farben erstellen. Ich habe folgenes geschrieben: (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(2 . "1._Layer") '(70 . 0) '(62 . 1) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) (entmake (list ; rot '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(3 . "2._layer") '(70 . 0) '(62 . 1) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) .... doch es funktioiert nicht. Kann ich nicht einfach die Farbzahl austauschen?
Gruß Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 28. Aug. 2002 11:09 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Aug. 2002 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo Andrea, grundsätzlich ist der Aufbau so zu sehen: (Bezeichner . Wert) Der Bezeichner (Klassifizierung) ist eine Zahl, in der DXF-Referenz kannst du nachlesen, welche Zahl was bedeutet. Hier ist es so, dass die (2 . "IRGENDWAS") den Layernamen beschreibt. Die (62 . 1) beschreibt die Farbe. 1 -> rot 2 -> gelb 3 -> grün usw. Bei Dir muß es also heißen Zitat: Original erstellt von AB: Ich muss leider direkt noch eine Frage hinterher stellen. Ich möchte nicht nur einen Layer, sondern mehrere in verschiedenen Farben erstellen. Ich habe folgenes geschrieben:(entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(2 . "1._Layer") '(70 . 0) '(62 . 1) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) (entmake (list ; rot '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(2 . "2._layer");Bezeichner zurück auf 2 gestellt '(70 . 0) '(62 . 3);Farbe auf 3 geändert '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) .... doch es funktioiert nicht. Kann ich nicht einfach die Farbzahl austauschen?
Gruß Andrea
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Aug. 2002 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo Andrea, zur verdeutlichung ein kleines Programm, mit welchem du beliebig viele Layer erzeugen kannst: (defun c:mla (/ lnam lcol lnaml) (while (/= "" (setq lcol nil lnam (if (tblsearch "LAYER" (setq lnam (getstring "\nLayername: "))) (progn (princ (strcat "\nLayer: " lnam " bereits vorhanden!")) "" ) lnam ) ) ) (while (not lcol) (setq lcol (getint "\nFarbnummer") lnaml (cons lnam lnaml) ) (if (or (< lcol 1) (< 255 lcol) ) (setq lcol nil) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 lnam) '(70 . 0) (cons 62 lcol) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) ) ) ) (if lnaml (progn (princ "\nLayer:") (mapcar '(lambda (LN) (terpri) (princ LN) ) (reverse lnaml) ) (princ "\n erzeugt!") ) ) (princ) ) Bei Fragen ...
Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |