xhq1954425 发表于 2009-9-6 10:18:00

<p></p><p>水平有限,不敢随便参与讨论<img alt="" src="http://www.mjtd.com/bbs/Skins/default/topicface/face14.gif"/>,看高人的帖看不太明白,斗胆想了一个苯办法发上来,不知可行否<img title="em13" alt="" src="http://www.mjtd.com/bbs/Skins/Default/emot/em13.gif" style="CURSOR: pointer;"/>?</p><p>(defun c:test()<br/>&nbsp;(while (setq p (getpoint"\n拾取点"))<br/>&nbsp;&nbsp; (command "BOUNDARY" "A" "O" "R" "I" "N" "" ""&nbsp; p "")<br/>&nbsp;&nbsp;&nbsp; (if (= (GETVAR "LASTPROMPT") "已创建 0 个面域。")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (prompt&nbsp; "点在外面")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp; (command "erase"(entlast) "")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (prompt "点在里面")<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ) <br/>&nbsp;)<br/>&nbsp;)</p>

cjs 发表于 2009-9-6 12:25:00

<p>11楼办法不行</p><p>boundary本来就经常找不到边界,自身还不完善,最好不要用</p>

zml84 发表于 2009-9-6 12:37:00

killer9806发表于2009-9-5 21:55:00static/image/common/back.gifZML84的,多边形范围点的判定有误,只要点在多边形的最小最大点之间,都提示包含在其中

<p>可否给个示例?</p>

caoyin 发表于 2009-9-6 12:59:00

xhq1954425发表于2009-9-6 10:18:00static/image/common/back.gif水平有限,不敢随便参与讨论,看高人的帖看不太明白,斗胆想了一个苯办法发上来,不知可行否?(defun c:test()

<p>这个行不通的。</p>

狂刀无痕 发表于 2009-9-6 17:03:00

boundary 主要是风险大,平时用的时候都可能导致cad死机,因此不建议用

xhq1954425 发表于 2009-9-6 22:02:00

谢谢高手指点!<img alt="" src="http://www.mjtd.com/bbs/Skins/default/topicface/face12.gif"/>

yxp 发表于 2009-9-8 17:40:00

这个是在网上搜到的,已经不知道原作者是谁了。

(defun c:ard(/ POG POIO POI closedptO closedpt DIS pog1 CIR AREA AREAN)
(vl-load-com)
(setvar "cmdecho" 0)
(SETQ pog (SSE '((0 . "*YLINE,SPLINE,CIRCLE,ELLIPSE")) "\n请选择测试区域边界线(平面曲线):"))
(if (and (WCMATCH (cdr (assoc 0 (entget pog))) "*YLINE,SPLINE")
    (= (REM (cdr (assoc 70 (entget pog))) 2) 0))
    (alert "所选曲线不闭合!")
    (progn (setq poiO (GETPOINT "\n请选择测试点:"))
      (COND ((WCMATCH (cdr (assoc 0 (entget pog))) "LWPOLYLINE")
(SETQ POI (LIST (CAR POIO) (CADR POIO) (vLA-GET-ELEATION (vlax-ename->vla-object POG)))))
(T (SETQ POI (LIST (CAR POIO) (CADR POIO) (CADDDR (ASSOC 10 (ENTGET POG)))))))
      (SETQ closedptO (vlax-curve-getclosestpointto (vlax-ename->vla-object pog) poiO)
   closedpt(vlax-curve-getclosestpointto (vlax-ename->vla-object pog) poi))
      (if (= (DISTANCE poiO closedptO) 0)
(alert "点在边界上!")
(progn
   (setq dis (* (DISTANCE poi closedpt) 0.5))
   (vl-cmdf "copy" pog "" POI POI)
   (vl-cmdf "region" (entlast) "")
   (setq pog1 (entlast))
   (vl-cmdf "CIRCLE" POI DIS "")
   (vl-cmdf "region" (entlast) "")
   (setq cir(entlast) AREA (vLA-GET-AREA (vlax-ename->vla-object pog1)))
   (vl-cmdf "union" pog1 cir "")
   (setq AREAN (vla-get-area (vlax-ename->vla-object pog1)))
   (entdel (entlast))
   (COND ((= AREA AREAN) (ALERT "点在边界内!"))
(T (ALERT "点在边界外!")))
)
      )
    )
)
(setvar "cmdecho" 0)
(PRINC)
)
(defun SSE (filter msg / el)
(while (not (and
(setq el (car (entsel msg)))
(WCMATCH (cdr (ASSOC 0 (entget el)))
    (cdr (nth 0 filter)))
(vlax-curve-isPlanar (vlax-ename->vla-object EL))))
(prompt (strcat "\n选中1个" (cdr (ASSOC 0 (entget el))) "对象")))
(setq el el)
)

zark 发表于 2009-9-23 18:47:00

(ssget "cp"

yanglin112 发表于 2011-10-27 11:31:09

好帖,mark!
页: 1 [2]
查看完整版本: [讨论]如何判断某点是否在一个封闭的区域内?