| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Problem bei AutoLisp mit Koordinaten-Angaben (823 mal gelesen)
|
Imion Mitglied Bauzeichner
Beiträge: 32 Registriert: 22.01.2004
|
erstellt am: 22. Jan. 2004 14:32 <-- editieren / zitieren --> Unities abgeben:
Um mir das Erstellen von einem Sparrendach zu Erleichtern, dachte ich mir eine AutoLisp-Routine zu Schreiben. Jedoch funktioniert das Ganze leider nicht, die Ursache: Ein Vertex erkennt Variablen nicht als Koordinaten an. ein Ausschnitt: Zitat:
(entmake '((0 . "Vertex") (10 (+ (car Startpoint) Width)) (20 (cadr Startpoint)) (30 (caddr Startpoint))))
gedacht war, dass ein Startpunkt gesetzt wird, von dem aus eine Polylinie gezeichnet wird und später in eine Region konvertiert wird, vielleicht ersetz ich das auch durch ein pnetz, wenn das auch mit vertex funktioniert (wie ich vermute). Jedoch brauch AutoLisp hier eine Zahl und keinen Ausdruck. Bin für jede Hilfe dankbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marvin101010 Mitglied ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)
Beiträge: 562 Registriert: 22.01.2003 Pentium 4 Windows XP Autocad 2002 Autocad 2002LT + Extender ADT 3.3 ArchiCAD
|
erstellt am: 22. Jan. 2004 14:37 <-- editieren / zitieren --> Unities abgeben: Nur für Imion
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 22. Jan. 2004 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für Imion
Hallo Imion, hallo Marvin der Fehler liegt an dem ' ganz am Anfang (entmake '((0 . "Vertex") (10 (+ (car Startpoint) Width)) (20 (cadr Startpoint)) (30 (caddr Startpoint)))) Das teilt dem Programm mit, dass das folgende nicht evaluiert werden soll. Es wird also nicht der Wert der Variablen übergeben sondern der Variablenname. Und dass kann dann nicht funktionieren. Ändere das dahingehend: (entmake (list '(0 . "VERTEX") .. (cons 10 (+ (car Startpoint) Width)) .. ) ) Dann sollte es funktionieren. Bei Fragen ... Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Imion Mitglied Bauzeichner
Beiträge: 32 Registriert: 22.01.2004
|
erstellt am: 23. Jan. 2004 10:39 <-- editieren / zitieren --> Unities abgeben:
also mit cons müsste es quasi so aussehen: Zitat:
(entmake (list '(0 . "Vertex") (cons (car Startpoint) (cons (cadr Startpoint) (caddr Startpoint)))))
weil der ja das erste Element einer Liste hinzufügt brauch ich 2 verschachtelte cons, funktioniert aber trotzdem nicht. nämlich, gerade weil er eine liste ausgibt und für vertex, 3 für sich stehende variablen benötigt, Zitat:
z.B. (aus der Hilfe): (entmake '((0 . "VERTEX") ; Object type (10 1.0 1.0 0.0) ; Start point ) )
so gibt er mir bei dem ganz oben genannten Ausdruck folgende Fehlermeldung: Zitat:
Ungültiger Feldtyp in 44 in (entmake).; Fehler: Fehlerhafte DXF-Gruppe: (145.099 94.584 . 0.0)
der fett markierte punkt ist der fehler der durch den cons-ausdruck, soweit ich das für richtig verstanden hab (hier hatte ich auchnoch den Gruppencode vergessen in die Liste einzufügen). meine letzte Idee war deswegen vielleicht eine verschachtelte list: Zitat:
(entmake (list '(0 . "Vertex") (list (10 (car Startpoint) (cadr Startpoint) (caddr Startpoint)))))
leider gibt das die fehlermeldung: Zitat:
Fehler: Fehlerhafte Funktion: 10
er scheint also "10" nichtmehr als gruppencode für "vertex" zu erkennen, sondern als neue Funktion, doch das ist falsch. die gruppencodes 20 und 30 oben waren falsch, ich dachte dadurch vielleicht die y und z koordinaten einzeln eingeben zu können, doch das ist unnötig, da "10" für vertex schon x,y und z variablen beinhaltet. Ich weiß nichtmehr weiter, noch irgendwer eine Idee ? (tschuldigung wegen Rechtschreibfehlern, aber ich schreibe sehr schnell ohne auf dne Bildschirm zu schauen.) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 23. Jan. 2004 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Imion
|
Imion Mitglied Bauzeichner
Beiträge: 32 Registriert: 22.01.2004
|
erstellt am: 26. Jan. 2004 10:18 <-- editieren / zitieren --> Unities abgeben:
Also letzteres hat mir schonmal sehr weitergeholfen, die Prüfung ergibt für die Funktion nun wenigstens "NIL". Leider gibt er als Fehlermeldung: Zitat:
Ungültiger Feldtyp in 44 in (entmake).
damit kann ich nichs anfangen ?!? Der Quelltext für die Funktionierende Funktion lautet: Zitat:
(defun bundbalken_1 (Startpoint Width Dicke /) (entmake '((0 . "Polyline") (44 . 5) (66 . 1) (70 . 32))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (+ (car Startpoint) Width) (cadr Startpoint) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (+ (car Startpoint) Width) (+ (cadr Startpoint) Dicke) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (+ (cadr Startpoint) Dicke) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake '((0 . "Seqend"))) ;(command "_region" Startpoint "") (entmake '((0 . "Polyline") (44 . 5) (66 . 1) (70 . 32))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (+ (car Startpoint) Width) (cadr Startpoint) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (+ (car Startpoint) Width) (cadr Startpoint) (+ (caddr Startpoint) Dicke))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (+ (caddr Startpoint) Dicke))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake '((0 . "Seqend"))) ;(command "_region" Startpoint "") (entmake '((0 . "Polyline") (44 . 5) (66 . 1) (70 . 32))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (+ (cadr Startpoint) Dicke) (caddr Startpoint))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (+ (cadr Startpoint) Dicke) (+ (caddr Startpoint) Dicke))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (+ (caddr Startpoint) Dicke))))) (entmake (list '(0 . "Vertex") (cons 10 (list (car Startpoint) (cadr Startpoint) (caddr Startpoint))))) (entmake '((0 . "Seqend"))) ;(command "_region" Startpoint "") )
Die region Befehle sind auskommentiert, da er sich nicht richtig fängt, wo er die Regionen erstellen soll, ich habe gehofft, dass er durch den Gruppencode 70 . 32 ein Polygon erstellt. Der Gruppencode 70 . 32 ist jedenfals nicht die das hab ich bereits per try and error ausprobiert. 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: 26. Jan. 2004 10:45 <-- editieren / zitieren --> Unities abgeben: Nur für Imion
Hallo Imion, wenn schon die Fehlermeldung mit der Zahl 44 erscheint, dann läßt das sehr leicht darauf schließen, dass der Gruppencode 44 an dieser Stelle nichts zu suchen hat. Soll heißen, dass du die (44 . 5) mal aus deinem Code entfernen sollst. Dann haut es hin. Was wolltest du denn mit dieser Gruppe bewirken? Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Imion Mitglied Bauzeichner
Beiträge: 32 Registriert: 22.01.2004
|
erstellt am: 26. Jan. 2004 16:52 <-- editieren / zitieren --> Unities abgeben:
Ich weiß beim besten Willen nicht, warum ich den entmake 44 gesetzt hab, aber jetzt gehts, hab in der Hilfe nachgeschaut, aber nichtmehr rausgefunden, was für einen Sinn der Gruppencode hat, ich glaube es war die Farbe 44 und hab die vertauscht, hätte 5 . 44 also heißen müssen ... naja teste ich Übermorgen ... auf jedenfall gibt er jetzt in DIESER Funktion keine Fehlermeldung mehr aus, werd das dann wohl Übermorgen mal auf die anderen Funktionen übertragen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Imion Mitglied Bauzeichner
Beiträge: 32 Registriert: 22.01.2004
|
erstellt am: 29. Jan. 2004 14:50 <-- editieren / zitieren --> Unities abgeben:
hmm jetzt hab ich alles geändert, doch bringt er jetzt folgende Fehlermeldung: Zitat:
Fehlerhafte Funktion: 1603.26
und wenn ich im visual-lisp-editor die erste funktion die aufgerufen wird überprüfen lasse, bekomme ich die meldung: Zitat:
fehlerhafte dxf-Gruppe: 10 nil nil nil
dass er "nil" angibt liegt daran, dass es sich um variablen handelt die per eingabe ge"setq"t werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |