定距等分和定数等分曲线
;---根据段数等分曲线,返回点表。(defun div-n-curve(obj n / d end palst pts)
(setq end(vlax-curve-getEndParam obj));---端点参数值
(setq d(/ end n));---求出每段的参数递进值
(setq palst nil)
(setq palst(cons end palst))
(while
(>(setq end(- end d))0)
(setq palst(cons end palst))
)
(if(not(vlax-curve-isClosed obj));---如果不是封闭曲线,就把起点参数值也加进去
(setq palst(cons 0 palst))
)
(setq pts(mapcar '(lambda(x)(vlax-curve-getPointAtParam obj x))palst))
)
;---根据距离等分曲线,返回点表。
(defun div-mm-curve(obj mm / len n pts sum)
(setq len(vlax-curve-getdistatparam obj(vlax-curve-getendparam obj)))
(setq n(fix(/ len mm)));---求出段数
(setq pts nil)
(setq pts(cons(vlax-curve-getStartPoint obj)pts));---起点加入到点表
(setq sum mm)
(repeat n
(setq pts(cons(vlax-curve-getPointAtDist obj sum)pts))
(setq sum(+ sum mm))
)
(if(not(vlax-curve-isClosed obj))
(setq pts(cons(vlax-curve-getEndPoint obj)pts));---如果不是封闭曲线,就把终点加入到点表
)
(reverse pts)
)因为不想用command命令,所以就临时写了个等分曲线的函数,分享给大家
另外,我本来想用这个方法获取属性,结果报错了
(setq len(vlax-get obj 'length));---获取曲线的长度
原因:ActiveX 服务器返回错误: 未知名称: "LENGTH"
是哪里用错了吗?类似的还有
(vlax-get obj 'startpoint);---获取曲线的起点
(vlax-get obj 'endpoint);---获取曲线的终点
本帖最后由 aws 于 2024-7-15 09:38 编辑
tryhi 发表于 2024-7-15 09:24
一般曲线转折线不是看切线角度决定疏密的吗?比如半径很大拐弯很缓加点较疏,半径小拐弯急加点较密
你说的这种情况,我觉得不是用角度来判断,而是用弦高来判断,这种方式可以更加准确的把样条曲线转换成多段线。且容差值等于弦高 aws 发表于 2024-7-15 09:36
你说的这种情况,我觉得不是用角度来判断,而是用弦高来判断,这种方式可以更加准确的把样条曲线转换成多 ...
好像有点道理,不知道CAD转SHP是不是用的弦高 aws 发表于 2024-7-14 21:41
没有呢,没遇到这种场景
一般曲线转折线不是看切线角度决定疏密的吗?比如半径很大拐弯很缓加点较疏,半径小拐弯急加点较密 (setq obj (vlax-ename->vla-object en))?
(setq OBJ(vla-get-activeselectionset DOC))?哪个obj 怎么用?举个栗子。 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=22181&highlight=%BB%F1%C8%A1%C7%FA%CF%DF%B3%A4%B6%C8
善用搜索 有没有定角度分的? 谢谢分享。 tryhi 发表于 2024-7-14 13:56
有没有定角度分的?
没有呢,没遇到这种场景 qazxswk 发表于 2024-7-13 21:34
怎么用?举个栗子。
我是用来(setq ss(ssget “cp” pts)) aws 发表于 2024-7-14 21:42
我是用来(setq ss(ssget “cp” pts))
:lo节点精度不够吗,搞这么密的点集
页:
[1]
2