| |
| 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: Objekte innerhalb einer Polylinie (2099 mal gelesen)
|
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: 04. Feb. 2003 13:32 <-- editieren / zitieren --> Unities abgeben:
hallo allerseits... eine frage.... ist es möglich z.B. über (ssget... alle objekte zu erfassen, die sich innerhalb einer polylinie befinden??? wenn ja...whow...wäre eine echte erleichterung schönen ta noch ;-) ------------------ alle wege führen nach rom, bis auf den mittleren! 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: 04. Feb. 2003 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Hi Marvin, klar ist das möglich, in der Hilfe zu ssget steht folgendes: Zitat:
Creates a selection set from the selected object (ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])Selection sets can contain objects from both paper and model space, but when the selection set is used in an operation, ssget filters out objects from the space not currently in effect. Selection sets returned by ssget contain main entities only (no attributes or polyline vertices). Arguments sel-method A string that specifies the object selection method. Valid selection methods are: C Crossing selection. CP Cpolygon selection (all objects crossing and inside of the specified polygon). F Fence selection. I Implied selection (objects selected while PICKFIRST is in effect). L Last visible object added to the database. P Last selection set created. W Window selection. WP WPolygon (all objects within the specified polygon). X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen. :E Everything within the cursor's object selection pickbox. :N Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks. Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, etc.) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report). :S Allow single selection only. pt1 A point relative to the selection. pt2 A point relative to the selection. pt-list A list of points. filter-list An association list that specifies object properties. Objects that match the filter-list are added to the selection set. If you omit all arguments, ssget prompts the user with the Select objects prompt, allowing interactive construction of a selection set. If you supply a point but do not specify an object selection method, AutoCAD assumes the user is selecting an object by picking a single point.
In Deinem Fall sollte _WP die passende Option sein. Stütpunkte der Polylinie auslesen und an die ssget-Funktion übergeben - fertig! Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Wieder 2 neue Tool's im FreeDownload Wissen wie es gemacht wird? Jetzt Quellcode für die Hälfte 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: 04. Feb. 2003 13:51 <-- editieren / zitieren --> Unities abgeben:
|
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: 04. Feb. 2003 17:13 <-- editieren / zitieren --> Unities abgeben:
ähhhh...ich noch mal... is mir ja jetzt peinlich aber ich bin halt doch noch ein lisp-greenhorn...sorry wie lese ich die punkte eigentlich aus? kann sie über entget zwar alle sehn, haben aber alle den gc 10 ....ich komm immer nur an den ersten ran :-( wahrscheinlich totaaaaal einfach, aber..... ------------------ alle wege führen nach rom, bis auf den mittleren! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 04. Feb. 2003 17:43 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2003 18:42 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Hi, versuch dies: Code:
(defun GET-PL-POINTS (ENAME / EDATA PTLISTE X) (if (= (cdr (assoc 0 (entget ENAME))) "LWPOLYLINE") (setq EDATA (entget ENAME) PTLISTE (apply 'append (mapcar '(lambda (X) (if (= 10 (car X)) (list (cdr X)) ) ;_ end of if ) ;_ end of lambda EDATA ) ;_ end of mapcar ) ;_ end of apply ) ;_ end of setq (setq PTLISTE (GET-HW-PL-POINTS ENAME)) ) ;_ end of if ) ;_ end of defun (defun GET-HW-PL-POINTS (ENAME / EDATA PTLISTE) (while (= (cdr (assoc 0 (setq EDATA (entget (entnext ENAME))))) "VERTEX" ) ;_ end of = (setq PTLISTE (cons (cdr (assoc 10 EDATA)) PTLISTE) ENAME (entnext ENAME) ) ;_ end of setq ) ;_ end of while (reverse PTLISTE) ) ;_ end of defun
Beispielaufruf der SubRoutine: (setq xx (GET-PL-POINTS (car (entsel)))) Wobei Du hier natürlich 'ne Polylinie oder LWPolylinie wählen solltest. Die Sub's überprüfen nicht auf Richtigkeit des Element-Typs. Rückgabewert ist eine Liste mit den Kontrollpunkten der Polylinie, z.B: ((0.0 0.0) (1.0 0.0) (1.0 1.0) (0.0 1.0))
------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 04. Feb. 2003 21:05 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 05. Feb. 2003 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Hi, @Axel: Wieso fühle ich mich nach 'ner Mail von Dir immer so, als wenn ich in der Formel 1 den Jaguar fahre und Du den Ferrari? Hast mich mal wieder deklassiert ;-). Deine Funktion: (vl-remove-if-not(function(lambda(pair)(=(car pair)10)))(entget ...)) geht aber nicht mit alten Polylinien, nur mit LWPolylines. ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 05. Februar 2003 editiert.] 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: 05. Feb. 2003 12:14 <-- editieren / zitieren --> Unities abgeben:
@marc.....frag mich mal wie ich mich bei euch fühle... ich stehe irgendwo kurz vor der erfindung des ottomotors ;-(( @axel.....tja, was soll ich sagen...ich schwanke zwischen endloser dankbarkeit und totaler frustration... machs ja auch erst seit zwei wochen ;-) dank an alle...meine drei sterne sind mir richtig peinlich ------------------ alle wege führen nach rom, bis auf den mittleren! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 05. Feb. 2003 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Vorab erstmal: Der Vergleich schmeckt mir ja nicht so richtig, da ich für Motorsport eigentlich nur eine gewisse Verachtung übrig habe - ein Relikt aus der ersten Hälfte des vorigen Jahrhunderts. Inzwischen sollte die Menschheit doch eigentlich soweit sein, sich an Vorbildern zu orientieren, die das Ding mit den begrenzten Ressourcen auf dieser wunderbaren blauen Kugel im All wenigstens im Ansatz begriffen haben. Aber lassen wir das, ich verwende die Terminologie trotzdem weiter und setze mal einen Schuss ins Blaue (wo ich doch auch noch in die Strategenklasse aufgestiegen bin): Nur wer "Abelson/Sussman/Sussman: Struktur und Interpretation von Computerprogrammen" gelesen hat, kriegt von den Göttern der Listen und Paare einen Ferrari zur Verfügung gestellt. Echt, ich lüge nicht! Und dann gibt's noch einen Unterschied zum Motorsport: Hier sollen doch alle gewinnen und auf's Siegertreppchen. Nur wer Funktionen mit mehr als 3 setqs veröffentlicht, der gehört ins Gefängnis;-) Also, Marvin, nicht frustriert sein. Es gilt das Motto der Sesamstrasse - 'Wer nicht fragt, bleibt dumm'. Aber du fragst ja, also alles im grünen Bereich. In ein paar Monaten sieht das alles ganz anders aus! Gruss, Axel ------------------ http://www.tutorial.autolisp.info
http://www.advanced.autolisp.info
http://www.activex.autolisp.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 05. Feb. 2003 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
@Axel: "Vorab erstmal: Der Vergleich schmeckt mir ja nicht so richtig, da ich für Motorsport eigentlich nur eine gewisse Verachtung übrig habe - ein Relikt aus der ersten Hälfte des vorigen Jahrhunderts. Inzwischen sollte die Menschheit doch eigentlich soweit sein, sich an Vorbildern zu orientieren, die das Ding mit den begrenzten Ressourcen auf dieser wunderbaren blauen Kugel im All wenigstens im Ansatz begriffen haben." Siehst Du, genau das meine ich, schon wieder so 'ne Mail. Hab' wieder was falsches gesagt... Zukünftig werde ich Schweigen wenn der Meister spricht: ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 06. Feb. 2003 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Hi, Funktionsupdate mit Implementierung der G'schichte von Axel: Code:
(defun GET-PL-POINTS (ENAME /) (if (= (cdr (assoc 0 (entget ENAME))) "LWPOLYLINE") (GET-LW-PL-POINTS ENAME) (GET-HW-PL-POINTS ENAME) ) ;_ end of if ) ;_ end of defun(defun GET-HW-PL-POINTS (ENAME / EDATA PTLISTE) (while (= (cdr (assoc 0 (setq EDATA (entget (entnext ENAME))))) "VERTEX" ) ;_ end of = (setq PTLISTE (cons (cdr (assoc 10 EDATA)) PTLISTE) ENAME (entnext ENAME) ) ;_ end of setq ) ;_ end of while (reverse PTLISTE) ) ;_ end of defun (defun GET-LW-PL-POINTS (ENAME / EDATA PTLISTE) (setq EDATA (vl-remove-if-not (function (lambda (PAIR) (= (car PAIR) 10))) (entget ENAME) ) ;_ end vl-remove-if-not ) ;_ end setq (foreach ELEM EDATA (setq PTLISTE (cons (vl-remove 10 ELEM) PTLISTE)) ) ;_ end foreach (reverse PTLISTE) ) ;_ end defun
------------------ Ciao, Marc
[Diese Nachricht wurde von marc.scherer am 06. Februar 2003 editiert.] [Diese Nachricht wurde von marc.scherer am 06. Februar 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 06. Feb. 2003 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
Marc, auch wenn ich zu deinem Alptraum werde: Hab schon wieder was zu meckern. Hauptsächlich über mich selbst - ich hatte nämlich was vergessen. Da gehört einfach noch ein (mapcar'cdr...) drum, um den GC10 rauszukriegen. (defun get-lw-pl-points(ename / ) (mapcar'cdr (vl-remove-if-not (function (lambda(pair)(=(car pair)10)) ) (entget ename) ) ) ) Dass heisst nicht, dass deine Variante nicht genauso funktioniert, aber das hier ist flotter, da es ohne setq auskommt. Auch wenn setq die Lieblingsfunktion aller AutoLisp-Programmierer zu sein scheint - es ist nur ein Notnagel, wenn es anders nicht geht. Jedes setq bedeutet, dass erstmal die gesamte Symboltabelle im aktuellen Kontext durchsucht wird, ob das Symbol schon vorhanden ist. Dann werden nach oben alle umgebenden Environments durchsucht, bis schliesslich feststeht, dass nicht mal ein globales Symbol mit dem Namen existiert. Erst dann wird ein Symbol erzeugt und gebunden. Eine grosse Gefahr besteht übrigens in deiner Variante durch die Verwendung von (vl-remove 10 ...). Das prüft zwar mit equal, d.h. 10 /= 10.0, aber wenn in so was mal ein Benutzerinput reinrutscht (ein Punkt für entmake z.B. '(<b>10</b> 100 <b>10</b> 0)), bei dem Koordinaten als INTs vorliegen, dann bläst dir das die 10 auch mehrmals raus. Da ist cdr sicherer, denn die GCs kommen immer als erstes in der Liste. So, und jetzt schweige *ich*;-) Gruss, Axel ------------------ http://www.tutorial.autolisp.info
http://www.advanced.autolisp.info
http://www.activex.autolisp.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 06. Feb. 2003 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für marvin101010
|