Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Weihnachtsgeschenk: Plinien, Splines, Bögen, usw in Polylinien mit geraden Linienseg

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:  Weihnachtsgeschenk: Plinien, Splines, Bögen, usw in Polylinien mit geraden Linienseg (927 mal gelesen)
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: 823
Registriert: 09.10.2004

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

erstellt am: 12. Dez. 2015 22: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

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

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