明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: yxp

[讨论]如何判断某点是否在一个封闭的区域内?

  [复制链接]
发表于 2009-9-6 10:18 | 显示全部楼层

水平有限,不敢随便参与讨论,看高人的帖看不太明白,斗胆想了一个苯办法发上来,不知可行否

(defun c:test()
 (while (setq p (getpoint"\n拾取点"))
   (command "BOUNDARY" "A" "O" "R" "I" "N" "" ""  p "")
    (if (= (GETVAR "LASTPROMPT") "已创建 0 个面域。")
     (prompt  "点在外面")
     (progn
     (command "erase"(entlast) "")
     (prompt "点在里面")
     )
   )
 )
 )

发表于 2009-9-6 12:25 | 显示全部楼层

11楼办法不行

boundary本来就经常找不到边界,自身还不完善,最好不要用

发表于 2009-9-6 12:37 | 显示全部楼层
killer9806发表于2009-9-5 21:55:00ZML84的,多边形范围点的判定有误,只要点在多边形的最小最大点之间,都提示包含在其中

可否给个示例?

发表于 2009-9-6 12:59 | 显示全部楼层
xhq1954425发表于2009-9-6 10:18:00水平有限,不敢随便参与讨论,看高人的帖看不太明白,斗胆想了一个苯办法发上来,不知可行否?(defun c:test()

这个行不通的。

发表于 2009-9-6 17:03 | 显示全部楼层
boundary 主要是风险大,平时用的时候都可能导致cad死机,因此不建议用
发表于 2009-9-6 22:02 | 显示全部楼层
谢谢高手指点!
 楼主| 发表于 2009-9-8 17:40 | 显示全部楼层
这个是在网上搜到的,已经不知道原作者是谁了。
  1. (defun c:ard(/ POG POIO POI closedptO closedpt DIS pog1 CIR AREA AREAN)
  2.   (vl-load-com)
  3.   (setvar "cmdecho" 0)
  4.   (SETQ pog (SSE '((0 . "*YLINE,SPLINE,CIRCLE,ELLIPSE")) "\n请选择测试区域边界线(平面曲线):"))
  5.   (if (and (WCMATCH (cdr (assoc 0 (entget pog))) "*YLINE,SPLINE")
  6.     (= (REM (cdr (assoc 70 (entget pog))) 2) 0))
  7.     (alert "所选曲线不闭合!")
  8.     (progn (setq poiO (GETPOINT "\n请选择测试点:"))
  9.       (COND ((WCMATCH (cdr (assoc 0 (entget pog))) "LWPOLYLINE")
  10.   (SETQ POI (LIST (CAR POIO) (CADR POIO) (vLA-GET-ELEATION (vlax-ename->vla-object POG)))))
  11. (T (SETQ POI (LIST (CAR POIO) (CADR POIO) (CADDDR (ASSOC 10 (ENTGET POG)))))))
  12.       (SETQ closedptO (vlax-curve-getclosestpointto (vlax-ename->vla-object pog) poiO)
  13.      closedpt  (vlax-curve-getclosestpointto (vlax-ename->vla-object pog) poi))
  14.       (if (= (DISTANCE poiO closedptO) 0)
  15. (alert "点在边界上!")
  16. (progn
  17.    (setq dis (* (DISTANCE poi closedpt) 0.5))
  18.    (vl-cmdf "copy" pog "" POI POI)
  19.    (vl-cmdf "region" (entlast) "")
  20.    (setq pog1 (entlast))
  21.    (vl-cmdf "CIRCLE" POI DIS "")
  22.    (vl-cmdf "region" (entlast) "")
  23.    (setq cir  (entlast) AREA (vLA-GET-AREA (vlax-ename->vla-object pog1)))
  24.    (vl-cmdf "union" pog1 cir "")
  25.    (setq AREAN (vla-get-area (vlax-ename->vla-object pog1)))
  26.    (entdel (entlast))
  27.    (COND ((= AREA AREAN) (ALERT "点在边界内!"))
  28.   (T (ALERT "点在边界外!")))
  29. )
  30.       )
  31.     )
  32.   )
  33.   (setvar "cmdecho" 0)
  34.   (PRINC)
  35. )
  36. (defun SSE (filter msg / el)
  37.   (while (not (and
  38.   (setq el (car (entsel msg)))
  39.   (WCMATCH (cdr (ASSOC 0 (entget el)))
  40.     (cdr (nth 0 filter)))
  41.   (vlax-curve-isPlanar (vlax-ename->vla-object EL))))
  42.   (prompt (strcat "\n选中1个" (cdr (ASSOC 0 (entget el))) "对象")))
  43.   (setq el el)
  44. )
发表于 2009-9-23 18:47 | 显示全部楼层
(ssget "cp"
发表于 2011-10-27 11:31 | 显示全部楼层
好帖,mark!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 21:48 , Processed in 0.233764 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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