乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 22|回复: 5

[编程交流] 指向ano内部或外部

[复制链接]

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 07:30:40 | 显示全部楼层 |阅读模式
你好我如何知道一个点是在另一个实体的内部还是外部:圆、矩形、多段线、样条线。。。。
当做
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:45:37 | 显示全部楼层
  1. (defun GroupByNum ( lst n / r)
  2. (if lst
  3.    (cons
  4.      (reverse (repeat n (setq r (cons (car lst) r) lst (cdr lst)) r))
  5.      (GroupByNum lst n)
  6.    )
  7. )
  8. )
  9. (defun ptonline ( pt pt1 pt2 / vec12 vec1p d result )
  10. (setq vec12 (mapcar '- pt2 pt1))
  11. (setq vec12 (reverse (cdr (reverse vec12))))
  12. (setq vec1p (mapcar '- pt pt1))
  13. (setq vec1p (reverse (cdr (reverse vec1p))))
  14. (setq vec2p (mapcar '- pt2 pt))
  15. (setq vec2p (reverse (cdr (reverse vec2p))))
  16. (setq d (distance '(0.0 0.0) vec12) d1 (distance '(0.0 0.0) vec1p) d2 (distance '(0.0 0.0) vec2p))
  17. (if (equal d (+ d1 d2) 1e- (setq result T) (setq result nil))
  18. result
  19. )
  20. (defun ptinsideent ( pt ent / msp ptt xlin int k kk tst result )
  21. (vl-load-com)
  22. (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  23. (setq ptt (vlax-curve-getclosestpointto ent pt))
  24. (setq xlin (vla-addxline msp (vlax-3d-point pt) (vlax-3d-point ptt)))
  25. (setq int (GroupByNum (vlax-invoke (if (eq (type ent) 'ENAME) (vlax-ename->vla-object ent)) 'intersectwith xlin acExtendBoth) 3))
  26. (setq int (vl-sort int '(lambda (a b) (< (vlax-curve-getparamatpoint xlin a) (vlax-curve-getparamatpoint xlin b)))))
  27. (setq k 0)
  28. (while (< (setq k (1+ k)) (length int))
  29.    (if (and (eq (rem k 2) 1) (ptonline pt (nth (- k 1) int) (nth k int))) (setq tst (cons T tst)) (setq tst (cons nil tst)))
  30. )
  31. (setq tst (reverse tst))
  32. (setq k 0)
  33. (mapcar '(lambda (x) (setq k (1+ k)) (if (eq x T) (setq kk k))) tst)
  34. (vla-delete xlin)
  35. (if kk
  36.    (if (eq (rem kk 2) 1) (setq result T) (setq result nil))
  37.    (setq result nil)
  38. )
  39. result
  40. )

 
  1. (ptinsideent pt ent) => T or nil

 
M、 R。
回复

使用道具 举报

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 07:55:21 | 显示全部楼层
你好,marko_ribar。效果很好。太棒了。非常感谢你。
回复

使用道具 举报

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 08:08:01 | 显示全部楼层
马尔科,有个小问题。当de点属于多段线时,不起作用。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:27:13 | 显示全部楼层
命令:(vl catch all apply’PTINSIDENT(list pt ent))
#
 
-pt位于ent上
-如果要返回T(pt位于ent上,可能不在ent内部或外部),请使用:
(vl-catch-all-error-p(vl catch all apply’PTINSIDENT(list pt ent)))
 
 
命令:(vl catch all apply’PTINSIDENT(list pt ent))
T
 
-pt在ent内
 
 
命令:(vl catch all apply’PTINSIDENT(list pt ent))

 
-pt在ent之外
 
  1. (if (vl-catch-all-error-p (vl-catch-all-apply 'ptinsideent (list pt ent)))
  2. (prompt "\nPoint is on entity")
  3. (if (ptisideent pt ent)
  4.    (prompt "\nPoint is inside entity")
  5.    (prompt "\nPoint is outside entity")
  6. )
  7. )
回复

使用道具 举报

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 08:39:16 | 显示全部楼层
非常感谢你,马尔科。现在它工作得很好。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 04:27 , Processed in 0.414883 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表