Hot News aus dem CAD.de-Newsletter:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  automatisch Polygon aus einzelnen Linien erstellen

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
Autor Thema:   automatisch Polygon aus einzelnen Linien erstellen (141 mal gelesen)
ritchie1
Mitglied



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

Beiträge: 23
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 04. Dez. 2018 11:08    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

Hallo zusammen,


Gegeben ist ein Vieleck aus einzelnen Linien. Das Vieleck wird zeichnerisch ermittelt.
Beim Klick auf eine Linie (egal welche) des Vielecks sollen alle anderen Linien (welche über die Endpunke miteinander verbunden sind) zu einem einem Polygon (Polylinie) zusammengefügt werden.
Hat jemand eine Idee wie das am schnellsten umzusetzen wäre?

lg, ritchie

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

Brischke
Ehrenmitglied V.I.P. h.c.
CAD on demand GmbH



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

Beiträge: 4112
Registriert: 17.05.2001

ACAD20XX, defun-tools

erstellt am: 04. Dez. 2018 13:45    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 ritchie1 10 Unities + Antwort hilfreich

Hallo ritchie,

du kannst einen Auswahlsatz bilden, bei dem der Start oder Endpunkt einer Linie dem aktuell betrachteten Punkt entspricht. Aus dem Auswahlsatz musst du dann natürlich die aktuell betrachtete Linie entfernen.
Das andauernde Bilden eines Auswahlsatzes ist langsam. Du kannst auch einmal alle Linien ermitteln und aus diesen dann die jeweils passende Linie über den Punktevergleich ermitteln.
Hast du dann alle Punkte beisammen, kannst damit ja dann die Polylinie bilden.

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2042
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2017
Plateia, Canalis
Visual Basic

erstellt am: 04. Dez. 2018 14:02    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 ritchie1 10 Unities + Antwort hilfreich

Hallo Ritchie,

Du kennst den Befehl PEdit?
Mit der Option mehrfach kannst Du doch genau dies durchführen solange vom Endpunkt keine zwei Linien abzweigen.

Ansonsten gäbe es über MAP, falls Du das hast, noch die Möglichkeit auch einen geringen Abstand der Linienendpunkte zu überbrücken.

Grüße
Klaus 

PS.: Natürlich gäbe es auch eine Programmlösung  wenn man im Netz mal sucht

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 231
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 05. Dez. 2018 14:31    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 ritchie1 10 Unities + Antwort hilfreich

Hi, sowas in der Art macht der Befehl JOIN. Nur ist der etwas wählerisch. 3d Polylinien mag der z.B. nicht. Für meine Höhenlinien ist sowas demnächst in der Mache. Haken an der Sache dort, von denen habe ich ein paar tausend in der Zeichnung. Anyhow. Was dem Menschen leicht fällt führt bei brute force Methoden (Enpunktevergleich) zu nicht annehmbaren Laufzeiten. Ich lese derzeit die Koordinaten der Elemente aus, speichere diese in Datensätzen und prüfe welche Endpunkt zusammen passen. Ne Linie oder Polylinie hat 2 Enden, was die Sache nicht besser macht . Passen die zusammen, werden die Koordinaten einer der beiden (poly)Linien passig zugefügt (obacht, die können ja auch im oder gegen den Uhrzeigersinn gestrickt worden sein-man muss die erst mal auf eines von beiden normieren, sonst wirst irre), die andere Linie gelöscht. Das ganze wird so lange betrieben bis "nichts mehr passt". Die Problematik liegt im Punktvergleich. Derzeit habe ich einen B+Tree eingesetzt. Drastisch schneller aber immer noch zu langsam. Durch Zufall bin ich über Quad und Octrees gestolpert. Danach mal googeln. Diese Bäume sind recht einfach zu implementieren. Steht bei mir über Weihnachten an. Eine weitere Hürde ist die, das die Endpunkte numerisch nich EXAKT identisch sein müssen. Da ist entweder Rasterrunden oder Phytagoras angesagt. Das ganze ist machbar allerdings zeitaufwändig und wenn es viele Linien sind nicht gerade trivial. Allein das Linien zusammenfügen sorgte da schon für manches graue Haar  Lieben Gruß Thomas

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2042
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2017
Plateia, Canalis
Visual Basic

