| |
| 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, eine Pressemitteilung
|
Autor
|
Thema: Punkte von Linie bzw. Polylinie (1240 mal gelesen)
|
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 06. Mrz. 2008 15:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab da mal eine Frage zu Lisp. Immer wieder passiert es mir beim Programmieren, dass ich vor folgendem Problem stehe. Ich wähle ein Objekt (in diesem Fall eine Linie) mit ENTSEL und dann brächte ich den Start- sowie den Endpunkt. Den ersten Punkt kriege ich ja mit ASSOC 10 raus, aber wie bekomme ich den zweiten. Im gleichen Zug die Frage, wie man das mit einer Polyline macht welche ja theoretisch undendlich viele Daten mit dem Gruppencode 10 haben könnte. In meinem Fall möchte ich über den Start- und den Endpunkt den Mittelpunkt der Linie berechnen. Würdet Ihr den Mittelpunkt auch berechnen oder würdet Ihr irgendwas mit den Objektfängen programmieren? Ich bin eigentlich etwas gegen die Objektfänge weil ich öfter das Gefühl habe, dass die teilweise nicht ganz so sauber greifen. DANKE vorab Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Mrz. 2008 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
1. (cdr(assoc 11 (entget LINEOBJ))) 2.(mapcar 'cdr (vl-remove-if-not '(lambda(X)(=(car X)10)) (entget LWPLOBJ))) Hinweis: es gibt aber noch 2d-Ps und 3D-Pls, die ihre Stützpunktkoordinaten in Vertexobjekten speichern Und wozu willst du den Mittelpunkt berechenen? Das war aus deinem Posting nicht ersichtlich..
------------------ - 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 |
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 06. Mrz. 2008 15:31 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, na dass ging ja fix.... kurz nachdem ich den Thread aufgemacht habe, habe ich das mit dem ASSOC 11 auch gesehen, ich dachte bei linien sind die beiden punkte beide als gruppencode 10 gespeichet. Bei der Lösung für die Polylinien verstehe ich ja nur Bahnhof, ich werds mir aber mal genau anschauen. Wie schauts aus mit dem Mittelpunkt einer Linie. Die theoretische Berechnung ist mir klar, allerdings erscheint mir das extrem aufwendig. ich hätte das jetzt mal so gemacht: (setq kantlinie (entget(car(entsel)))) (setq p1 (cdr (assoc 10 kantlinie))) (setq p2 (cdr (assoc 11 kantlinie))) (setq mp (polar P1 (angle p1 p2) (/ (distance p1 p2) 2))) Was haltet Ihr davon? DANKE Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Mrz. 2008 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 06. Mrz. 2008 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 06. Mrz. 2008 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Hallo Stefan, ich kann mich CADmium und Henning nur anschließen, allerdings würde ich eine extra Funktion für diese Aufgabe schreiben: Code:
(defun mittelpunkt ( / obj) (if(and(setq obj(car(entsel))) (=(cdr(assoc 0 (entget obj)))"LINE")) (mapcar '(lambda(A)(/ A 2.0) (mapcar '+ (cdr(assoc 10 obj)(cdr(assoc 11 obj))))))))
diese Funktion kannst Du dann immer aufrufen, wenn Du einen Mittelpunkt einer Linie brauchst. Wenn keine Linie gewählt wird, wird nil zurückgegeben. z.B. (if (setq mp(mittelpunkt)) (machwas_mit_dem Mittelpunkt) (alert "Es wurde keine Linie ausgewählt.")) ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |