- UID
- 136226
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-5-11
- 最后登录
- 1970-1-1
|
发表于 2004-6-17 01:51:50
|
显示全部楼层
这确实是我自己想出来的,以前的贴子我没看仔细
附上程序代码
;;测试点与区域的关系,用命令行的方法创建面域
(defun c:pct
(/ POG POIO POI closedptO closedpt DIS pog1 CIR AREA AREAN)
(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-ELEVATION
(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)
)
(VLAX-ADD-CMD "PCT" 'PCT)
(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)
) |
|