[求助]镜像后如何不改变文字的相对关系?
<p>几列文字,镜像后,相对的顺序就完全反了</p><p>如图一的情况</p>
<p> </p>
<p>想请教,有无办法,使得镜像后变成图二的情况?也就是说原来的文字的相对位置不改变的情况</p> 好像没有直接办法,文字部分是不是可以用复制解决? 是有一个变量设置的,不过我也找不到了,你看看CAD帮助吧 改系统变量是不行的(mirrtext) <br/><br/>直线镜像,文字复制 本帖最后由 作者 于 2010-9-7 21:27:05 编辑 <br /><br /> <p></p>
<p> </p>
<p></p>
<p></p> <font face="Verdana" color="#da2549"><b>xyp1964</b></font>版主的动画演示好像不能满足楼主的要求? <p>相对位置不变,还叫镜像?直接复制吧</p>
<p> </p> 我们专业有特殊需求,这样来的更方便
(defun c:Mr (/ gxl-MidPoint gxl-GetssBox )
(defun gxl-GetssBox (ss / maxpt maxptlst minpt minptlst obj x ss1)
(setq ss1 (gxl-Sel-SS->List ss))
(foreach x ss1
(setq obj (vlax-ename->vla-object x))
;(setq minPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
;(setq maxPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
(vla-GetBoundingBox Obj 'minpt 'maxpt) ; 得到包围框
(setq minPt (vlax-safearray->list minPt))
(setq maxPt (vlax-safearray->list maxPt))
(setq minPtlst (append minPtlst (list minPt)))
(setq maxPtlst (append maxPtlst (list maxPt)))
) ;_ 结束foreach
(setq minPt (list (apply 'min (mapcar 'car minPtlst))
(apply 'min (mapcar 'cadr minPtlst))
0
) ;_ 结束list
) ;_ 结束setq
(setq maxPt (list (apply 'max (mapcar 'car maxPtlst))
(apply 'max (mapcar 'cadr maxPtlst))
0
) ;_ 结束list
) ;_ 结束setq
;(command "rectang" minPt maxPt)
(list minPt maxPt)
)
(defun gxl-MidPoint (p1 p2)
(if (> 2 (length p1))
(list (* 0.5 (+ (car p1) (car p2))) (* 0.5 (+ (cadr p1) (cadr p2))) (* 0.5 (+ (caddr p1) (caddr p2))))
(list (* 0.5 (+ (car p1) (car p2))) (* 0.5 (+ (cadr p1) (cadr p2))))
)
)
(defun gxl-Sel-SS->List (ss / cs_i out)
(if (= (type ss) 'PICKSET)
(progn
(setq cs_i 0.0
out'()
)
(repeat (sslength ss)
(setq out (cons (ssname ss cs_i) out))
(setq cs_i (1+ cs_i))
)
(setq out (reverse out))
)
)
)
(defun gxl-getbox (e1 / obj minpoint maxpoint)
(if (= 'ENAME (type e1))
(setq obj (vlax-ename->vla-object e1)) ;转换图元名
(setq obj e1)
)
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
;取得包容图元的最大点和最小点
(setq minpoint (vlax-safearray->list minpoint)) ;把变体数据转化为表
(setq maxpoint (vlax-safearray->list maxpoint)) ;把变体数据转化为表
;;(command "box" minpoint maxpoint 2)
(setq obj (list minpoint maxpoint))
)
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(princ "\n选择要镜像的物体:")
(setq ss (ssget))
(if ss
(progn
(setq pt1(getpoint "\n指定镜像线的第一点:")
pt2 (getpoint pt1 "\n指定镜像线的第二点:")
)
(command "line" pt1 pt2 "")
(setq line (entlast))
(initget 7 "Yes No")
(setq kd (getkword "\n是否删除源对象?[是<Yes>/否<No>]否<No>"))
(if (= kd "") (setq kd "No"))
(setq nn (sslength ss)
n 0)
;|
(repeat nn
(setq pl (GXL-GETBOX (setq en (ssname ss n))))
(setq pt (GXL-MIDPOINT (car pl) (cadr pl)))
(setq mpt (vlax-curve-getclosestpointto line pt t))
(setq ang (angle pt mpt))
(command "copy" en "" pt (polar pt ang (* 2 (distance pt mpt))))
(if (= kd "Yes") (command "erase" en ""))
(setq n (1+ n))
)|;
(setq pl (gxl-GetssBox ss))
(setq pt (GXL-MIDPOINT (car pl) (cadr pl)))
(setq mpt (vlax-curve-getclosestpointto line pt t))
(setq ang (angle pt mpt))
(command "copy" ss "" pt (polar pt ang (* 2 (distance pt mpt))))
(if (= kd "Yes") (command "erase" ss ""))
)
)
(entdel line)
(setvar "osmode" oldosmode)
)
G版主就是强大啊~~~~~!
页:
[1]
2