| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Region in Polylinie verwandeln. (4982 mal gelesen)
|
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 21. Okt. 2005 10:00 <-- editieren / zitieren --> Unities abgeben:
|
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: 21. Okt. 2005 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Hallo Bernhard, vielleicht hilft Dir folgender Ansatz weiter. Code:
(defun c:test ( / reg last_obj aws_temp) (setq reg (car(entsel "\nRegion auswählen:")) last_obj reg aws_temp (ssadd)) (command "_.explode" reg) (while (setq last_obj(entnext last_obj)) (ssadd last_obj aws_temp)) (command "_.pedit" (ssname aws_temp 0) "_Y" "_J" aws_temp "" ""))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 21. Okt. 2005 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Der Code funktioniert nur richtig, wenn die Region als letzes Element gezeichnet wurde. Richtig ist es, beginnend von (entlast) die neuen Elemente (Linien/Bögen) zu sammeln und dann zu verbinden. Allerdings kann eine Region ja auch Ellipsen enthalten (wird hier nicht passieren, da ja Polylinien zuerst zu Regionen umgewandelt werden), dann würde das PEDIT _Join versagen.
Zitat: Original erstellt von joern bosse: Hallo Bernhard, vielleicht hilft Dir folgender Ansatz weiter. Code:
(defun c:test ( / reg last_obj aws_temp) (setq reg (car(entsel "\nRegion auswählen:")) last_obj (ENTLAST) ; reg aws_temp (ssadd)) (command "_.explode" reg) (while (setq last_obj(entnext last_obj)) (ssadd last_obj aws_temp)) (command "_.pedit" (ssname aws_temp 0) "_Y" "_J" aws_temp "" ""))
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 21. Okt. 2005 10:53 <-- editieren / zitieren --> Unities abgeben:
@joern bosse @CAD-Huebner Der Einwand betr. ENTLAST ist zwar richtig, dürfe aber IMHO keine Rolle spielen, da dir Region das letze erstellte Element wäre.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 25. Okt. 2005 10:58 <-- editieren / zitieren --> Unities abgeben:
Anbei das Ergebnis: Code:
(DEFUN c:plver (/ awspl len n elempl awsreg reg last_obj aws_temp) (COMMAND "_UNDO" "_Group") (SETQ awspl (SSGET '((0 . "LWPOLYLINE")))) (SETQ len (SSLENGTH awspl)) (SETQ n 0) (WHILE (< n len) (SETQ elempl (SSNAME awspl n)) (SETQ n (1+ n)) (COMMAND "_.REGION" elempl "") (SETQ awsreg (IF awsreg (SSADD (ENTLAST) awsreg) (SSADD (ENTLAST)))) ) (COMMAND "_.UNION" awsreg "") (SETQ reg (ENTLAST) last_obj reg aws_temp (SSADD)) (COMMAND "_.explode" reg) (WHILE (SETQ last_obj (ENTNEXT last_obj)) (SSADD last_obj aws_temp) ) (COMMAND "_.pedit" (SSNAME aws_temp 0) "_Y" "_J" aws_temp "" "") (COMMAND "_UNDO" "_END") (PRINC) )
Leider smiliy trotz Code-Tag / deaktiviert ... Anwendungserfahrungen und konktrete Verbesserungsvorschläge ausdrücklich erwünscht. ------------------ Gruß aus Wien Bernhard [Diese Nachricht wurde von Bernhard GSD am 25. Okt. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
petrov9 Mitglied Architekt
Beiträge: 106 Registriert: 06.10.2004 ADT2006 ADT2007
|
erstellt am: 02. Mrz. 2007 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
hallo Bernhard! super routine. ich habe mir erlaubt ein paar zeilen einzufuegen fuer die behandlung der 'peditaccept'-variable. es gibt naemlich einen abbruch wenn die auf '1' steht. danke peter (DEFUN c lver (/ awspl len n elempl awsreg reg last_obj aws_temp) (COMMAND "_UNDO" "_Group") (setq oldpeditaccept (getvar "peditaccept")) (setvar "peditaccept" 0) (SETQ awspl (SSGET '((0 . "LWPOLYLINE")))) (SETQ len (SSLENGTH awspl)) (SETQ n 0) (WHILE (< n len) (SETQ elempl (SSNAME awspl n)) (SETQ n (1+ n)) (COMMAND "_.REGION" elempl "") (SETQ awsreg (IF awsreg (SSADD (ENTLAST) awsreg) (SSADD (ENTLAST)))) ) (COMMAND "_.UNION" awsreg "") (SETQ reg (ENTLAST) last_obj reg aws_temp (SSADD)) (COMMAND "_.explode" reg) (WHILE (SETQ last_obj (ENTNEXT last_obj)) (SSADD last_obj aws_temp) ) (COMMAND "_.pedit" (SSNAME aws_temp 0) "_Y" "_J" aws_temp "" "") (setvar "peditaccept" oldpeditaccept) (COMMAND "_UNDO" "_END") (PRINC) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 07. Aug. 2007 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
hi ! ich wollte gerade die funktion ausprobieren - ohne erfolg. dann habe ich mir den code angesehen und frage mich was mit der abfrage (SETQ awspl (SSGET '((0 . "LWPOLYLINE")))) bezweckt werden soll ! ich möchte doch REGIONEN auswählen und die haben den GC = REGION !!! kann mir einer weiterhelfen ?? gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 07. Aug. 2007 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Zitat: Original erstellt von CAD-Huebner: Der Code funktioniert nur richtig, wenn die Region als letzes Element gezeichnet wurde. Richtig ist es, beginnend von (entlast) die neuen Elemente (Linien/Bögen) zu sammeln und dann zu verbinden. Allerdings kann eine Region ja auch Ellipsen enthalten (wird hier nicht passieren, da ja Polylinien zuerst zu Regionen umgewandelt werden), dann würde das PEDIT _Join versagen.
unabhängig davon, dass das (entlast) ghier keine Rolle spielt, gibt es dabei noch was zu beachten : Ist das letzte Objekt zufällig ein Block mit Attributen, oder eine alte Polylinie mit Kontrollpunkten gibt (entlast) das INSERT bzw die POLYLINE zurück ! Ein (entnext last_obj) gibt dann nicht die neu erstellten Objekte, sondern erst die Atttribute bzw. Kontrollpunkte ! Also sicherheitshalber immer so: (setq last_obj (entlast)) (while (entnext last_obj) (setq last_obj (entnext last_obj))) ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 07. Aug. 2007 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Hi Jan, Zitat: Original erstellt von Bernhard GSD: Ziel ist also ein Befehl der Polylinien so wie Regionen vereingigt. Zuerst sollen die Polylinien in Regionen verwandelt werden, dann erfolgt die Vereinigung und abschliessend die Rückverwandlung.
und das scheint die Funktion zu machen. Wo ist das Problem? Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 07. Aug. 2007 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
hallo fuchsi ! willst du damit Code: (WHILE (SETQ last_obj (ENTNEXT last_obj)) (SSADD last_obj aws_temp) )
ersten ? so das darauf folgendes wird: Code: (WHILE (setq last_obj (entlast)) (while (entnext last_obj) (setq last_obj (entnext last_obj))) (SSADD last_obj aws_temp) )
irgendwie verstehe ich dich nicht ganz !kannst mir nochmal den weg zeigen ? gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 07. Aug. 2007 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
hallo CADchup, da haben sich die mails wohl überholt. ich meine nicht was sie machen soll - sondern was technisch passiert. habe mich wohl wieder einmal undeutlich ausgedrückt. ich habe die funktion, der überschrift nach zu urteilen, auch dazu benutzen wollen um regionen in polylinien zu konvertieren und nicht noch mit anderen elementen zusammen zu bringen. gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 07. Aug. 2007 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
@Jan Ich wollte eigentlich nur darauf hinweisen, dass ein (entlast) nicht unbedingt das letzte Element in der Datenbank beinhaltet. Das hat aber mit dem Problem in diesem Post eigentlich nichts zu tun. Also in folgendem Beispiel von CAD-HUEBNER (defun c:test ( / reg last_obj aws_temp) (setq reg (car(entsel "\nRegion auswählen:")) last_obj (ENTLAST) ; reg aws_temp (ssadd)) (command "_.explode" reg) (while (setq last_obj(entnext last_obj)) (ssadd last_obj aws_temp)) (command "_.pedit" (ssname aws_temp 0) "_Y" "_J" aws_temp "" "")) waäre das zuletzt erzeugte Element vor dem (command "._explode" ..) zufällig ein Block mit Attributen gewesen, so würde das Lisp versuchen, auch die Attribute und das Sequend (und damit den Block selber) zur Polylinie hinzuzufügen -> Fehler !
Also so ist es besser
(defun c:test ( / reg last_obj aws_temp) (setq reg (car(entsel "\nRegion auswählen:")) last_obj (ENTLAST) ; reg aws_temp (ssadd)) (while (entnext last_obj) (setq last_obj (entnext last_obj))) (command "_.explode" reg)
(while (setq last_obj(entnext last_obj)) (ssadd last_obj aws_temp)) (command "_.pedit" (ssname aws_temp 0) "_Y" "_J" aws_temp "" "")) aber da in diesem Problem eh gewährleistet ist, dass die betroffenen region das letzte Element ist, ist das wie gesagt nur eine Anmerkung am Rande
[Diese Nachricht wurde von fuchsi am 07. Aug. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 07. Aug. 2007 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
nahe Ehrenmitglied
Beiträge: 1764 Registriert: 18.01.2001
|
erstellt am: 13. Aug. 2007 11:04 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Hallo zusammen vielleicht nur so als Anregung für den Zugriff auf die nach EXPLODE vorhandenen Elemente. Nach EXPLODE kann man die Elemente mit (ssget "_P") erhalten. Dadurch braucht man sich auch keine Gedanken darüber zu machen, was ev. für ein Element das letzte ist.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |