maksolino 发表于 2022-7-6 09:44:46

在块内移动多行文字

你好
我想要这种Lisp程序
1.获取我不想移动的多行文字
2.获得相对x,y移动坐标。(如100150)
 
多行文字在区块中很深,所以我必须双击5次。
谢谢

Tharwat 发表于 2022-7-6 09:49:38

看看这个,伙计。
 

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

 
塔瓦特

pBe 发表于 2022-7-6 09:55:34

或者:
 
(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)         
)

Lee Mac 发表于 2022-7-6 09:57:50

修改块的子图元时,需要记住,块定义是在WCS平面中以单位比例和零旋转定义的。
 
因此,如果用户选择包含在具有块定义以外特性的块中的多行文字,则必须对位移矢量进行变换,以考虑法线/比例/旋转的变化(类似于此处实现的方法)。
 
这将考虑所有UCS/视图和所有块比例/旋转:
 
我相信以上可以通过使用nentselp选择返回的矩阵的逆来完成,但我不确定我上面使用的方法在性能上会有多大差异。

alanjt 发表于 2022-7-6 10:04:12

我没有意识到RefEdit有这么多步骤。

pBe 发表于 2022-7-6 10:09:40

 
我想你是对的

Lee Mac 发表于 2022-7-6 10:12:14

 
我同意你的观点
 
更严重的是,我的代码更多的是出于学术目的(不管它值多少)——实际上,你永远不会走这条路,每种修改方法都需要一个单独的程序。。。

alanjt 发表于 2022-7-6 10:15:16

可悲的是,这家伙正在使用RefEdit替换。

Tharwat 发表于 2022-7-6 10:20:09

 
RefEdit与线程有什么关系?

alanjt 发表于 2022-7-6 10:26:30

我猜李删除了他的贝迪特评论。看看RefEdit,你会发现它基本上就是完成这样的块修改所需要的。
页: [1] 2
查看完整版本: 在块内移动多行文字