| |
| 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: Bogenlänge (1581 mal gelesen)
|
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 29. Nov. 2010 10:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, folgendes Lisp habe ich kürzlich zusammengestrickt, leider funktioniert es noch nicht, wie es soll. Wo liegt mein Fehler? Code:
(defun c:b_messen (/ alle_boegen radius start_winkel end_winkel bl lang index obj lang_ss) (setq alle_boegen (ssget "X" '((0 . "ARC")(410 . "Model"))) lang_ss (sslength alle_boegen) lang 0 index 0 ) (repeat lang_ss (setq obj (entget (ssname alle_boegen index)) radius (cdr (assoc 40 obj)) start_winkel (cdr (assoc 50 obj)) end_winkel (cdr (assoc 51 obj));(if (> start_winkel end_winkel) ; (setq end_winkel (+ end_winkel pi pi)) ;) bl (* (* 2 pi radius)(/ (- end_winkel start_winkel) 360.0)) lang (+ lang bl) index (1+ index) ) ) (princ "Gesamtlänge aller Linien im Modellbereich: ") (princ lang) (princ " Zeichnungseinheiten") (princ) )
Die Formel für die Bogenlänge ist ja 2pi*radius*eingeschlossener Winkel / 360°. Ich vermute mal, die Umsetzung ist nicht so ganz korrekt, ich tippe mal auf die 360. Wie muss das richtig heißen? Zweiter Punkt: Die auskommentierten Zeilen funktionieren noch nicht so recht. Soll eine Prüfung sein, ob der Endwinkel größer als der Startwinkel ist. Ist zugegeben nicht von mir, hab mich hier im Forum dazu inspirieren lassen, sieht für mich aber eigentlich stimmig aus.. Wo klemmt's? Vielen Dank schon mal. Musicus [Diese Nachricht wurde von Musicus am 29. Nov. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 29. Nov. 2010 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
|
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: 29. Nov. 2010 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
Hallo Musicus, vielleicht wäre ja die Funktion vla-GetArcLength was für Dich: Code:
(defun c:b_messen (/ ALLE_BOEGEN INDEX LANG LANG_SS OBJ) (setq alle_boegen (ssget "X" '((0 . "ARC")(410 . "Model"))) lang_ss (sslength alle_boegen) lang 0.0 index 0 ) (repeat lang_ss (setq lang (+ lang (vla-get-arclength (vlax-ename->vla-object (ssname alle_boegen index))))) (setq obj (entget (ssname alle_boegen index))index (1+ index) ) ) (princ "Gesamtlänge aller Linien im Modellbereich: ") (princ lang) (princ " Zeichnungseinheiten") (princ) )
Dann brauchst Du Dich um die Berechnung nicht mehr kümmmern.------------------ viele Grüße Jörn http://www.bosse-engineering.com Stammtisch in Wolfsburg im Januar 2010 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
skyzem Mitglied
Beiträge: 400 Registriert: 30.08.2006
|
erstellt am: 29. Nov. 2010 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Musicus
vielleicht gehts auch einfacher. Laut meiner Matheverständnis sind 360° = 2 pi somit lautet deine Formel r * w mit w = eingeschlossener Winkel. Möglich, dass LISP nicht mit Graden sondern mit Radianten rechnet? ------------------ MfG skyzem Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 29. Nov. 2010 11:13 <-- editieren / zitieren --> Unities abgeben:
Danke, läuft jetzt. Code: (defun c:b_messen (/ alle_boegen radius start_winkel end_winkel bl lang index obj lang_ss) (setq alle_boegen (ssget "X" '((0 . "ARC")(410 . "Model"))) lang_ss (sslength alle_boegen) lang 0 index 0 ) (repeat lang_ss (setq obj (entget (ssname alle_boegen index)) radius (cdr (assoc 40 obj)) start_winkel (cdr (assoc 50 obj)) end_winkel (cdr (assoc 51 obj)) ) (if (> start_winkel end_winkel) (setq end_winkel (+ end_winkel pi pi)) )(setq bl (* (* 2.0 pi radius)(/ (- end_winkel start_winkel) pi 2.0)) lang (+ lang bl) index (1+ index) ) ) (princ "Gesamtlänge aller Linien im Modellbereich: ") (princ lang) (princ " Zeichnungseinheiten") (princ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Musicus Mitglied Staatl. gepr. Techniker
Beiträge: 688 Registriert: 26.07.2005 AutoCAD 2018 Linear, CATS Windows 10
|
erstellt am: 29. Nov. 2010 11:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Joern, von vla... hab ich Null Ahnung, das muss ich mir irgendwann mal aneignen.
Zitat: Original erstellt von skyzem: vielleicht gehts auch einfacher.Laut meiner Matheverständnis sind 360° = 2 pi somit lautet deine Formel r * w mit w = eingeschlossener Winkel. Möglich, dass LISP nicht mit Graden sondern mit Radianten rechnet?
Stimmt, könnte ich wegkürzen. Das mit Graden und Radianten hatte ich schon so vermutet, deswegen hab ich ja auf die 360 getippt. Aber die Umrechnung hatte ich jetzt nicht abrufbereit. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |