明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: luyu9635

[求助][原创]曲线转多段线

    [复制链接]
发表于 2008-11-3 21:13 | 显示全部楼层
  1. 加了一行已经不会少一点了,只是希望楼主能够完善,比如重画出的线宽、高程、颜色等要和原来的一致,画完线还要把原来的线删掉
  2. defun c:ee ()    ;任意曲线变多段线一般只用于椭圆;圆弧和样条曲线
  3.   (VL-LOAD-COM)(setvar "cmdecho" 0)
  4.   (setq ss (ssget '((0 . "ARC,SPLINE,ELLIPSE,*POLYLINE"))))
  5.   (setq lenss (sslength ss)
  6. i     0 eelist '()
  7.   )
  8.   (repeat lenss;外循环开始
  9.     (setq en  (ssname ss i);取得图元名
  10.    obj (vlax-ename->vla-object en);转换为vla对象
  11.     )
  12.     (setq wide(vla-get-ConstantWidth obj))
  13.     (setvar "PLINEWID" WIDE)
  14.     (setq zc (vlax-curve-getdistatparam
  15.         obj
  16.         (vlax-curve-getendparam obj)
  17.       );求得图元周长
  18.    ;;;或者(setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))
  19.     )
  20.     (setq j(- zc (fix zc)));取出周长的小数值
  21.     (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点
  22.     (repeat (fix zc);循环周长取整次刚好到端点
  23.       (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
  24.      lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
  25.       )
  26.       (setq
  27.    eelist (append eelist (list (list (nth 0 lst) (nth 1 lst))));加入到点集
  28.       )
  29.       (setq j (1+ j));递增1
  30.     );内循环结束
  31.     ;(setq eelist(reverse eelist))
  32.     (setq lst2(vlax-curve-getEndPoint obj))
  33.     (setq
  34.    eelist (append eelist (list (list (nth 0 lst2) (nth 1 lst2))));加入到点集
  35.       )
  36.     (command ".pline" "non" lst1);开始描点
  37.     (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红
  38.     (COMMAND "" );描点结束
  39.     (setq eelist '());清空点集
  40.     (setq i (1+ i));下一个图元
  41.   );外循环结束
  42.   (princ)(princ)
  43. )
发表于 2008-11-4 07:59 | 显示全部楼层

用定数/定距等分对任意线等分得到需要的点,然后将这些点坐标输出即可。

这样精度可以自控,简单实用。

 楼主| 发表于 2008-11-30 16:31 | 显示全部楼层
谢谢各位的指点,又改了一下,如果是圆弧可以描得一样,用了pl-a-s

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-1-11 22:11 | 显示全部楼层

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

发表于 2009-1-12 07:29 | 显示全部楼层

将曲线,包括折线光滑后的曲线,转换为折线的难点在点的合理分布,即直线段与原曲线的最大偏差满足要求且大致相等,而不是等距分布。

至于圆和圆弧,直接按满足精度的的角度差取点即可。

发表于 2009-2-24 23:24 | 显示全部楼层
本帖最后由 作者 于 2009-2-24 23:30:07 编辑

其实在CASS6.0以上版本里,已集成了spline->复合线功能,使用方面偏差较少,就是不知源码怎样?
发表于 2009-4-3 01:32 | 显示全部楼层
又路过,顶上一次
发表于 2015-5-17 15:36 | 显示全部楼层
新人学习了
发表于 2016-7-9 19:10 | 显示全部楼层
我利用这个程序作了个遮盖,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-22 04:36 , Processed in 0.132645 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表