乐筑天下

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

[编程交流] 多边形内部或外部的点

[复制链接]

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 07:23:15 | 显示全部楼层 |阅读模式
你好我需要知道一个点是在多段线的内部还是外部。非常感谢。Punto dentro o fuera de Polilina。图纸
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:32:44 | 显示全部楼层
我相信你说的是闭合多段线。一种解决方案是尝试使用该点调用边界命令,并检查图形中的最后一个图元。如果添加了新的多段线,则在基准多段线内拾取。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:38:35 | 显示全部楼层
试试这个。。。。
 
  1.    (defun c:Test (/ p1 p2 gr)
  2.    ;;;;; Tharwat 28. June. 2012 ;;;;;
  3.     (if (and (setq p1 (getpoint "\n Specify point :"))
  4.              (setq p2 (getcorner p1 "\n Corner :"))
  5.         )
  6.       (while (eq (car (setq gr (grread t 15 1))) 5) (redraw)
  7.         (foreach n '((0.5 0.5 0.0) (-0.5 0.5 0.0)(-0.5 -0.5 0.0)(0.5 -0.5 0.0))
  8.           (grdraw
  9.             (cadr gr)
  10.             (mapcar '+ (mapcar (function (lambda (x) (* x (/ (getvar "VIEWSIZE") 25.))))
  11.                 (trans n 1 0))
  12.               (cadr gr)
  13.             )
  14.             1
  15.             0
  16.           )
  17.         )
  18.    
  19.         (if
  20.           (and
  21.             (< (car p1) (car (cadr gr)))
  22.             (> (car p2) (car (cadr gr)))
  23.             (> (cadr p1) (cadr (cadr gr)))
  24.             (< (cadr p2) (cadr (cadr gr)))
  25.           )
  26.            (princ "\n inside ...... ")
  27.            (princ "\n outside ..... ")
  28.         )
  29.       )
  30.     )
  31.     (redraw)
  32.     (princ)
  33.    )
  34.    
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:44:17 | 显示全部楼层
您可以根据自己的代码对其进行调整:
  1. (defun c:TestPick( / refEntity thePoint )
  2. (setq refEntity (entlast))
  3. (setq thePoint (getpoint "\nPick a point:"))
  4. (command "_BOUNDARY" thePoint "")
  5. (if (equal refEntity (entlast))
  6. (prompt "\nPicked outside!")
  7. (progn
  8.   (prompt "\nPicked inside!")
  9.   (entdel (entlast))
  10. )
  11. )
  12. (princ)
  13. )
回复

使用道具 举报

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 07:49:19 | 显示全部楼层
谢谢你们俩。太棒了。谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:52:15 | 显示全部楼层
以下是我的方法:
 
  1. [color=GREEN];; Point Inside-p  -  Lee Mac[/color]
  2. [color=GREEN];; Utilises a ray-casting algorithm to determine whether a[/color]
  3. [color=GREEN];; given point (WCS) resides within a supplied object.[/color]
  4. ([color=BLUE]defun[/color] LM:PointInside-p ( pt obj [color=BLUE]/[/color] lst ray )
  5.    ([color=BLUE]setq[/color] lst
  6.        ([color=BLUE]vlax-invoke[/color]
  7.            ([color=BLUE]setq[/color] ray
  8.                ([color=BLUE]vla-addray[/color]
  9.                    ([color=BLUE]vla-objectidtoobject[/color] ([color=BLUE]vla-get-document[/color] obj) ([color=BLUE]vla-get-ownerid[/color] obj))
  10.                    ([color=BLUE]vlax-3D-point[/color] pt)
  11.                    ([color=BLUE]vlax-3D-point[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] pt '(1.0 0.0 0.0)))
  12.                )
  13.            )
  14.            'intersectwith obj [color=BLUE]acextendnone[/color]
  15.        )
  16.    )
  17.    ([color=BLUE]vla-delete[/color] ray)
  18.    ([color=BLUE]=[/color] 1 ([color=BLUE]logand[/color] 1 ([color=BLUE]length[/color] lst)))
  19. )

 
要测试:
  1. ([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] ent obj pnt )
  2.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] ent ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=MAROON]"\nSelect Polyline: "[/color])))
  3.        ([color=BLUE]if[/color] ([color=BLUE]vlax-method-applicable-p[/color] ([color=BLUE]setq[/color] obj ([color=BLUE]vlax-ename->vla-object[/color] ent)) 'intersectwith)
  4.            ([color=BLUE]while[/color] ([color=BLUE]setq[/color] pnt ([color=BLUE]getpoint[/color] [color=MAROON]"\nPick Point: "[/color]))
  5.                ([color=BLUE]if[/color] (LM:PointInside-p ([color=BLUE]trans[/color] pnt 1 0) obj)
  6.                    ([color=BLUE]alert[/color] [color=MAROON]"Point is INSIDE"[/color])
  7.                    ([color=BLUE]alert[/color] [color=MAROON]"Point is OUTSIDE"[/color])
  8.                )
  9.            )
  10.            ([color=BLUE]princ[/color] [color=MAROON]"\nInvalid Object selected."[/color])
  11.        )
  12.    )
  13.    ([color=BLUE]princ[/color])
  14. )
  15. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])

 
对于投影光线平行于相交边缘的情况,可能需要进行更严格的测试。但上述内容足以满足大多数一般应用。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:56:45 | 显示全部楼层
 
我喜欢它
 
谢谢分享。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:03:33 | 显示全部楼层
我相信我已经回答了这个话题,是你robierzo。。。
 
http://www.cadtutor.net/forum/showthread.php?72815-指向另一个实体的内部或外部
 
M、 R。
回复

使用道具 举报

31

主题

95

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2022-7-6 08:11:57 | 显示全部楼层
李,太棒了。对我来说太复杂了。谢谢分享,塔瓦特,姆萨苏,李Mac。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:12:57 | 显示全部楼层
 
不客气
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:25 , Processed in 0.615704 second(s), 72 queries .

© 2020-2025 乐筑天下

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