文章目录
- 1 get_selected_text.lsp
- 1.1 使用方法
- LISP代码解析
- 1.2 动图
- 2 Rhino中使用PythonScript批量建立图层.py
- 2.1 直接生成
- 2.2 带颜色生成
- 2.3 动图展示
1 get_selected_text.lsp
1.1 使用方法
-
用记事本复制以下代码,改文件名为get_selected_text.lsp
(defun c:GatherText ()(setq ss (ssget '((0 . "TEXT,MTEXT"))))(if ss(progn(setq i -1all_texts "")(while (setq ent (ssname ss (setq i (1+ i))))(setq text_content (if (= (cdr (assoc 0 (entget ent))) "TEXT")(cdr (assoc 1 (entget ent)))(cdr (assoc 1 (entget ent)))))(setq all_texts (strcat all_texts text_content " ")))(princ all_texts))(princ "\nNo text objects selected. Please try again."))(princ) )
-
加载get_selected_text.lsp
-
在AutoCAD命令行中键入
GatherText
并按Enter。这将激活您创建的LISP程序。 -
按照提示选择文本对象。程序将显示所选文本对象的内容。
LISP代码解析
AutoLISP程序,用于收集AutoCAD图纸中的所有文本对象(包括单行文本(“TEXT”)和多行文本(“MTEXT”))的内容,并将它们连接成一个字符串。下面是对这段代码的逐行解析。
-
(defun c:GatherText ()
:定义一个名为GatherText
的新命令。AutoCAD中的命令名称通常以c:
为前缀。 -
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
:使用ssget
函数选择所有类型为"TEXT"或"MTEXT"的对象,并将选择集赋值给变量ss
。 -
(if ss
:检查ss
是否包含任何对象。如果包含对象,执行以下代码块,否则跳到第13行。 -
(progn
:开始一个新的代码块。 -
(setq i -1 all_texts "")
:初始化变量i
为-1,all_texts
为空字符串。 -
(while (setq ent (ssname ss (setq i (1+ i))))
:遍历选择集ss
中的所有对象。1+ i
表示将i
加1,ssname
函数返回指定索引处的对象。循环将持续到ssname
返回nil
。 -
(setq text_content (if (= (cdr (assoc 0 (entget ent))) "TEXT")
:使用entget
函数获取对象的属性列表,然后使用assoc
函数查找键值为0的属性,以确定对象的类型(“TEXT"或"MTEXT”)。如果对象类型为"TEXT",则执行下一行。 -
(cdr (assoc 1 (entget ent)))
:如果对象类型为"TEXT",使用assoc
函数查找键值为1的属性,以获取文本内容。 -
(cdr (assoc 1 (entget ent)))
:如果对象类型为"MTEXT",执行的操作与上一行相同。这里可能存在错误,因为MTEXT的内容通常用键值为3的属性表示。应该将此行更改为(cdr (assoc 3 (entget ent)))
。 -
)
:结束if
语句。 -
(setq all_texts (strcat all_texts text_content " "))
:将获取到的文本内容与当前all_texts
字符串连接,用空格分隔。 -
)
:结束while
循环。 -
(princ all_texts)
:打印包含所有文本内容的all_texts
字符串。 -
)
:结束if
语句。 -
(princ "\nNo text objects selected. Please try again.")
:如果没有找到任何文本对象,打印提示信息。 -
(princ)
:结束并退出GatherText
命令。
请注意,第9行可能存在错误,应将其更改为(cdr (assoc 3 (entget ent)))
以正确处理"MTEXT"对象的内容。
要在AutoCAD中运行此代码,请将其保存为一个.lsp
文件,然后在AutoCAD命令行中输入(load "YourFileName.lsp")
以加载文件。接着,输入GatherText
并按Enter键,程序将运行并显示所有文本对象的内容。
1.2 动图
2 Rhino中使用PythonScript批量建立图层.py
2.1 直接生成
import rhinoscriptsyntax as rs
# 定义了一个名为`create_layers`的函数,该函数接受一个图层名称列表作为输入参数。然后,对于列表中的每个图层名称,它检查图层是否已经存在;如果不存在,则创建新图层。
def create_layers(layer_names):for layer_name in layer_names:if not rs.IsLayer(layer_name):rs.AddLayer(layer_name)if __name__ == "__main__":layer_names = ['DXT-LZ', 'DXT-YL', 'DXT-GL', 'DXT-ZCSC', 'DXT-ZCSB', 'DXT-ZCSA', 'DXT-ZCDC', 'DXT-ZCDB', 'DXT-ZCDA', 'DXT-2PSR15', 'DXT-PSR15', 'DXT-BR3', 'DXT-SB8a', 'DXT-6SB8b', 'DXT-5SB8b', 'DXT-4SB8b', 'DXT-3SB8b', 'DXT-2SB8b', 'DXT-ZC2', 'DXT-ZC1', 'DXT-LINK']create_layers(layer_names)
定义了一个名为create_layers
的函数,该函数接受一个图层名称列表作为输入参数。然后,对于列表中的每个图层名称,它检查图层是否已经存在;如果不存在,则创建新图层。
2.2 带颜色生成
import rhinoscriptsyntax as rs
#定义了一个名为`create_layers`的函数,该函数接受一个图层名称列表作为输入参数。然后,对于列表中的每个图层名称,它检查图层是否已经存在;如果不存在,则创建新图层。
def create_layers(layer_names, colors):for layer_name, color in zip(layer_names, colors):if not rs.IsLayer(layer_name):rs.AddLayer(layer_name)rs.LayerColor(layer_name, color) #rs.LayerColor()函数为新创建的图层分配颜色。if __name__ == "__main__":layer_names = ['DXT-LZ', 'DXT-YL', 'DXT-GL', 'DXT-ZCSC', 'DXT-ZCSB', 'DXT-ZCSA', 'DXT-ZCDC', 'DXT-ZCDB', 'DXT-ZCDA', 'DXT-2PSR15', 'DXT-PSR15', 'DXT-BR3', 'DXT-SB8a', 'DXT-6SB8b', 'DXT-5SB8b', 'DXT-4SB8b', 'DXT-3SB8b', 'DXT-2SB8b', 'DXT-ZC2', 'DXT-ZC1', 'DXT-LINK']colors = [(255, 0, 0), # Red(0, 255, 0), # Green(0, 0, 255), # Blue(255, 255, 0), # Yellow(255, 0, 255), # Magenta(0, 255, 255), # Cyan# Add more colors as needed]# Repeat the colors list if there are more layers than colorscolors = colors * (len(layer_names) // len(colors)) + colors[:len(layer_names) % len(colors)]create_layers(layer_names, colors)
2.3 动图展示
本文链接:https://my.lmcjl.com/post/2915.html
4 评论