erstellt am: 06. Dez. 2018 10:08    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 ritchie1 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rexxitall:
Eine weitere Hürde ist die, das die Endpunkte numerisch nich EXAKT identisch sein müssen. Da ist entweder Rasterrunden oder Phytagoras angesagt.

Was meinst Du mit Rasterrunden?
Ich verwende in solchen Fällen immer den Vergleich der absoluten Koordinatendifferenz mit einem Schwellwert. Selten mehr als der x-Wert erforderlich außer bei reinen Rasterkoordinaten, da muß man dann anders vorgehen.

Grüße
Klaus 

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 231
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 07. Dez. 2018 09: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 Nur für ritchie1 10 Unities + Antwort hilfreich

HI, Anstelle mit dem Phytagoras zu hantieren kann man z.B. festlegen das die Endpunkte auf einem 5 mm Raster liegen (Ich komm vom Bau  ) das ist durch Runden oder Nachkommastellen entfernen schneller als der Phytagoras. Nun kann man diese Zahlen als String abspeichern und mit einfachem String vergleich nachsehen ob die Werte identisch sind. Diese Strings kann man auch in einem Dictionary als Schlüssel verwenden. Zum Beispiel ein Dictionary welches die Endpunkte der (Poly)Linien als Schlüssel hat und als Wert einen Index auf eine COLLECTION welches die Polygonkoordinaten enthält. Auch dieses Vorgehen ist deutlich schneller als jeden Punkt mit Phytagoras einzeln "brute force" mäßig zu vergleichen. Gibt es so einen Schlüssel kannst du die Linien verbinden, gibt es ihn nicht ist dies der Endpunkt dieser Linie. Dabei verliert man nicht einmal an Genauigkeit, weil die Koordinaten in der Collection ungerundet bleiben können. Ich verwende oft Dictionarys als "Arme Leute Datenbank". Ich habe auch mal SQLITE für diesen Zweck probiert. Klar schneller als "Brute Force" aber man verliert viel Zeit durch das umformulieren und Parsen beim Übergnag zu SQL. Für andere Dinge ist SQLITE durchaus eine "Waffe".  Das Datenformat ist normiert (Single File Datenbank), man kann komplizierteste Abfragen elegant tätigen, sie besitzt eine Volltextsuche usw usw.  Für Excel gibt es eine Direktanbindung welche auch im Autocad VBA problemlos nutzbar ist. Das mein kein Office professionell kaufen muss und ein Linux User auch etwas mit diesen Daten anfangen kann kommt erschwerend hinzu. Ich habe mir mal den Spaß gemacht die Autocad Hilfe zu parsen und in eine SQLITE Datenbank zu stopfen (mit Volltextindex). Das ganze wurde mit etwas PHP und Javascript angereichert und ist somit besser Nutzbar als die Originalhilfe. Andere Anwendung sind z.B. Stahlprofildaten für HEB etc. Damit passende Träger zu suchen macht auch mehr Freude als in irgendwelchen Excel Tabellen zu wühlen. Selct * from STEEL where IX > 1000 und man bekommt ein Array welches alle Daten entthält wo die Trägheitsmomente größer 1000 cm4 sind. Lieben Gruß Thomas

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2042
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2017
Plateia, Canalis
Visual Basic

erstellt am: 07. Dez. 2018 13:12    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 ritchie1 10 Unities + Antwort hilfreich

HI,
Interessanter Ansatz die Koordinaten als Stringwerte in der DB zu speichern. Muß ich mal bei Gelegenheit testen ob das Zeitgewinne bringt.

Pythagoros fällt sowieso raus, viel zu viele Rechenoperationen. Reine Differenzenbildung und Vergleich mit Absolutwert ist da deutlich schneller.

Grüße
Klaus 

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 231
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 07. Dez. 2018 18:31    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 ritchie1 10 Unities + Antwort hilfreich

Mach mal  Wie gesagt der derzeit vielversprechenste Ansatz ist der mit Quad oder Octrees.
https://www.i-programmer.info/programming/theory/1679-quadtrees-and-octrees.html
Auf Github hats da auch was.
https://github.com/yhpong/Scientific-Toolkit
Lieben Gruß
Thomas

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

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)2018 CAD.de | Impressum | Datenschutz