| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Weihnachtsgeschenk: Plinien, Splines, Bögen, usw in Polylinien mit geraden Linienseg (1086 mal gelesen)
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 12. Dez. 2015 22:15 <-- editieren / zitieren --> Unities abgeben:
Wie jedes Jahr gibt's ein kleines Geschenk von mir, und passend zur Nachfrage ein paar Threads weiter unten ist es diesmal die Funktion CURVE->POLY, die Polylinien mit Bögen, kurvenangepasste Polylinien, Splines, Kreise und Kreisbögen, Ellipsen und Ellipsenbögen durch Polylinien mit geraden Liniensegmenten annähert. In der globalen Variablen AT:CURVE->POLY-ACCURACY steht die Genauigkeit, mit der die Segmentierung erfolgt. Die muss an die bestehenden Verhältnisse angepasst werden. In der globalen Variablen AT:OLDOSMODE wird der alte Objektfangmodus gesichert. Code:
(vl-load-com)(defun curve->poly (en / ACCURACY el closedflag lastent len vertexnumber stparam endparam diffparam startpt endpt ) (if (not AT:CURVE->POLY-ACCURACY) (setq AT:CURVE->POLY-ACCURACY 0.01) ) (setq ACCURACY AT:CURVE->POLY-ACCURACY) (if (= 'ENAME (type en)) (progn (setq el (entget en) en (vlax-ename->vla-object en) ) ) (progn (setq el (entget (vlax-vla-object->ename en)))) ) (if (and (assoc 70 el) (logand 1 (cdr (assoc 70 el)))) (setq closedflag T) ) (setq lastent (entlast)) (if (vlax-property-available-p en 'Length) (setq len (vlax-get-property en 'Length)) (progn (setq len (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)) ) ;; Ellipsenbögen liefern vlax-curve-getDistAtParam = 0 aus: (if (= 0.0 len) (setq len (vlax-curve-getDistAtParam en 1.0)) ) ) ) (setq vertexnumber (fix (/ len ACCURACY))) (if (= 0 vertexnumber) (setq vertexnumber 1) ) (setq stparam (vlax-curve-getstartparam en) endparam (vlax-curve-getendparam en) diffparam (/ (- endparam stparam) (float vertexnumber)) startpt (trans (vlax-curve-getStartPoint en) 0 1) endpt (trans (vlax-curve-getEndPoint en) 0 1) ) (deactivate-osmode) (command "._pline" startpt) (while (< (+ stparam diffparam) endparam) (setq stparam (+ stparam diffparam)) (setq startpt (vlax-curve-getPointAtParam en stparam)) (command (trans startpt 0 1)) ) (if (= 1 closedflag) (command "_cl") (command endpt "") ) (restore-osmode) (if (not (eq (entlast) lastent)) (entlast) ) ) (defun deactivate-osmode () (if (not AT:OLDOSMODE) (setq AT:OLDOSMODE (getvar "osmode")) ) (if (not (or (= 0 AT:OLDOSMODE) (< 16384 AT:OLDOSMODE) ) ) (setvar "osmode" (+ 16384 AT:OLDOSMODE)) ) ) (defun restore-osmode () (if AT:OLDOSMODE (setvar "osmode" AT:OLDOSMODE) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 29. Aug. 2024 16:40 <-- editieren / zitieren --> Unities abgeben: Nur für archtools
Hallo zusammen Ich habe diesen Code in einer Datei mit Namen "Boegen_in_Polylinien_eliminieren1.lsp" abgelegt und diese Datei ins AutoCAD gezogen. Wenn ich nun curve->poly eingebe, dann meldet AutoCAD, dass der Befehl unbekannt sei. Ich habe die Lisp dann auch via APPLOAD geladen, mit dem gleichen Resultat. Was habe ich übersehen oder falsch gemacht? Ich nutze aktuell noch AutoCAD 2020 ------------------ ----------- Auch wenn ich noch so viel Bier trinke, Goethe war dichter... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 29. Aug. 2024 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für archtools
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 30. Aug. 2024 08:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von mazur-ch: Ich habe diesen Code in einer Datei mit Namen "Boegen_in_Polylinien_eliminieren1.lsp" abgelegt und diese Datei ins AutoCAD gezogen. Wenn ich nun curve->poly eingebe, dann meldet AutoCAD, dass der Befehl unbekannt sei.
Holger hat den Hinweis ja schon gegeben. Die Funktion ist nicht als Befehl programmiert. Hier hast Du noch den Befehlsaufruf: Code:
(defun c:curve->poly (/ en) (setvar "cmdecho" 0) (command "._undo" "_group") (and (setq en (car (entsel))) (curve->poly en) ) (command "._undo" "_end") )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |