- UID
- 674793
- 积分
- 1875
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2013-4-1
- 最后登录
- 1970-1-1
|
发表于 2013-5-8 10:59:20
|
显示全部楼层
本帖最后由 牢固 于 2013-5-8 11:04 编辑
[pcode=lisp,true];;测试
(defun c:tt ()
(command "zoom" "e")
(setq pt (getpoint "\n指定一点:"))
(setq e (GETCLOSESTPOINTTOCurve pt))
(if e
(progn
(redraw e 3)
(grdraw pt (trans (vlax-curve-getclosestpointto e (trans pt 1 0)) 0 1) 1)
)
)
(princ)
)
;;寻找最近的封闭曲线,参数pt = UCS Point ,返回 en By Gu_xl 2013.05.08
(defun GETCLOSESTPOINTTOCurve (PT / PC VH SC VW PMAX SS D MIND)
(setq pc (getvar "viewctr")
vh (getvar "viewsize")
sc (getvar "screensize")
vw (* vh (/ (car sc) (cadr sc)))
pmax (list (+ (car pc) (* 0.5 vw)) (+ (cadr pc) (* 0.5 vh)))
)
(setq ss (ssget "_F"
(list pt pmax)
(list '(-4 . "<or")
'(0 . "circle,*polyline,spline")
'(-4 . "<and")
'(0 . "ellipse")
(cons 41 0)
(cons 42 (* pi 2))
'(-4 . "and>")
'(-4 . "or>")
)
)
pt (trans pt 1 0)
)
(if ss
(progn
(setq ss
(mapcar
'cadr
(vl-remove-if
'(lambda (x) (= 0 (rem (length (cdddr x)) 2)))
(ssnamex ss)
)
)
)
(foreach e ss
(if (vlax-curve-isClosed e)
(progn
(setq d (distance pt (vlax-curve-getclosestpointto e pt)))
(if (not mind)
(setq mind (cons d e))
(if (< d (car mind))
(setq mind (cons d e))
)
)
)
)
)
)
)
(cdr mind)
)
[/pcode] |
|