本帖最后由 Gu_xl 于 2012-3-30 09:28 编辑
tm20038175 发表于 2012-3-30 06:27 
就是已知一个图框块名,单击一个图框块里面一点,得到此图框的边界。
 - ;;参数 pt = 点 blockname = 块名
- (defun getinertBypt (pt BlockName / h p1 ss sl en ll ur)
- (setq h (getvar 'viewsize)) ;_ 屏幕高
- (setq p1 (list (car pt) (+ (cadr pt) (* 0.5 h)) 0))
- (setq ss (ssget "F"
- (list pt p1)
- (list (cons 0 "insert") (cons 2 BlockName))))
- (if ss
- (progn
- (repeat (setq i (sslength ss))
- (setq sl (cons (ssname ss (setq i (1- i))) s))
- )
- (setq sl
- (vl-sort sl
- '(lambda (a b)
- (< (distance pt (cdr (assoc 10 (entget a))))
- (distance pt (cdr (assoc 10 (entget b))))
- )
- )
- )
- )
- ;;得到点位置处的块图元名
- (setq en (car sl))
- (vla-getboundingbox (vlax-ename->vla-object en) 'll 'ur)
- (setq ll (vlax-safearray->list ll)
- ur (vlax-safearray->list ur)
- )
- (if (<= (cadr ll) (cadr pt) (cadr ur))
- (progn
- (redraw en 3) ;_ 亮显
- ;;返回值
- en
- )
- )
- )
- )
- )
|