| |
| 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: Lisp Station einer Gradiente (604 / mal gelesen)
|
hea83 Mitglied Ing.
Beiträge: 4 Registriert: 07.04.2023 AutoCAD 2022
|
erstellt am: 07. Apr. 2023 00:53 <-- editieren / zitieren --> Unities abgeben:
Hi! Ich würde gerne ein Lisp erstellen das an einer bestimmten Station (horizontal) die Gradientenlänge (schräge Länge) abgreift und als Text ausgibt. Leider kenn ich mich zu wenig mit den ganzen Lisp befehlen aus. Durch die Suche und ChatCPT hab ich ein wenig zusammengebracht vlax-curve-getClosestPointTo ist die falsche Funktion da sie die kürzeste Distanz (Lotrecht auch die Gradiente) und nicht Vertikal auf die Gradiente den Schnittpunkt wählt vielleicht kann mir wer helfen. DANKE ************************************************** (defun c:mh( / Schräge Station) (vl-load-com) (setq gradiente(car(entsel "Gradiente: "))) (setq station(getpoint "Station: ")) (setq stationspunkt (vlax-curve-getClosestPointTo (vlax-ename->vla-object gradiente) station ) ) (entmake (list'(0 . "LINE") (cons 10 station) (cons 11 stationspunkt) '(62 . 2) ) ) (setq txt (vlax-curve-getDistAtPoint (vlax-ename->vla-object gradiente) stationspunkt )) (command "text" station 3.5 90 txt 0.0) (command "text" "" ARIAL 0.0) (princ(strcat"Station bei Kilometer: "(rtos kilometer 2 3))) (princ) ) ************************************************** Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Apr. 2023 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Zitat: Original erstellt von hea83:
vlax-curve-getClosestPointTo ist die falsche Funktion da sie die kürzeste Distanz (Lotrecht auch die Gradiente) und nicht Vertikal auf die Gradiente den Schnittpunkt wählt
Ich verstehe nicht, was Du benötigst. Dass Du mit "Station" einfach einen Koordinatenpunkt meinst, glaube ich mitgekriegt zu haben, aber "vertikal" und "lotrecht" sind bei mir Synonyme. Und wo der "Schnittpunkt" plötzlich herkommt, verstehe ich auch nicht. Was suchst Du? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hea83 Mitglied Ing.
Beiträge: 4 Registriert: 07.04.2023 AutoCAD 2022
|
erstellt am: 07. Apr. 2023 12:26 <-- editieren / zitieren --> Unities abgeben:
Ziel der Übung: Ich habe einen Längenschnitt aus dem Civil 3D Alle 50m eine Station zu all diesen Station hätte ich gerne an der jeweiligen Station wie wahre länge der Gradiente Meine Auswahl im Lisp ist die Gradiente und im Band die Position des Textes Mein bisheriges Lisp zeichnet Lotrecht eine Linie auf die Gradiente (die sich auf und ab bewegt) und nicht vertikal nach oben. deshalb greift sie den falschen Punkt ab Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Apr. 2023 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Zitat: Original erstellt von hea83: Ziel der Übung: Ich habe einen Längenschnitt aus dem Civil 3D Alle 50m eine Station zu all diesen Station hätte ich gerne an der jeweiligen Station wie wahre länge der GradienteMeine Auswahl im Lisp ist die Gradiente und im Band die Position des Textes Mein bisheriges Lisp zeichnet Lotrecht eine Linie auf die Gradiente (die sich auf und ab bewegt) und nicht vertikal nach oben. deshalb greift sie den falschen Punkt ab
Ich bin mit Deinen Fachbegriffen nicht vertraut. Kannst Du das bitte in normale mathematische CAD-Begriffe übersetzen? Jetzt kommt auch noch ein ominöses "Band" ins Spiel. Was ist das denn? Du kriegst also eine Linie von einem von Dir markierten Punkt (= "Station"?), der lotrecht auf eine Polylinie (= "Gradient"?) geht. Was möchtest Du anders haben? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hea83 Mitglied Ing.
Beiträge: 4 Registriert: 07.04.2023 AutoCAD 2022
|
erstellt am: 07. Apr. 2023 13:30 <-- editieren / zitieren --> Unities abgeben:
anbei ein Bild mit der Beschriftung Band = die Beschriftung unten im Längenschnitt Gradiente (Grün) = Polylinie (Achse der Fahrbahn im Längenschnitt) Ich will bei jeder Markierung im Band eine Länge der Gradiente (vom Start der Gradiente bis S2) derzeit Liefert es mir nur den Wert vom Start der Gradiente bis S1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Apr. 2023 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Zitat: Original erstellt von hea83: anbei ein Bild mit der Beschriftung Band = die Beschriftung unten im Längenschnitt Gradiente (Grün) = Polylinie (Achse der Fahrbahn im Längenschnitt) Ich will bei jeder Markierung im Band eine Länge der Gradiente (vom Start der Gradiente bis S2) derzeit Liefert es mir nur den Wert vom Start der Gradiente bis S1
Du hast immer noch nicht gesagt was Deine Begriffe bedeuten. Ist die Gradiente nun eine durchgehende Polylinie, oder sind das einzelne Linienstückchen? Für den Fall der durchgehenden Polylinie kriegst Du S2 problemlos durch die Anwendung der Methode IntersectWith (vlax-invoke-method obj1 'IntersectWith obj2 <extend> ). Die Länge der Polylinie bis dahin kriegst Du mit vlax-curve-getDistAtParam, und den Parameter des Schnittpunkts kriegst Du mit vlax-curve-getParamAtPoint. 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
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 08. Apr. 2023 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
@archtools: Die Begriffe die hier verwendet werden sind spezielle Begriffe aus dem Aufsatz Civil 3D und so eigentlich schon korrekt und eindeutig. Allerdings kommt man hier nicht mit den "normalen" Lisp-Befehlen weiter sondern muß sich mit dem Objektmodell von Civil 3D beschäftigen. Jeder Längenschnitt ist einer Achse zugeordnet über die man Zugriff auf die verwendete Gradiente bekommt. Je nach Version (Standard oder DACH-Country Kit) gibt es diverse Bandstile, die vordefiniert sind und selbständig die passenden Werte finden und sich dynamisch an die Lage der Achse / Gradiente anpassen. Theoretisch kann man diese Bandstile auch durch eigene ergänzen, ist aber nicht trivial. Wenn nun nur für die Ausgabe eigene Werte über Lisp eingetragen werden sollen, müssen die natürlich selber entsprechend berechnet werden. In Deinem einfachen Fall könntest Du hier vom TS ausgehend anhand der Neigung und dem Stationsabstand zum TS die tatsächliche Länge berechnen. Sinnvollerweise würde man aber die komplette Gradiente in den Speicher lesen und sich alle Hauptpunkte (unter Berücksichtigung der Kuppen- und Wannenradien) berechnen und dann eine Funktion haben, die sich aus dieser Liste die vertikale Länge holt. Allerdings sind mir keine Planungen bekannt bei denen diese Werte tatsächlich benötigt wurden. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 08. Apr. 2023 14:11 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Zitat: Original erstellt von KlaK: @archtools: Die Begriffe die hier verwendet werden sind spezielle Begriffe aus dem Aufsatz Civil 3D und so eigentlich schon korrekt und eindeutig.
Alle Fachbegriffe aller Branchen sind ziemlich eindeutig, aber sie sind eben den Leuten außerhalb dieser Branche fast immer unbekannt. Da erwarte ich schon, dass jemand, der um Hilfe bittet, auf Nachfrage (!) wenigstens klar sagt, um was es sich dabei handelt. Der OP hat sich ja auch auch fachlich und mathematisch falsch ausgedrückt, als er nach einer "lotrecht" oder "vertikal" auf die Gradiente verweisende Linie fragte. Er meint tatsächlich den Schnittpunkt zwischen Gradiente und einer in Y-Richtung von der "Station" verlaufenden Linie. 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
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 08. Apr. 2023 18:14 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Zitat: Original erstellt von archtools: Alle Fachbegriffe aller Branchen sind ziemlich eindeutig, aber sie sind eben den Leuten außerhalb dieser Branche fast immer unbekannt. Da erwarte ich schon, dass jemand, der um Hilfe bittet, auf Nachfrage (!) wenigstens klar sagt, um was es sich dabei handelt.
Da hast Du vollkommen recht, deshalb habe ich auch erklärend eingegriffen Gerade auch noch gesehen, dass er beim 3. TS (Station 52,978 im 1.jpg) tatsächliche eine Ausrundung auf +- 4m hat. Wenn hier nicht die Länge auf der Polylinie (? Keine Ahnung ob das im Schnitt eine Polylinie ist, hab gerade kein Civil zur Hand) abgefragt wird passt das ganze eh nicht mehr. Ebensowenig wenn der Schnitt nicht bei Null beginnt. 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: 12. Apr. 2023 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für hea83
Hallo Hea, nur auf die Schnelle, vielleicht kommst Du mit folgendem Gedanken weiter: Wenn ich davon ausgehe, dass Deine Gradiente eine Polylinie ist, dann würde ich von Deinen Markierungspunkten startend temporäre Linien nach oben zeichen. Dann kannst Du pro Linie den jeweiligen Schnittpunkt mit der Polylinie ermitteln => Methode INTERSECTWITH Wenn Du die Schnittpunkt hast kannst Du mit VLAX-CURVE-GETDISTATPOINT die Station ermitteln, die Differenz der Station ist die schräge Länge. ------------------ viele Grüße Jörn http://www.bosse-engineering.com das Flächenstempel_Tool Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hea83 Mitglied Ing.
Beiträge: 4 Registriert: 07.04.2023 AutoCAD 2022
|
erstellt am: 12. Apr. 2023 14:08 <-- editieren / zitieren --> Unities abgeben:
|