Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Polylinien, Linien, Bögen teilen, brechen und versetzen?

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:  Polylinien, Linien, Bögen teilen, brechen und versetzen? (5442 mal gelesen)
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2019.3.4 Update
VBA Enabler 2019
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 24. Aug. 2010 23:17    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  Forum,

ich muss Polylinien, Linien und Bögen (Objekte, die zwei Enden haben) immer in eine ungerade Anzahl an Teilstücken zerlegen, jedes 2. löschen und dann versetzen. Quasi eine "strichlierte Linie mit Breite" zeichnen.
Die Längen des Strichs und der Lücke sowie die endgültige Breite soll als Parameter übergeben werden und differiert bei jedem Objekt.

Bsp.: Eine PL, Länge = 21 Einheiten soll zerlegt werden in 3 Striche mit 3Einheiten Länge und dazwischen jeweils eine Lücke von 6Einheiten.
Die entstandenen kurzen Striche müssen um einen Wert x nach beiden Seiten des Strichs versetzt werden und die Enden der versetzten Objekte miteinander verbunden werden. Der Mittlere Strich danach gelöscht werden.

Über den Linientyp funktioniert das ganze leider nicht.

Am Ende ergibt das ganze dann eine "hohle" Markierungsline (Straßenvermessung).

Wie würdet Ihr an die Aufgabe rangehen.
Über messen, teilen, offset oder gibt es da was schlaueres?

------------------
Christian

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 25. Aug. 2010 07:28    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 otm 10 Unities + Antwort hilfreich

