明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2021|回复: 6

点取矩形或多边形的某一边,或点取多段线的某一段,就得到该边或该段的长度,代码怎么

[复制链接]
发表于 2012-10-24 16:19:29 | 显示全部楼层 |阅读模式
lisp学的不精,想问下,点取矩形或多边形的某一边,或点取多段线的某一段,就得到该边或该段的长度,代码怎么写?谢
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-10-24 17:21:41 | 显示全部楼层
(defun test ()
(setq ent (entsel))
(setq en (car ent) pt (cadr ent))
(setq pa (vlax-curve-getParamAtPoint (vlax-ename->vla-object en) (vlax-curve-getClosestPointTo (vlax-ename->vla-object en) pt)))
(setq n (fix pa))
(setq dist1 (vlax-curve-getDistAtParam (vlax-ename->vla-object en) (fix pa)))
(setq dist2 (vlax-curve-getDistAtParam (vlax-ename->vla-object en) (1+ (fix pa))))
(setq dist (- dist2 dist1))
(setq pt1 (vlax-curve-getpointAtParam (vlax-ename->vla-object en) (fix pa))
      pt2 (vlax-curve-getpointAtParam (vlax-ename->vla-object en) (1+ (fix pa))))
(command "dimaligned" pt1 pt2 (polar pt1 (+ (* 0.5 pi) (angle pt1 pt2)) (* 0.2 dist)))
      dist
      )
 楼主| 发表于 2012-10-24 19:35:33 | 显示全部楼层
谢谢byghbcx,程序非常很好,连标注都标出来了。但是我忘了说了,点击用line命令画的单条直线就不行,能改怎么改啊?
发表于 2012-10-25 07:46:44 | 显示全部楼层
用len命令就可知道线段长度
发表于 2012-10-25 10:11:58 | 显示全部楼层
优化了一下,支持直线、圆弧
(defun test (/ ent en pt pa dist1 dist2 pt1 pt2 bu dist);点取多段线的某一段,就得到该边或该段的长度标注,支持直线,圆弧
(while (setq ent (entsel))
(setq en (car ent) pt (cadr ent))
(cond
   ((wcmatch (cdr (assoc 0 (entget en))) "*LINE")
(setq pa (vlax-curve-getParamAtPoint (vlax-ename->vla-object en) (vlax-curve-getClosestPointTo (vlax-ename->vla-object en) pt)))
  (setq dist1 (vlax-curve-getDistAtParam (vlax-ename->vla-object en) (fix pa)))
(setq dist2 (vlax-curve-getDistAtParam (vlax-ename->vla-object en) (1+ (fix pa))))
(setq dist (- dist2 dist1))
(setq pt1 (vlax-curve-getpointAtParam (vlax-ename->vla-object en) (fix pa))
       pt2 (vlax-curve-getpointAtParam (vlax-ename->vla-object en) (1+ (fix pa))))
(if (= (cdr (assoc 0 (entget en))) "LINE")
    (setq pt1 (vlax-curve-getStartPoint (vlax-ename->vla-object en))
          pt2 (vlax-curve-getEndPoint (vlax-ename->vla-object en))
          dist (distance pt1 pt2)
          bu 0
   )
   (setq bu (vla-getbulge (vlax-ename->vla-object en) (fix pa)))
    )
(if (/= bu 0) (command "dimangular"  pt "t" (rtos dist 2 2)
                       (if (< bu 0) (polar pt1 (+ (* 0.5 pi) (angle pt1 pt2)) (* 0.2 dist)) (polar pt1 (+ (* 0.5 pi) (angle pt2 pt1)) (* 0.2 dist))))
(command "dimaligned" pt1 pt2 (polar pt1 (+ (* 0.5 pi) (angle pt1 pt2)) (* 0.2 dist))))
    )
    ((= (cdr (assoc 0 (entget en))) "ARC")
    (setq pt1 (vlax-curve-getStartPoint (vlax-ename->vla-object en))
          pt2 (vlax-curve-getEndPoint (vlax-ename->vla-object en))
          dist (vla-get-arclength (vlax-ename->vla-object en))
   )
      (command "dimangular"  pt "t" (rtos dist 2 2)
               (if (> bu 0) (polar pt1 (+ (* 0.5 pi) (angle pt1 pt2)) (* 0.2 dist)) (polar pt1 (+ (* 0.5 pi) (angle pt2 pt1)) (* 0.2 dist))))
    )
   )
       dist
       )
  )
 楼主| 发表于 2012-10-25 18:48:11 | 显示全部楼层
谢谢,完美解决了我问题,试用了一下,感觉不错!
发表于 2012-10-28 21:36:19 来自手机 | 显示全部楼层
这个很实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-6 04:08 , Processed in 0.129721 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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