chenjian2159 发表于 2011-8-16 16:45:28

求助GU-XL版主!!!块中文字的镜像问题

本帖最后由 chenjian2159 于 2011-8-18 09:20 编辑

如下图所示 附上DWG文件

有没有简单的方法处理上面的图到下面图示的结果




byghbcx 发表于 2011-8-16 16:45:29

本帖最后由 byghbcx 于 2011-8-24 11:04 编辑

利用程序,
1、先把带文字块转成带属性块
2、再把反向属性文字的位置及方向换掉。
如果量大可以这样处理,如果是新建块,直接定义成带属性块,MIRROR后就不影响了。
(defun c:tt ( /                flag         blks            blk         obj
             objblock      *AcDocument*            *Model-Space*
             obj1      blks         Height   mode         $Prompt
             InsertionPoint         Tag            Value         la
             color      xscale         yscale   ascale         Rotaion
             enlst
            )
(defun get-tbl (tbl / b tbl-list)
    (setq tbl-list '())
    (while (setq b (tblnext tbl (not b)))
      (setq tbl-list (append (list (cdr (assoc 2 b))) tbl-list))
    )
    tbl-list
)
(defun ch_blk_co ( ent / setcod wz-end-pt k ents blk);修改块属性反方向文字
(defun setcod (sname cod co / sinf)
    (setq sinf (entget sname))
    (if      (assoc cod sinf)
      (setq sinf (subst (cons cod co) (assoc cod sinf) sinf))
      (setq sinf (append sinf (list (cons cod co))))
    )
    (entmod sinf)
)
(defun wz-end-pt (textent / teztent ang sinrot cosrot h t1 t2 p0 p1 p2 );返回文字结尾角点坐标
   (setq p0 (cdr (assoc 10 textent))
       ang (cdr (assoc 50 textent))
       h(cdr (assoc 40 textent))         
       sinrot (sin ang)
       cosrot (cos ang)
       t1 (car (textbox textent))
       t2 (cadr (textbox textent))
       p1 (list (+ (car p0)
         (- (* (car t1) cosrot)(* (cadr t1) sinrot)))
         (+ (cadr p0)
          (+(* (car t1) sinrot)(* (cadr t1) cosrot)))
          )
       p2 (list (+(car p0)
         (- (* (car t2) cosrot)(* (cadr t1) sinrot)))
         (+(cadr p0)
         (+ (* (car t2) sinrot)(* (cadr t1) cosrot)))
          )
   );setq end
p2
)
(if (not k) (setq k 1))
(if (= "INSERT" (cdr (assoc 0 (entget ent))))
(if (assoc 66 (entget ent))
    (progn
      (setq k (if (> (cdr (assoc 41 (entget ent))) 0) 1 -1))
      (setq blk (entnext ent))
    )
    (progn
    (setq blk (cdr (assoc -2 (tblsearch "block" (cdr (assoc 2 (entget ent)))))))
    (ch_blk_co blk)
    )
)
)
(while blk
(if (= "INSERT" (cdr (assoc 0 (entget blk))))
      (setq k (if (> (cdr (assoc 41 (entget blk))) 0) 1 -1))
      (if (assoc 66 (entget blk)) (ch_blk_co blk))
)
    (if (and (= "ATTRIB" (cdr (assoc 0 (entget blk)))) (= k -1))
      (progn (setcod blk 10 (wz-end-pt (entget blk)))
      (setcod blk 71 2)
      (entupd blk)
      )
      )
(setq blk (entnext blk))
)
(entupd ent)
(princ)
)
(command "_.undo" "be")
(vl-load-com)
(setq      *AcDocument*(vla-get-activedocument (vlax-get-acad-object))
      *Model-Space* (vla-get-modelspace *AcDocument*)
)
(setq blks (get-Tbl "block"))
(foreach blk blks
    (setq flag t)
    (setq objblk (vla-Item (vla-get-Blocks *ACDOCUMENT*) blk))
    (vlax-for obj objblk
      (if (= "AcDbText" (vla-get-ObjectName obj))
      (progn
          (setq flag nil)
          (setq      Height               (vla-get-Height obj)
                mode               0
                $Prompt               (vla-Get-textString obj)
                InsertionPoint (vla-get-InsertionPoint obj)
                Tag               (vla-Get-textString obj)
                Value               (vla-Get-textString obj)
                la               (vla-get-Layer obj)
                color               (vla-get-color obj)
                Rotaion               (vla-get-Rotation obj)
          )
          (setq      obj1 (vla-AddAttribute
                     objblk Height Mode $Prompt InsertionPoint Tag
                     Value)
          )
          (vla-put-Layer obj1 la)
          (vla-put-Color obj1 color)
          (vla-put-Rotation obj1 Rotaion)
          (vla-delete obj)
          (command "_.attsync" "n"blk )
      )
      )
    )
)
(foreach blk blks (ch_blk_co (cdr (assoc -2 (tblsearch "block" blk)))))
(command "regen")
(command "_.undo" "end")
(princ)
)

gbhsu 发表于 2011-8-17 22:17:34

似乎挺难的
最笨的方便,编程打碎选文字转正,并重新做块!
好象没有必要

chenjian2159 发表于 2011-8-18 12:02:25

恳请GU-XL版主出手相助!!!万分感谢!!!

inhoo0 发表于 2011-8-18 20:31:16

可以把做动态块 但还是很不方便

byghbcx 发表于 2011-8-23 16:33:34

可以把块中的文字,定义成属性,MIRROR时就不会反了。

smartstar 发表于 2012-5-10 15:00:24

高人啊!!

tigcat 发表于 2019-1-4 12:20:44

这个我也遇到过

zhangrunze 发表于 2024-6-27 14:12:30

byghbcx 发表于 2011-8-16 16:45
利用程序,
1、先把带文字块转成带属性块
2、再把反向属性文字的位置及方向换掉。


测试正常~
带文字块转成带属性块(全图)
感谢分享~
页: [1]
查看完整版本: 求助GU-XL版主!!!块中文字的镜像问题