caltes75 发表于 2022-7-6 10:31:03

自动选择文本

大家好。我对写作不熟悉。lisp例程,这是我的第一篇文章。我对txt2mtxt例程的版本有问题。我希望能够在不手动选择文本的情况下运行下面列出的例程。我希望这一切都是自动化的。这是可能的还是我完全不可能。这是我到目前为止掌握的代码。
 
 
(defun Merge()
(if(and(setq ss(ssget’((0。“多行文字,文本”))));同时选择多行文字和数据文字
(>(sslength ss)1);检查是否选择了多个
) ;_ 结束和
(程序
(setq n 1;初始化计数器
en(ssname ss 0);选择第一个
ed(entget en);获取其DXF数据
txt(cdr(assoc 1 ed));获取其textvalue
) ;_ setq结束
(如果(=(cdr(assoc 0 ed))“文本”);如果第一个是DText
(程序
(命令“txt2mtxt”en“”);将其转换为多行文字
(setq obj(vlax ename->vla object(entlast)))
(vlax put property obj‘LineSpacingFactor 1)
(vlax put property obj‘LineSpacingDistance 0.25)
(vlax put property obj’LineSpacingStyle 2)
(setq en(entlast));获取新的多行文字
) ;_ 程序结束
) ;_ if结束
(setq eo(vlax ename->vla object en));获取第一个文本的ActiveX对象
(虽然(
(setq en(ssname ss n);获取第n个文本
ed(entget en);获取其DXF数据
) ;_ 集合结束
(setq txt(strcat txt“\\P”(cdr(assoc 1 ed)));将其字符串追加到第一个文本
(entdel en);删除第n个文本
(setq n(1+n));增加计数器
) ;_ while结束
(vla put TextString eo txt);将第一个文本修改为串联字符串
(命令“_.justifytext”pause““ML”)
) ;_ 程序结束
) ;_ if结束
)

Tharwat 发表于 2022-7-6 10:37:42

欢迎来到论坛。
它来了。
在代码中更正它。
(if (and (setq ss (ssget "_x" '((0 . "MTEXT,TEXT"))))
 
塔瓦特

caltes75 发表于 2022-7-6 10:41:43

Thanx。如果我不想要图纸中的所有文本,而只是特定的文本,该怎么办。

Tharwat 发表于 2022-7-6 10:45:22

因此,您将返回到第一个代码,因为它是单选的。

Tharwat 发表于 2022-7-6 10:46:38

阅读此内容(如何发布代码)
http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南

BlackBox 发表于 2022-7-6 10:51:26

您也可以考虑这些:
[列表]
[*]foreach,如果不是vlax for
[*]vla删除
[*]vla get textstring
[*]vla put连接点
[*]vla put行间距因子
[*]vla put线间距距离
[*]vla put线间距样式
此外,确保在例程结束时删除选择集:
 

(vla-delete ss)

Lt Dan's l 发表于 2022-7-6 10:55:49

您需要(setq ss(ssget“_x”'((0。“多行文字,文本”)))
 
示例将返回T
(wcmatch (strcase "hi old text!") "*OLD TEXT*")
使用entmod

caltes75 发表于 2022-7-6 10:59:04

使用entmod的目的是什么?

BlackBox 发表于 2022-7-6 11:01:24

 
 
有关更多信息,请参阅VLIDE帮助。

caltes75 发表于 2022-7-6 11:05:28

我知道我现在真的很笨,但是我该如何在我的代码中写入wcmatch和entmod呢?
页: [1] 2
查看完整版本: 自动选择文本