| |
| 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: Polylinien, Linien, Bögen teilen, brechen und versetzen? (5569 mal gelesen)
|
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 24. Aug. 2010 23:17 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2010 07:28 <-- editieren / zitieren --> Unities abgeben: Nur für otm
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, Stadtplaner, Freiraumplaner
Beiträge: 55 Registriert: 27.08.2008
|
erstellt am: 25. Aug. 2010 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für otm
|
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 25. Aug. 2010 14:42 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 26. Aug. 2010 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für otm
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
Beiträge: 188 Registriert: 26.08.2009
|
erstellt am: 28. Aug. 2010 07:46 <-- editieren / zitieren --> Unities abgeben:
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
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: 28. Aug. 2010 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für otm
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, Stadtplaner, Freiraumplaner
Beiträge: 55 Registriert: 27.08.2008
|
erstellt am: 02. Sep. 2010 09:52 <-- editieren / zitieren --> Unities abgeben: Nur für otm
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
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 03. Sep. 2010 22:51 <-- editieren / zitieren --> Unities abgeben:
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 |