Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Region in Polylinie verwandeln.

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Region in Polylinie verwandeln. (4862 mal gelesen)
Bernhard GSD
Mitglied



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 21. Okt. 2005 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wie kann ich mittlels Lisp eine Region wieder in eine Polylinie verwandeln? Beim Ursprung entstehen ja nur Linien.

Ich versuche hier den Ansatz von http://ww3.cad.de/foren/ubb/Forum54/HTML/012237.shtml
weiterzuentwickeln.

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.

------------------
Gruß aus Wien
Bernhard

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 21. Okt. 2005 10:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von CAD-Huebner an!   Senden Sie eine Private Message an CAD-Huebner  Schreiben Sie einen Gästebucheintrag für CAD-Huebner

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 21. Okt. 2005 10:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 21. Okt. 2005 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@joern bosse @CAD-Huebner

Der Einwand betr. ENTLAST ist zwar richtig, dürfe aber IMHOIn my humble oppinion (Meiner Meinung nach) 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



Sehen Sie sich das Profil von Bernhard GSD an!   Senden Sie eine Private Message an Bernhard GSD  Schreiben Sie einen Gästebucheintrag für Bernhard GSD

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 25. Okt. 2005 10:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von petrov9 an!   Senden Sie eine Private Message an petrov9  Schreiben Sie einen Gästebucheintrag für petrov9

Beiträge: 106
Registriert: 06.10.2004

ADT2006
ADT2007

erstellt am: 02. Mrz. 2007 10:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 07. Aug. 2007 14:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Aug. 2007 14:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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.




Sehen Sie sich das Profil von CADchup an!   Senden Sie eine Private Message an CADchup  Schreiben Sie einen Gästebucheintrag für CADchup

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 07. Aug. 2007 14:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 07. Aug. 2007 14:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 07. Aug. 2007 15:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Aug. 2007 15:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

@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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 07. Aug. 2007 15:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

hi !

ich danke dir vielmals für die wegweisung.

gruß Jan :-)

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nahe
Ehrenmitglied



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

Beiträge: 1724
Registriert: 18.01.2001

erstellt am: 13. Aug. 2007 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernhard GSD 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz