明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 877|回复: 3

[源码] 一条多段线上任意一点距起点的长度 ,请大神,帮忙测试完善。

[复制链接]
发表于 2016-10-10 17:01:24 | 显示全部楼层 |阅读模式
现在我想知道每个端点(各个pline、arc、line的端点)距离起点的长度的数值,(选择是否颠倒起点与终点,默认不做调整)并且自动标注到excel当前单元格内。现在已经完成了查询部分,后面部分请大神帮忙完成,谢谢。





(defun C:test ( / &dis1 &k1 &n1 &p1 &ss1)
(if (null vlax-dump-object) (vl-load-com) )
(setq &ss1 '("LINE" "LWPOLYLINE" "CIRCLE" "ARC" "HELIX" "ELLIPSE" "SPLINE" "POLYLINE"))
;曲线有起点:直线,多段线,圆,圆弧,螺旋对象,椭圆,样条曲线,二维多段线
(if (and
  (setq &k1 (entsel "\n请选择曲线"))
  (setq &k1 (car &k1))
  (member (cdr (assoc 0 (entget &k1))) &ss1);确认是曲线
  (setq &p1 (getpoint "\n请选择指定点"))
  (setq &p1 (vlax-curve-getclosestpointto &k1 &p1));取得最近点
  (setq &n1 (vlax-curve-getParamAtPoint &k1 &p1));取得参数
  (setq &dis1 (vlax-curve-getDistAtParam &k1 &n1));到起点距离
     )

 楼主| 发表于 2016-10-11 22:38:12 | 显示全部楼层
,大神出来帮帮忙,再次感谢!
 楼主| 发表于 2016-10-18 15:30:35 | 显示全部楼层
大神出来帮帮忙,再次感谢!
发表于 2017-8-19 08:29:15 | 显示全部楼层
本帖最后由 xyccf 于 2017-8-19 08:32 编辑

可惜,现在回答估计你也用不上了,想了想还是留给后来人吧^_^
  1. ;获得两个选择集的交集
  2. (defun ssinter (ss1 ss2)
  3. (vl-cmdf "_.select" ss1 "r" ss2 "")
  4. (setq ss (ssget "P"))
  5. (vl-cmdf "_.select" ss1 "r" ss "")
  6. (ssget "P")
  7. )
  8. ;线上测距 by xyccf
  9. (defun c:qds (/ pt1 pt2 ss1 ss2 ss obj dist)
  10.   (setq pt1 (getpoint "选择曲线上一点: ")
  11.         pt2 (getpoint pt1 "\n选择曲线另上一点: ")
  12.   )
  13.   (setq ss1 (ssget "c" pt1 pt1)
  14.   ss2 (ssget "c" pt2 pt2)
  15.   ss (ssinter ss1 ss2)
  16.   )
  17.   (if (or (< (sslength ss) 0) (> (sslength ss) 1)) (exit))
  18.   (setq obj (vlax-ename->vla-object  (ssname ss 0)))
  19.   (setq dist (abs (- (vlax-curve-getDistAtPoint obj pt1) (vlax-curve-getDistAtPoint obj pt2))))
  20.   (princ (strcat "\n曲线上两点距离为:" (rtos dist 2 4)))
  21.   (princ)
  22. )

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 02:06 , Processed in 0.162187 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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