马可,
您的方法仅对具有中心基点的块有效,请参见以下内容:
- (defun c:mm2 (/ i ss pt1 pt2 tmp ent p1 p2)
- (vl-load-com)
- (if (and (setq i -1 ss (ssget "_:L" '((0 . "INSERT"))))
- (setq pt1 (getpoint "\nSelect First Point: "))
- (setq pt2 (getpoint pt1 "\nSelect Second Point: ")))
- (progn
- (setq tmp (entmakex (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2))))
- (while (setq ent (ssname ss (setq i (1+ i))))
- (setq p2 (vlax-curve-getClosestPointto tmp
- (setq p1 (cdr (assoc 10 (entget ent)))) t))
- (vla-move (vla-copy (vlax-ename->vla-object ent))
- (vlax-3D-point p1)
- (vlax-3D-point (polar p1 (angle p1 p2) (* 2. (distance p1 p2))))))
-
- (entdel tmp)))
-
- (princ))
- (defun c:mm3 (/ i ss pt1 pt2 ent ss obj Mi Ma cen tmp)
- (vl-load-com)
- (if (and (setq i -1 ss (ssget "_:L" '((0 . "INSERT"))))
- (setq pt1 (getpoint "\nSelect First Point: "))
- (setq pt2 (getpoint pt1 "\nSelect Second Point: ")))
-
- (while (setq ent (ssname ss (setq i (1+ i))))
- (setq cen (polar (car ptlst) (apply (function angle) ptLst)
- (/ (apply (function distance) ptlst) 2.))
- tmp (vla-mirror (vlax-ename->vla-object ent) (vlax-3D-point pt1) (vlax-3D-point pt2)))
- (vla-getBoundingBox tmp 'Mi 'Ma)
- (setq ptlst (mapcar (function vlax-safearray->list) (list Mi Ma)))
- (vla-mirror tmp (vlax-3D-point cen) (vlax-3D-point (polar cen (/ pi 2.) 1.)))
- (vla-delete tmp)))
- (princ))
|