jmerch 发表于 2022-7-6 09:45:08

通过LISP编辑多行文字

我到处寻找LISP来通过LISP编辑多行文字,但只找到了一个(谢谢Mike Weaver),这几乎就是我想要的。它张贴在下面,但我希望它能自动选择一段我指定的多行文字(通过ssget)。我已经修改了这段代码,但对VisualLisp理解不够,无法知道它出错的原因。。。有什么帮助吗?
 
原件:
(defun c:mtval( / ent objmtext stroldval
strnewval)
(setq
ent (car (entsel))
objMText
(vlax-ename->vla-object ent)
strOldval (vlax-get-property objMText
"TEXTSTRING")
strnewval (getstring T (strcat "\nNew text value<"
stroldval ">: "))
)
(if
strnewval
(vlax-put-property objmtext "TEXTSTRING"
strnewval)
)
(vlax-release-object objmtext)

)
 
我的修改代码:
(defun c:mtval( / getmtext objMText strnewval)
(setq getmtext (ssget "_X" '((0 . "MTEXT")(1 . "TEST")))
       objMText (vlax-ename->vla-object (entlast))
       strnewval (getstring T "Enter New Text: ")
)
(if strnewval (vlax-put-property objmtext "TEXTSTRING" strnewval)
)
(vlax-release-object objmtext)

)

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

请注意,文本字符串区分大小写。
 
好了,伙计。

(defun c:test (/ new ss)
; Tharwat 24.02. 2010
(if (and (setq new (getstring T "Enter New Text: "))
          (setq ss (ssget "_X" '((0 . "MTEXT") (1 . "test"))))
   )
   ((lambda (i / ss1 e)
      (while
      (setq ss1 (ssname ss (setq i (1+ i))))
         (entupd
         (cdr
             (assoc
               -1
               (entmod
               (subst (cons 1 new) (assoc 1 (setq e (entget ss1))) e)
               )
             )
         )
         )
      )
    )
   -1
   )
   (Alert
   "\n Your replaced text is not found in the drawing....."
   )
)
(princ)
)

 
塔瓦特

jmerch 发表于 2022-7-6 09:51:50

这行不通。。。它要求我选择一个对象,然后将其隔离。。。。

alanjt 发表于 2022-7-6 09:57:48

(setq getmtext (ssget "_X" '((0 . "MTEXT")(1 . "TEST"))) <-Select all MText with "TEST" value
       objMText (vlax-ename->vla-object (entlast)) <- converts the last created object to a vla-object (not what you want to do here)

 
塔瓦特

jmerch 发表于 2022-7-6 10:00:20

@艾伦:也许我不理解你。我正在做ssget来“抓取”我画上的多行文字,并认为我需要将其转换为vla obect。多行文字的属性(文本字符串)包含哪些内容?vla get activeselectionset不是函数。
 
@Tharwat:同样的结果,它要求“在当前图形或外部参照中选择对象”。。。然后将其隔离。为什么会这样?它没有要求我输入任何文本或任何东西。。。
 
我感谢你们两位的帮助。

alanjt 发表于 2022-7-6 10:03:46

我已经为您发布的两个例程在Arch中正常工作。Autocad,但我没有MEP cad来检查这些代码。
 
不管怎样,你能用你的版本在例程失败后复制你的命令行吗?
 
塔瓦特

Tharwat 发表于 2022-7-6 10:06:03

这不是真正的“失败”,只是没有做我想做的。。。我想知道你的代码中有什么依赖于ACAD版本。。。
 
命令:测试
选择当前图形或外部参照中的对象:
选择当前图形或外部参照中的对象:
再生模型。

jmerch 发表于 2022-7-6 10:08:15

哈哈,这是一个完全不同的节目。确保您实际上正在加载例程。

Tharwat 发表于 2022-7-6 10:10:40

笑死我了。。。。世界跆拳道联盟。。。我已经正确地加载了它,并且非常确定我没有任何名为TEST的命令。。。。但我把这个命令改成了其他命令,它现在似乎起作用了。。。。非常感谢Tharwat!!!
 
我仍然很好奇我向你提出的问题,艾伦,只是为了让我能更好地理解它。

jmerch 发表于 2022-7-6 10:16:23

 
你能把你所做的改变发布到你的MEP cad上吗?
 
只是好奇其他cad版本。
页: [1] 2
查看完整版本: 通过LISP编辑多行文字