_

PLine3D->Spline->PLine3D

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

PLine3D->Spline->PLine3D

Postprzez MS_MS » kwi 11, 2019 21:39

Witam.
Używam czegoś takiego do zamiany poli3D do spline

; written by: Grrr
; Create Spline from 2D/3D Polyline, and match the closed status:
(defun C:Pline2Spline ;| credits to: Lee Mac |; ( / Get3DpolyVertices AddSpline e pLst spl )

(defun Get3DpolyVertices ( e / pLst )
(if (and (eq 'ENAME (type e)) (= "POLYLINE" (cdr (assoc 0 (entget e)))))
(reverse
(while (and (setq e (entnext e)) (/= "SEQEND" (cdr (assoc 0 (entget e)))))
(setq pLst (cons (cdr (assoc 10 (entget e))) pLst))
)
)
)
); defun Get3DpolyVertices

(defun AddSpline ( 3DPtLst / Spline )
(if
(and
(vl-consp 3DPtLst)
(vl-every (function (lambda (x) (and (vl-consp x) (= 3 (length x)) (apply 'and (mapcar 'numberp x))))) 3DPtLst)
); and
(setq Spline
(vla-AddSpline
(vlax-get (vla-get-ActiveDocument (vlax-get-acad-object))
(if (equal (getvar "CVPORT") 1) 'PaperSpace 'ModelSpace)
)
(vlax-safearray-fill
(vlax-make-safearray vlax-vbDouble (cons 0 (1- (length (apply 'append 3DPtLst)))))
(apply 'append 3DPtLst)
)
(vlax-3d-point '(0. 0. 0.))
(vlax-3d-point '(0. 0. 0.))
)
); setq Spline
); if
); defun AddSpline

(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
(setq e (car (entsel "\nPick a pline <exit>: ")))
(cond
((= 7 (getvar 'errno)) (princ "\nMissed, try again.") (setvar 'errno 0))
(e
(cond
((wcmatch (cdr (assoc 0 (entget e))) "~*POLYLINE") (princ "\nInvalid object."))
((= "POLYLINE" (cdr (assoc 0 (entget e))))
(and
(setq spl (AddSpline (Get3DpolyVertices e)))
(vla-put-Closed2 spl (vla-get-Closed (vlax-ename->vla-object e)))
(setvar 'errno 52)
); and
)
((= "LWPOLYLINE" (cdr (assoc 0 (entget e))))
(and
(setq pLst (mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= 10 (car x)))) (entget e))))
(if (= 2 (length (car pLst))) ; convert to 3D point list
(setq pLst (mapcar (function (lambda (x) (append x (list (cdr (assoc 38 (entget e))))))) pLst)) ; assoc 38, elevation
pLst
)
(setq spl (AddSpline pLst))
(vla-put-Closed2 spl (vla-get-Closed (vlax-ename->vla-object e)))
(setvar 'errno 52)
); and
)
); cond
); e
); cond
); while

);| defun Spline2Pline |; (vl-load-com) (princ)


Chciałbym to trochę poprawić a mianowicie:
1)Żeby splain sie pojawiał nie na aktualnej warstwie, ale na takiej samej warstwie co poli3D
2) Poli3D jest łamana, splain jest krzywą. Zależy mi, aby ten splain się przekształcał w poli3D (precision<10>)
3) Wzorcowy obiekt się usuwa

Robie to ręcznie wszystko, ale to zajmuje sporo czasu
MS_MS
 
Posty: 24
Dołączył(a): wrz 24, 2017 11:42

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot]