本帖最后由 highflybird 于 2011-7-27 19:43 编辑
修改了一下代码,使得能适用于块中有属性的。
部分代码如下:
 -
- ;;;获取某个旋转图块的原始包围盒
- (defun C:test (/ Sel doc blk mat i lst ent dxf bkname BoxPts pts MinPt MaxPt)
- (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (setq blk (vla-get-blocks doc))
- (setq i 0)
- (setq lst nil)
- (if (setq sel (ssget '((0 . "INSERT"))))
- (repeat (sslength sel)
- (setq ent (ssname sel i))
- (setq dxf (entget ent))
- (setq bkname (cdr (assoc 2 dxf)))
- ;;The first to get the boundingbox of a Block Definition
- (if (not (setq BoxPts (cdr (assoc bkname lst))))
- (setq BoxPts (blkbox blk bkname)
- lst (cons (cons bkName BoxPts) lst)
- )
- )
- ;; if the Insert has attribute entities
- (if (= (cdr (assoc 66 dxf)) 1)
- (setq BoxPts (AttBox ent BoxPts))
- )
- (if BoxPts
- (progn
- (setq MinPt (apply 'mapcar (cons 'min BoxPts)))
- (setq MaxPt (apply 'mapcar (cons 'max BoxPts)))
- (setq BoxPts (list MinPt
- (list (car MinPt) (cadr MaxPt))
- MaxPt
- (list (car MaxPt) (cadr MinPt))
- )
- )
- (setq mat (RefGeom ent))
- (setq pts (mapcar
- (function (lambda (pt)
- (mapcar '+ (mxv (car mat) pt) (cadr mat))
- )
- )
- BoxPts
- )
- )
- (Make3dPoly pts)
- )
- )
- (setq i (1+ i))
- )
- )
- (princ)
- )
|