求助GU-XL版主!!!块中文字的镜像问题
本帖最后由 chenjian2159 于 2011-8-18 09:20 编辑如下图所示 附上DWG文件
有没有简单的方法处理上面的图到下面图示的结果
本帖最后由 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)
)
似乎挺难的
最笨的方便,编程打碎选文字转正,并重新做块!
好象没有必要 恳请GU-XL版主出手相助!!!万分感谢!!! 可以把做动态块 但还是很不方便 可以把块中的文字,定义成属性,MIRROR时就不会反了。 高人啊!! 这个我也遇到过
byghbcx 发表于 2011-8-16 16:45
利用程序,
1、先把带文字块转成带属性块
2、再把反向属性文字的位置及方向换掉。
测试正常~
带文字块转成带属性块(全图)
感谢分享~
页:
[1]