<p>可否给个示例?</p> xhq1954425发表于2009-9-6 10:18:00static/image/common/back.gif水平有限,不敢随便参与讨论,看高人的帖看不太明白,斗胆想了一个苯办法发上来,不知可行否?(defun c:test()
<p>这个行不通的。</p> boundary 主要是风险大,平时用的时候都可能导致cad死机,因此不建议用 谢谢高手指点!<img alt="" src="http://www.mjtd.com/bbs/Skins/default/topicface/face12.gif"/> 这个是在网上搜到的,已经不知道原作者是谁了。
(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)
)
(ssget "cp" 好帖,mark!
页:
1
[2]