defun c:ee () ;任意曲线变多段线一般只用于椭圆;圆弧和样条曲线
(VL-LOAD-COM)(setvar "cmdecho" 0)
(setq ss (ssget '((0 . "ARC,SPLINE,ELLIPSE,*POLYLINE"))))
(setq lenss (sslength ss)
i 0 eelist '()
)
(repeat lenss;外循环开始
(setq en(ssname ss i);取得图元名
obj (vlax-ename->vla-object en);转换为vla对象
)
(setq wide(vla-get-ConstantWidth obj))
(setvar "PLINEWID" WIDE)
(setq zc (vlax-curve-getdistatparam
obj
(vlax-curve-getendparam obj)
);求得图元周长
;;;或者(setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))
)
(setq j(- zc (fix zc)));取出周长的小数值
(setq lst1(vlax-curve-getPointAtDist obj 0));取开始点
(repeat (fix zc);循环周长取整次刚好到端点
(setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
)
(setq
eelist (append eelist (list (list (nth 0 lst) (nth 1 lst))));加入到点集
)
(setq j (1+ j));递增1
);内循环结束
;(setq eelist(reverse eelist))
(setq lst2(vlax-curve-getEndPoint obj))
(setq
eelist (append eelist (list (list (nth 0 lst2) (nth 1 lst2))));加入到点集
)
(command ".pline" "non" lst1);开始描点
(foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红
(COMMAND "" );描点结束
(setq eelist '());清空点集
(setq i (1+ i));下一个图元
);外循环结束
(princ)(princ)
)
<p>用定数/定距等分对任意线等分得到需要的点,然后将这些点坐标输出即可。</p><p>这样精度可以自控,简单实用。</p> 谢谢各位的指点,又改了一下,如果是圆弧可以描得一样,用了pl-a-s <p>感谢楼主,但是对圆形好像无效啊?有没有办法?</p> <p>将曲线,包括折线光滑后的曲线,转换为折线的难点在点的合理分布,即直线段与原曲线的最大偏差满足要求且大致相等,而不是等距分布。</p><p>至于圆和圆弧,直接按满足精度的的角度差取点即可。</p><p></p> 本帖最后由 作者 于 2009-2-24 23:30:07 编辑
其实在CASS6.0以上版本里,已集成了spline->复合线功能,使用方面偏差较少,就是不知源码怎样? 又路过,顶上一次 新人学习了 我利用这个程序作了个遮盖,谢谢
页:
1
[2]