明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 925|回复: 4

[提问] 求大神帮我把定数等分改为定距等分

[复制链接]
发表于 2018-8-16 14:32 | 显示全部楼层 |阅读模式
求大神帮我把定数等分改为定距等分  谢谢了


(defun c:test ()
  (setq a (car (entsel "\n选择多义线: ")))
  (setq num (getint "\n分段数: "))
  (vl-cmdf "divide" a num)
  (setq pp (ssget "x" '((0 . "POINT"))))
  (setq n 0)
  (while (< n (sslength pp))
    (setq pt (cdr (assoc 10 (entget (ssname pp n)))))
    (vl-cmdf "break" (list a pt) pt)
    (setq n (1+ n))
  )
)

发表于 2018-8-16 23:16 | 显示全部楼层
;;;定距的话,函数“divide” 是等分的,那除非你要分的多义线的长度是你定距的整数倍哦。
;;;所以思路就是把你要等分的曲线长度除以你要等分的长度的余数长度先cut掉哦!


(defun c:test2 ()
  (vl-load-com)
  (setq a (car (entsel "\n选择多义线: ")))
  (command "list" a "")
  (setq total_length (getvar "PERIMETER")) ;;;多义线总长
  (setq dis (getreal "\n分段距离: "))  
  (setq rem_num (rem total_length dis)) ;;;整除指定长度后得到的余数
  (setq splineObj (vlax-ename->vla-object a))
  (setq cut_point (vlax-curve-getPointAtDist splineObj rem_num)) ;;;从一个端点起把余数长度点裁切点找到
  (vl-cmdf "break" (list a cut_point) cut_point);;;裁掉多义线的余数长度
  (setq num (/ (- total_length rem_num) dis)) ;;;多义线剩下的长度就能够整除你指定的长度,并求出等分数,剩下的就是你自己的程序了,虽然我并不知道你这程序有什么用…………
  (vl-cmdf "divide" a num)
  (setq pp (ssget "x" '((0 . "POINT"))))
  (setq n 0)
  (while (< n (sslength pp))
    (setq pt (cdr (assoc 10 (entget (ssname pp n)))))
    (vl-cmdf "break" (list a pt) pt)
    (setq n (1+ n))
  )
)

;;;;测试了一下除直线之外的都能用这个方式找到裁切余数长度的点 可能是因为这个函数vlax-curve-getPointAtDist只能得到曲线上的点
;;;;;其实直线上的裁剪点也能用别的方式找到从一个端点走裁切的余数长度,方向就是直线的角度。用(polar)函数,一样的,你自己去研究下喽
;;;只是提供下思路,不知道是不是你想要的,相互学习下!
发表于 2018-8-17 08:32 | 显示全部楼层
divide-->measure
 楼主| 发表于 2019-4-11 12:43 | 显示全部楼层
jin1114 发表于 2018-8-16 23:16
;;;定距的话,函数“divide” 是等分的,那除非你要分的多义线的长度是你定距的整数倍哦。
;;;所以思路就 ...

谢谢  这个虽然不是我要的 还是谢谢你了  好久没来论坛了 不好意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 05:47 , Processed in 0.230803 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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