明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2454|回复: 7

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

[复制链接]
发表于 2011-8-16 16:45 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 chenjian2159 于 2011-8-18 09:20 编辑

如下图所示 附上DWG文件


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





附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2011-8-16 16:45 | 显示全部楼层
本帖最后由 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)
)
回复

使用道具 举报

发表于 2011-8-17 22:17 | 显示全部楼层
似乎挺难的
最笨的方便,编程打碎选文字转正,并重新做块!
好象没有必要
回复

使用道具 举报

 楼主| 发表于 2011-8-18 12:02 | 显示全部楼层
恳请GU-XL版主出手相助!!!万分感谢!!!
回复

使用道具 举报

发表于 2011-8-18 20:31 | 显示全部楼层
可以把做动态块 但还是很不方便
回复

使用道具 举报

发表于 2011-8-23 16:33 | 显示全部楼层
可以把块中的文字,定义成属性,MIRROR时就不会反了。
回复

使用道具 举报

发表于 2012-5-10 15:00 | 显示全部楼层
高人啊!!
回复

使用道具 举报

发表于 2019-1-4 12:20 | 显示全部楼层
这个我也遇到过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-24 21:39 , Processed in 2.442158 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表