明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 884|回复: 12

[源码] 定距等分和定数等分曲线

[复制链接]
发表于 2024-7-13 14:16:24 | 显示全部楼层 |阅读模式
  1. ;---根据段数等分曲线,返回点表。
  2. (defun div-n-curve(obj n / d end palst pts)
  3.   (setq end(vlax-curve-getEndParam obj));---端点参数值
  4.   (setq d(/ end n));---求出每段的参数递进值
  5.   (setq palst nil)
  6.   (setq palst(cons end palst))
  7.   (while
  8.     (>(setq end(- end d))0)
  9.     (setq palst(cons end palst))
  10.   )
  11.   (if(not(vlax-curve-isClosed obj));---如果不是封闭曲线,就把起点参数值也加进去
  12.     (setq palst(cons 0 palst))
  13.   )
  14.   (setq pts(mapcar '(lambda(x)(vlax-curve-getPointAtParam obj x))palst))
  15. )
  16. ;---根据距离等分曲线,返回点表。
  17. (defun div-mm-curve(obj mm / len n pts sum)
  18.   (setq len(vlax-curve-getdistatparam obj(vlax-curve-getendparam obj)))
  19.   (setq n(fix(/ len mm)));---求出段数
  20.   (setq pts nil)
  21.   (setq pts(cons(vlax-curve-getStartPoint obj)pts));---起点加入到点表
  22.   (setq sum mm)
  23.   (repeat n
  24.     (setq pts(cons(vlax-curve-getPointAtDist obj sum)pts))
  25.     (setq sum(+ sum mm))
  26.   )
  27.   (if(not(vlax-curve-isClosed obj))
  28.     (setq pts(cons(vlax-curve-getEndPoint obj)pts));---如果不是封闭曲线,就把终点加入到点表
  29.   )
  30.   (reverse pts)
  31. )
因为不想用command命令,所以就临时写了个等分曲线的函数,分享给大家



另外,我本来想用这个方法获取属性,结果报错了
(setq len(vlax-get obj 'length));---获取曲线的长度

原因:ActiveX 服务器返回错误: 未知名称: "LENGTH"

是哪里用错了吗?类似的还有
(vlax-get obj 'startpoint);---获取曲线的起点
(vlax-get obj 'endpoint);---获取曲线的终点

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-7-15 09:36:13 | 显示全部楼层
本帖最后由 aws 于 2024-7-15 09:38 编辑
tryhi 发表于 2024-7-15 09:24
一般曲线转折线不是看切线角度决定疏密的吗?比如半径很大拐弯很缓加点较疏,半径小拐弯急加点较密

你说的这种情况,我觉得不是用角度来判断,而是用弦高来判断,这种方式可以更加准确的把样条曲线转换成多段线。且容差值等于弦高
发表于 2024-7-15 19:18:35 | 显示全部楼层
aws 发表于 2024-7-15 09:36
你说的这种情况,我觉得不是用角度来判断,而是用弦高来判断,这种方式可以更加准确的把样条曲线转换成多 ...

好像有点道理,不知道CAD转SHP是不是用的弦高
发表于 2024-7-15 09:24:09 | 显示全部楼层
aws 发表于 2024-7-14 21:41
没有呢,没遇到这种场景

一般曲线转折线不是看切线角度决定疏密的吗?比如半径很大拐弯很缓加点较疏,半径小拐弯急加点较密
发表于 2024-7-13 17:01:37 | 显示全部楼层
(setq obj (vlax-ename->vla-object en))?
(setq OBJ  (vla-get-activeselectionset DOC))?哪个obj
发表于 2024-7-13 21:34:21 | 显示全部楼层
怎么用?举个栗子。
发表于 2024-7-13 22:09:32 | 显示全部楼层
发表于 2024-7-14 13:56:58 | 显示全部楼层
有没有定角度分的?
 楼主| 发表于 2024-7-14 21:41:20 | 显示全部楼层
tryhi 发表于 2024-7-14 13:56
有没有定角度分的?

没有呢,没遇到这种场景
 楼主| 发表于 2024-7-14 21:42:28 | 显示全部楼层
qazxswk 发表于 2024-7-13 21:34
怎么用?举个栗子。

我是用来(setq ss(ssget “cp” pts))
发表于 2024-7-14 22:24:43 | 显示全部楼层
aws 发表于 2024-7-14 21:42
我是用来(setq ss(ssget “cp” pts))

:lo节点精度不够吗,搞这么密的点集
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-24 11:31 , Processed in 0.170023 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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