样条曲线表示任意图形
在AutoCAD中,对于一个任意图形(如直线、圆弧、多段线、样条曲线等组合),能否用样条曲线把这个图形统一表示出来???请求大家指点!!!http://space.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 Jully的微博 本帖最后由 mandala 于 2011-4-15 21:44 编辑
如果这个图形是连续的话,可以将其连成一条多段线。用样条曲线的话,我好像只能想到用多段线相连后,再每隔一个小单位长度取一个点,然后连起来。但用样条曲线连线,会使图形失真。有必要去这么连吗? 本帖最后由 mandala 于 2011-4-15 21:39 编辑
可以参考一下我写的一个lsp,其中连线的模糊距离设置为0.1,你可按需要修改。
;;子程序,将输入选择集ssp中的LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE,
;;如果其中有首尾相连的线,则连接成一条LWPOLYLINE,
;;最后返回一个名为xss的选择集。
(defun connectbypline (ssp / a xss xn ent)
(acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
;;加载flatten函数
(setq a 0
xss (ssadd)
) ;_ 结束setq
(if
(and (= (sslength ssp) 1)
(or (= (cdr (assoc 0 (entget (ssname ssp 0)))) "LWPOLYLINE")
(= (cdr (assoc 0 (entget (ssname ssp 0)))) "POLYLINE")
) ;_ 结束or
) ;_ 结束and
(ssadd (ssname ssp 0) xss)
;;当选中的仅有一条pline的时候另作处理。
(progn
;;如果有很多图元的话,全部变成pline并加入选择集xss:
(repeat (sslength ssp)
(setq xn (ssname ssp a))
(setq ent (entget xn))
(cond
((= (cdr (assoc 0 ent)) "LWPOLYLINE")
(ssadd xn xss)
)
((= (cdr (assoc 0 ent)) "POLYLINE")
(ssadd xn xss)
)
((= (cdr (assoc 0 ent)) "LINE")
(command "pedit" xn "y" "")
(setq xn (entlast))
(ssadd xn xss)
)
((= (cdr (assoc 0 ent)) "SPLINE")
(setq ss (ssadd))
(ssadd xn ss)
(acet-flatn ss nil)
(setq xn (entlast))
(ssadd xn xss)
)
((= (cdr (assoc 0 ent)) "ARC")
(command "pedit" xn "y" "")
(setq xn (entlast))
(ssadd xn xss)
)
((= (cdr (assoc 0 ENT)) "CIRCLE")
;;圆的处理比较复杂
(setq cp (cdr (assoc 10 ent))
r(cdr (assoc 40 ent))
) ;_ 结束setq
(entmake
(setq lst (list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
'(100 . "AcDbPolyline")
'(90 . 2)
'(70 . 129)
(cons 10 (polar cp 0 r))
'(40 . 0)
'(41 . 0)
'(42 . -1)
(cons 10 (polar cp pi r))
'(40 . 0)
'(41 . 0)
'(42 . -1)
);list
) ;setq
) ;entmake
(command "_matchprop" xn (entlast) "")
(entdel xn)
(setq xn (entlast))
(ssadd xn xss)
)
) ;cond
(setq a (+ a 1))
) ;repeat,以上将每个图元都变成pline并加入了选择集。
(command "pedit" "m" xss "" "j" 0.1 "")
;;把能连的连上。
(setq xss xss)
) ;progn
) ;if
) ;_ 结束defun
本帖最后由 raimo 于 2011-4-16 07:17 编辑
直接多段线闭合选择范围就好啦,样条曲线点数太多,如果用自动的更难保证合适的分段数
页:
[1]