| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Scheitelpunkte aus Polylinie entfernen (3025 mal gelesen)
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 27. Jan. 2014 12:37 <-- editieren / zitieren --> Unities abgeben:
Hello @ all, ein LISP-Programm erstellt eine Polylinie in Form eines Rechtecks, über 8 Scheitelpunkte. Kann man jetzt innerhalb dieses LISP einzelne Scheitelpunkte entfernen lassen? Bislang ist mir das im LISP nicht gelungen, und ich habe dazu auch nirgendwo etwas gefunden. Sollte es etwa nicht möglich sein? Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Jan. 2014 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
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: 28. Jan. 2014 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Hallo Dieter, den folgende Code kannst Du für 2D-, 3D- und LW-Polylinien nutzen. Der Unterschied zwischen 2D+3D und LW ist eigentlich nur, dass die z-Koordinate nicht in 'Coordinates abgelegt wird. Code:
(defun c:test ( / KOORD N OBJ OBJNAME LWFLAG) (if (and (or(setq obj (car (entsel "\Polylinie auswählen:"))) (alert "kein Objekte ausgewählt.")) (setq obj (vlax-ename->vla-object obj)) (setq objName (vlax-get obj 'ObjectName)) (or (wcmatch objName "AcDb*Polyline") (alert "kein Objekte war keine Polylinie.")) (or (>(length (setq koord (vlax-get obj 'Coordinates))) (if (setq LwFlag (= ObjName "AcDbPolyline")) 4 6)) (alert "die LW-Poly muss mindestens 3 Stützpunkte haben.")) (or (setq n(getint (strcat "\nNummer des zu löschenden Stützpunktes(max. " (itoa(/(length koord)(if LwFlag 2 3)))"):"))) (alert "keine Nummer eingegen")) (or (<= n (/(length koord)(if LwFlag 2 3))) (alert "Die Nummer war zu groß")) ) (vlax-put obj 'Coordinates (test:StzRemove koord n LwFlag)) ) ) (defun test:StzRemove (liste n LwFlag / A I N) (setq i 0) (vl-remove-if 'not (mapcar '(lambda(A) (setq i (+ i 1)) (if (if LwFlag (not(or (=(* n 2)i) (=(-(* n 2)1)i))) (not(or (=(* n 3)i) (=(-(* n 3)1)i) (=(-(* n 3)2)i) ))) A))liste)))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Rahmen einfügen Youtube Stammtisch Wolfsburg Februar 2014 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 28. Jan. 2014 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
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: 28. Jan. 2014 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 28. Jan. 2014 22:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, Hallo Jörn, Hallo alle Interessierten, eure Programme funktionieren Super. Vielen Dank dafür. Ich hätte nicht gedacht, das Programme zum löschen von Scheitelpunkten so komplex und umfangreich sein müssen. Um nachvollziehen zu können was alles in diesen Programmen abläuft, werde ich wohl noch etwas Zeit brauchen, vielleicht muss man dazu schon ein fortgeschrittener Lispler sein Gruß Dieter 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: 29. Jan. 2014 06:06 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Zitat: Original erstellt von dwg3d: (im ersten Beitrag) Sollte es etwa nicht möglich sein?
Zitat: Original erstellt von dwg3d: ...vielleicht muss man dazu schon ein fortgeschrittener Lispler sein ...
Ich denke nicht, dass man zum verstehen von Code intensive Kenntnis einer Programmiersprache haben muss. Viel wichtiger ist, um den Code nachvollziehen zu können, was wird damit gemacht. Deshalb habe ich auch den 1. Beitrag zitiert. Programmieren ist in erster Linie die Idee einer Lösung, nicht das Beherrschen aller Funktionen und Syntax einer Programmiersprache, auch wenn das bei der Umsetzung dann sehr hilfreich ist, wenn mans beherrscht. Auch wenn es dwg3d an dieser Stelle helfen mag, eine fertige Subroutine gepostet zu bekommen. Da der Lösungsansatz gefehlt hat, gehe ich davon aus, dass ihm das Objekt und dessen Aufbau nicht bekannt ist. Darum meine Empfehlung, schau dir die Elementdaten (entget(car(entsel))) einer Polyline an, lösche dann einen Stützpunkt mit AutoCAD-Befehlen, und schaue dir dann noch einmal die Elementdaten der Polyline an. Du wirst Änderungen feststellen. Genau diese Änderung einer Liste(Elementdaten) werden durch die Funktionen vorgenommen. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |