XIAOFEILONG 发表于 2010-9-2 09:08:00

[求助]镜像后如何不改变文字的相对关系?

<p>几列文字,镜像后,相对的顺序就完全反了</p>
<p>如图一的情况</p>
<p>&nbsp;</p>
<p>想请教,有无办法,使得镜像后变成图二的情况?也就是说原来的文字的相对位置不改变的情况</p>

xhq1954425 发表于 2010-9-2 09:39:00

好像没有直接办法,文字部分是不是可以用复制解决?

AMTONNY 发表于 2010-9-2 11:08:00

是有一个变量设置的,不过我也找不到了,你看看CAD帮助吧

lenlenq 发表于 2010-9-6 20:01:00

改系统变量是不行的(mirrtext) <br/><br/>直线镜像,文字复制

xyp1964 发表于 2010-9-7 14:16:00

本帖最后由 作者 于 2010-9-7 21:27:05 编辑 <br /><br /> <p></p>
<p>&nbsp;</p>
<p></p>
<p></p>

xhq1954425 发表于 2010-9-7 18:13:00

<font face="Verdana" color="#da2549"><b>xyp1964</b></font>版主的动画演示好像不能满足楼主的要求?

zark 发表于 2010-9-7 22:44:00

<p>相对位置不变,还叫镜像?直接复制吧</p>
<p>&nbsp;</p>

13579 发表于 2010-10-14 10:59:00

我们专业有特殊需求,这样来的更方便

Gu_xl 发表于 2010-10-14 12:28:00


(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)
)

liaoliang317 发表于 2013-5-2 14:05:48

G版主就是强大啊~~~~~!
页: [1] 2
查看完整版本: [求助]镜像后如何不改变文字的相对关系?