可以通过坐标转换实现,首先用ssnamex获取ssget选择信息,然后转换到块坐标系下,遍历块内对象,看对象是否在选择范围内,是就选中对象,不是就不选中。这样就能获取选中块内对象的图元名,想做什么都可以了。
给出部分代码做参考,
 - (setq enamelst '() ss (ssadd) objlst '())
- (if (setq ssnamexlst(ssnamex (ssget":S"'((0 . "insert"))) 0))
- (progn
- (setq cwf (caar ssnamexlst)xref(cadar ssnamexlst))
- (setq mat (MAT:RefGeom xref))
- (setq mat (append(mapcar 'append(car Mat)(mapcar 'list (cadr mat)))'((0. 0. 0. 1.))))
- (setq tmat (vlax-tMatrix mat))
- (setq remat (MAT:RevRefGeom xref))
- (setq remat (append(mapcar 'append(car remat)(mapcar 'list (cadr remat)))'((0. 0. 0. 1.))))
- (setq tremat (vlax-tMatrix remat))
- (cond
- ((= cwf 1)(setq pt (last(last(car ssnamexlst)))) (setq ent (nentselp pt) ent (if (and ent (= (type (last (last ent))) 'ename))(car ent)))(setq enamelst (cons ent enamelst)))
- ((= cwf 3)
- (setq xy (last ssnamexlst))
- ;(setq pt1 (last (cadr xy))pt2 (last (caddr xy)) pt3 (last (cadddr xy))pt4(last (car(cddddr xy))) ) ;;提取刚才的窗选对角坐标。
- (setq PolyPts (mapcar 'cadr (cdr xy))) ;_ 计算多边形点表
- ;(setq PolyPts (mapcar '(lambda (x)(list (car x)(cadr x)))PolyPts))
- (setq enamelst(append enamelst (Block:Select xref PolyPts '((0 . "*")) "W" remat)))
- )
- )
- )
- )
|