jdhszh 发表于 2008-11-3 21:13:00

加了一行已经不会少一点了,只是希望楼主能够完善,比如重画出的线宽、高程、颜色等要和原来的一致,画完线还要把原来的线删掉
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)
)

zxdcad 发表于 2008-11-4 07:59:00

<p>用定数/定距等分对任意线等分得到需要的点,然后将这些点坐标输出即可。</p><p>这样精度可以自控,简单实用。</p>

luyu9635 发表于 2008-11-30 16:31:00

谢谢各位的指点,又改了一下,如果是圆弧可以描得一样,用了pl-a-s

kighton 发表于 2009-1-11 22:11:00

<p>感谢楼主,但是对圆形好像无效啊?有没有办法?</p>

Student 发表于 2009-1-12 07:29:00

<p>将曲线,包括折线光滑后的曲线,转换为折线的难点在点的合理分布,即直线段与原曲线的最大偏差满足要求且大致相等,而不是等距分布。</p><p>至于圆和圆弧,直接按满足精度的的角度差取点即可。</p><p></p>

爱丁保 发表于 2009-2-24 23:24:00

本帖最后由 作者 于 2009-2-24 23:30:07 编辑

其实在CASS6.0以上版本里,已集成了spline-&gt;复合线功能,使用方面偏差较少,就是不知源码怎样?

爱丁保 发表于 2009-4-3 01:32:00

又路过,顶上一次

ltrliu 发表于 2015-5-17 15:36:57

新人学习了

dabingrain 发表于 2016-7-9 19:10:29

我利用这个程序作了个遮盖,谢谢
页: 1 [2]
查看完整版本: [求助][原创]曲线转多段线