;多义线模拟样条曲线,因为用的是直线模拟,所以样条曲线上曲率半径较小的部位
;可能模拟得不够好.解决方法是尽量取小的步长.最好还是用ET工具栏里的flatten,
;它对这个问题的处理是转换为圆弧.
;made by 铁甲蚂蚁
(defun c:zz (/ en dist obj plist len sn n)
(princ "nSPline->Pline")
(vl-load-com)
(while (not (and (setq en (entsel "n指定样条曲线:"))
(ssget (cadr en) '((0 . "SPLINE")))
)
)
)
(setq dist (getreal "n指定步长:"))
(setq obj (vlax-ename->vla-object (car en)))
(setq plist (cons (vlax-curve-getstartpoint obj) '()))
(setq len
(vlax-curve-getdistatparam obj (vlax-curve-getendparam obj))
)
(setq sn (fix (/ len dist)))
(setq n 0)
(repeat sn
(setq plist (cons (vlax-curve-getpointatdist obj (* (setq n (1+ n)) dist))
plist
)
)
)
(if (< sn (/ len dist))
(setq plist (reverse (cons (vlax-curve-getendpoint obj) plist)))
)
(setq sn (length plist))
(setq n -1)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(command "pline")
(repeat sn (command (nth (setq n (1+ n)) plist)))
(command "")
(setvar "osmode" os)
(princ)
) |