Community
AutoCAD Produktfamilie - Deutsch
Das Forum für alle Fragen zu AutoCAD, LT, Architecture, Electrical, Map 3D, Mechanical, MEP, Plant 3D, Raster Design, Web App, sowie Autodesk Civil 3D und Advance Steel.
abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 

Lisp für die Markierung von Knicken > 3°

3 ANTWORTEN 3
Antworten
Nachricht 1 von 4
Anonymous
247 Aufrufe, 3 Antworten

Lisp für die Markierung von Knicken > 3°

Hallo zusammen, 

ich habe mein glück bereits bei Chat GPT versucht, war damit aber leider nicht erfolgreich. Ich benötige eine Lisp-Routine die mir an einer Polylinie alle Knicke markiert die größer als 3° sind. 
Der Ansatz von ChatGPT war folgender: 

(defun c:MarkCorners (/ pl obj knick-points tolerance i pt1 pt2 pt3 angle1 angle2 angle-diff n)
(setq pl (entsel "\nWähle eine Polylinie: ")) ; Benutzer wählt eine Polylinie aus
(if pl
(progn
(setq obj (vlax-ename->vla-object (car pl))) ; Konvertiere in ein VLA-Objekt
(if (eq (vla-get-ObjectName obj) "AcDbPolyline")
(progn
(setq knick-points '())
(setq tolerance (* pi (/ 3.0 180.0))) ; 3° in Radiant
(setq n (vla-get-NumberOfVertices obj))
(setq i 0)
(while (< i (- n 1))
(setq pt1 (vlax-safearray->list (vlax-variant-value (vla-GetPointAt obj i))))
(setq pt2 (vlax-safearray->list (vlax-variant-value (vla-GetPointAt obj (1+ i)))))
(if (< i (- n 2))
(setq pt3 (vlax-safearray->list (vlax-variant-value (vla-GetPointAt obj (+ i 2)))))
(setq pt3 pt1)) ; Bei der letzten Schleife setze pt3 auf pt1, um einen geschlossenen Zyklus zu erhalten
(setq angle1 (angle pt1 pt2))
(setq angle2 (angle pt2 pt3))
(setq angle-diff (abs (- angle2 angle1)))
(if (> angle-diff tolerance)
(setq knick-points (cons pt2 knick-points))
)
(setq i (1+ i))
)
; Markiere die Knickpunkte mit Kreisen
(foreach pt knick-points
(entmake
(list
(cons 0 "CIRCLE")
(cons 10 pt)
(cons 40 0.1) ; Radius des Kreises
)
)
)
(princ (strcat "\n" (itoa (length knick-points)) " Knicke markiert."))
)
(princ "\nDas ausgewählte Objekt ist keine Polylinie.")
)
)
(princ "\nKeine Polylinie ausgewählt.")
)
(princ)
)

(defun angle (pt1 pt2)
(atan (- (cadr pt2) (cadr pt1)) (- (car pt2) (car pt1)))
)

(princ "\nLade MarkCorners... fertig.\n")
(princ)

 

Darauf hin kommt folgende Fehlermeldung: 

"Befehl: MARKCORNERS
Wähle eine Polylinie: ; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: NumberOfVertices"

hat jemand eine Idee, wie man die Routine zum laufen bringt? 

3 ANTWORTEN 3
Nachricht 2 von 4
cadffm
als Antwort auf: Anonymous

Hi,

 

ich habe zwar auch Ahnung wie man das macht, Klammergewusel ist am Handy (sitze im Zug)  nichts was man freiwillig macht.

 

Dennoch:

Dein Freund ChatGPT macht natürlich auch Fehler, daher mache es ihm so leicht wie möglich und helfe im wann immer du kannst.

 

Das "letzte Vertex, nimm den ersten" würde ich bei der Anfrage weglassen, da hat er dich nicht verstanden. Wenn das Programm läuft (bis auf vorletzter,letzter,erster) kann das nocht immer ergänzt werden.

 

 

Übrigens solltest du dafür sorgen das der letzter Vertex nicht auf dem ersten liegt, ansonsten ist das noch eine Baustelle im Programm.

 

Die Fehlermeldung.

Schreib dem chatgpt genau das

"Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: NumberOfVertices"

Sebastian

Nachricht 3 von 4
sara_elsayedJ6VX2
als Antwort auf: Anonymous

Hi @Anonymous und willkommen im deutschen Autodesk-Forum!

 

Danke für deine ausführliche Fragestellung. Konnte @cadffm Vorschlag bei deinem Problem helfen? Falls ja, bitte ich dich seine Antwort als Akzeptierte Lösung zu markieren. Dazu klickst du rechts neben der jeweiligen Antwort auf die drei vertikalen Punkte und markierst die Lösung als Akzeptiert.

 

Danke euch!

Nachricht 4 von 4
vladimir_michl
als Antwort auf: Anonymous

Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.

In Foren veröffentlichen  

Autodesk Design & Make Report