Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lisp Station einer Gradiente

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:  Lisp Station einer Gradiente (538 / mal gelesen)
hea83
Mitglied
Ing.

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

Beiträge: 4
Registriert: 07.04.2023

AutoCAD 2022

erstellt am: 07. Apr. 2023 00: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

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



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

Beiträge: 835
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 07. Apr. 2023 10:15    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 hea83 10 Unities + Antwort hilfreich

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.

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

Beiträge: 4
Registriert: 07.04.2023

AutoCAD 2022

erstellt am: 07. Apr. 2023 12:26    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


1.JPG

 
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



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

Beiträge: 835
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 07. Apr. 2023 12:44    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 hea83 10 Unities + Antwort hilfreich

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 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


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.

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

Beiträge: 4
Registriert: 07.04.2023

AutoCAD 2022

erstellt am: 07. Apr. 2023 13: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


2.JPG

 
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



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

Beiträge: 835
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 07. Apr. 2023 14:07    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 hea83 10 Unities + Antwort hilfreich

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



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: 2633
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 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 hea83 10 Unities + Antwort hilfreich

@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



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

Beiträge: 835
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 08. Apr. 2023 14:11    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 hea83 10 Unities + Antwort hilfreich

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



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: 2633
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 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 hea83 10 Unities + Antwort hilfreich

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


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: 1738
Registriert: 11.10.2004

erstellt am: 12. Apr. 2023 13:59    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 hea83 10 Unities + Antwort hilfreich

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.

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

Beiträge: 4
Registriert: 07.04.2023

AutoCAD 2022

erstellt am: 12. Apr. 2023 14: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

danke an alle - mit INTERSECTWITH hat es funktioniert

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