Hi,
schau dir mal die vlax-curve-get...-Funktionen an.
vla-get-Length könnte auch noch nützlich sein.
Aufbrechen geht sich am einfachsten mit (vl-cmdf "_.break"...
Versetzen mit vla-Offset und zum Verbinden kannst du alle relevanten Daten von den Objekten bzw bereits ermittelten Punkten nutzen.

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

CADraxas
Mitglied
Landschaftsarchitekt


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

Beiträge: 55
Registriert: 27.08.2008

erstellt am: 25. Aug. 2010 14:20    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 otm 10 Unities + Antwort hilfreich

Hi,
wäre es nicht einfacher über eine Multilinie, die aus den entsprechenden Linientypen besteht?
mfg Volker

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2019.3.4 Update
VBA Enabler 2019
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 25. Aug. 2010 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


HohlMark.JPG

 
Zum besseren Verständnis habe ich mal ein Bild hochgeladen wie es aussehen soll und wie nicht.
Ausgangssituation ist immer die PL in der "Mitte", die am Ende noch entfernt werden muss.

@CADraxas
Mit Multilinien weiß ich nicht, wie ich den vertikalen Strich hinbekommen.
Außerdem ist die Lücke bei jeder Linie unterschiedlich lang da hier der gemessene Fehler ausgegelichen wird.
Die Striche der Markierung haben immer eine definierte Länge.
Ich müsste also jedesmal eine eigen Multiline machen.

------------------
Christian

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 26. Aug. 2010 11: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 otm 10 Unities + Antwort hilfreich

Mach es doch so, teil deine Mittellinie in eine Anzahl n Teile auf,
an jedem Teilungspunkt berechnest du einen Bruchpunkt in laufrichtung n Einheiten, sowie gegen laufrichtung ebenfalls n Einheiten.
dann brichst du diese mittlere Polylinie und versetzt diese um x nach rechts und links, verbindest die beiden Entpunke noch - fertig - nächster Bruchpunkt

Ist etwas einfach beschrieben, da sich das Ausgangsobjekt Namentlich verändert nach dem Brechen, aber grundsätzlich wäre es so machbar.
kannst ja vor dem Brechen eine Kopie des Objektes anfertigen lassen.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

erstellt am: 28. Aug. 2010 07:46    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 CADwiesel,

danke, ein guter Ansatz.
Hat mich ein ganzes Stück weiter gebracht.

Aber ich muss die Polylinie nicht in n gleichlange Teile teilen. Deshalb glaube ich funktioniert der Befehl Teilen nicht mit der ganzen PL.
Die späteren Striche sind zwar innerhalb einer PL immer gleich lang und die Lücken auch. Aber die Länge der Lücken unterscheidet sich meist von der Länge der Striche.

Jetzt ist die Frage: Wie kann ich in LISP auf einer Polylinie, die z.B. 39.32m lang ist, an der Position +6.04m (Mitte der ersten Lücke =3m (Strich) + 6.08m/2 (Lücke)) ab Startpunkt, dann alle 9.08m weiter (bis 6.04m vor Ende) einen Teilungspunkt berechnen, von dem aus ich nach vorne und hinten dann die Brechpunkte ermittle?

Wenn ich die PL kopiere, die neue PL an Anfang und am Ende um 6.08m kürze und dann erst in n Teile aufteile, dann stellen der Anfangs- und Endpunkt der neuen PL sowie alle Teilungspunkte die Menge aller Lückenmittelpunkte der späteren Striche dar.

Jetzt gehe ich auf der ursprünglichen PL von den Lückenmittelpunkten jeweils Lückenlängenhalbe (6.08m) gegen und in Laufrichtung der ursprünglichen PL. Damit erhalte ich alle Brechpunkte der ursprünglichen PL.

Dann breche ich die urspr. PL von Brech-Pkt 1 nach 2, 3 nach 4, ... und erhalte nur noch die Mittelstriche der späteren Markierungstriche (nicht mehr die der Lücke). Diese dann um x nach rechts und links versetzen und die Endpunkte der 2 versetzten PL verbinden.

Vielen Dank für die gedankliche Hilfe, ich denke so kann das gehen.
Eine ander Möglichkeit ist mir eingefallen.
1. PL kopieren
2. am Anfang um xm kürzen
3. Am Ende um ym kürzen
4. versezten rechts/links
5. verbinden
6. nächster Strich

Kann das schneller / besser sein?

Ich werde mal in der Befehlskiste kramen, F1 bemühen und mich dann mit den Ergüssen wieder melden.

------------------
Christian

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: 28. Aug. 2010 12:21    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 otm 10 Unities + Antwort hilfreich

Hallo Christian,
Zitat:

Jetzt ist die Frage: Wie kann ich in LISP auf einer Polylinie, die z.B. 39.32m lang ist, an der Position +6.04m (Mitte der ersten Lücke =3m (Strich) + 6.08m/2 (Lücke)) ab Startpunkt, dann alle 9.08m weiter (bis 6.04m vor Ende) einen Teilungspunkt berechnen, von dem aus ich nach vorne und hinten dann die Brechpunkte ermittle?

Probier mal mit folgendem rum:

Code:

(vlax-curve-getPointAtDist
  (vlax-ename->vla-object
    (car(entsel)))6.04)

Ist aber nur ein Gedankenansatz, den Dorfy ja auch schon gebracht hat, habe grade wenig Zeit

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

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

CADraxas
Mitglied
Landschaftsarchitekt


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

Beiträge: 55
Registriert: 27.08.2008

erstellt am: 02. Sep. 2010 09:52    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 otm 10 Unities + Antwort hilfreich


bplan-angrenzende.jpg

 
Moin OTM,

ich bin zwar kein LISP-Programmierer, aber vielleicht helfen Dir meine Gedanken, wie ich das zu Fuß konstruktiv lösen würde:
Ähnlich wie CADwiesel kannst Du mit Teilen schon die Mitte der jeweiligen (aller) Lücken ermitteln. Wenn Du da Punkte setzt und die Punkte als Mittelpunkt von Kreisen nimmst mit dem Radius "halbe Lücke" (kannst Du ja auch vorher als Block definieren, anstatt Punkte zu nehmen, und dann wieder auflösen zum Brechen an den Schnittpunkten bzw. Stutzen innerhalb des Kreises) ergibt sich die richtige Länge aller Reststücke von alleine. Dann brauchst Du auch nicht mehr die Linie zu kopieren und zu kürzen weil du mit einem Schlag schon alle späteren Lücken definiert hast.

Umgekehrt geht natürlich auch (vielleicht leichter?): Kreise in die Mittelpunkte der späteren Linien und dann die Lücken dazwischen rausstutzen.

Wenn es nicht ganz so drauf ankommt: Vielleicht doch ein Linientyp (siehe Anhang)?

Grüße
Volker

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2019.3.4 Update
VBA Enabler 2019
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 03. Sep. 2010 22: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

Moin CADraxas,

vielen Dank für's Mitdenken.

Auf Grund der vielen Zeit die ich als Nicht-Lispler in das gesamte Thema reinstecken müsste, habe ich mich entschieden die Arbeit zu vergeben.

Somit ist dieses Thema von meiner Seite aus geschlossen.
Trotzdem nochmal allen ein herzliches Danke.

------------------
Grüße aus München
Christian

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