在块内移动多行文字
你好我想要这种Lisp程序
1.获取我不想移动的多行文字
2.获得相对x,y移动坐标。(如100150)
多行文字在区块中很深,所以我必须双击5次。
谢谢 看看这个,伙计。
(defun c:Action (/ Block Obj)
;; Tharwat 27. 02. 2011
(vl-load-com)
(vlax-for block
(vla-get-blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(if
(and
(eq :vlax-false (vla-get-isLayout block)) ; Lee Technique
(eq :vlax-false (vla-get-isXref block)) ; Lee Technique
)
(vlax-for obj block
(if (eq "AcDbMText" (vla-get-objectname obj))
(vla-move obj
(vlax-3d-point '(0. 0. 0.))
(vlax-3d-point '(100. 150. 0.))
)
)
)
)
)
(vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))
acAllViewports
)
(princ)
)
塔瓦特 或者:
(defun c:MovT (/ doc ent_ ent pt1 blk)
(vl-load-com)
(if (setq ent_ (nentsel "\nSelect MTEXT:"))
(progn
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
ent (vlax-ename->vla-object (car ent_))
blk (vla-ObjectIdToObject doc (vla-get-OwnerID ent))
)
(vla-Move ent (vlax-3d-point (setq pt1 (mapcar '+
(last (caddr ent_))(cdr (assoc 10 (entget (car ent_)))))))
(vlax-3d-point (getpoint pt1 "\nNew point:")))
(vla-get-Count blk)
(vla-update ent)
)
)
(vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))
acAllViewports)
)
修改块的子图元时,需要记住,块定义是在WCS平面中以单位比例和零旋转定义的。
因此,如果用户选择包含在具有块定义以外特性的块中的多行文字,则必须对位移矢量进行变换,以考虑法线/比例/旋转的变化(类似于此处实现的方法)。
这将考虑所有UCS/视图和所有块比例/旋转:
我相信以上可以通过使用nentselp选择返回的矩阵的逆来完成,但我不确定我上面使用的方法在性能上会有多大差异。 我没有意识到RefEdit有这么多步骤。
我想你是对的
我同意你的观点
更严重的是,我的代码更多的是出于学术目的(不管它值多少)——实际上,你永远不会走这条路,每种修改方法都需要一个单独的程序。。。 可悲的是,这家伙正在使用RefEdit替换。
RefEdit与线程有什么关系? 我猜李删除了他的贝迪特评论。看看RefEdit,你会发现它基本上就是完成这样的块修改所需要的。
页:
[1]
2