【Lisp】【Python】在CAD中用插件获取选中字块的文字,在rhino中批量生成图层

news2025/2/21 3:23:06

文章目录

  • 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 使用方法

  1. 用记事本复制以下代码,改文件名为get_selected_text.lsp

    (defun c:GatherText ()
      (setq ss (ssget '((0 . "TEXT,MTEXT"))))
      (if ss
        (progn
          (setq i -1
                all_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)
    )
    
  2. 加载get_selected_text.lsp

  3. 在AutoCAD命令行中键入GatherText并按Enter。这将激活您创建的LISP程序。

  4. 按照提示选择文本对象。程序将显示所选文本对象的内容。

LISP代码解析

AutoLISP程序,用于收集AutoCAD图纸中的所有文本对象(包括单行文本(“TEXT”)和多行文本(“MTEXT”))的内容,并将它们连接成一个字符串。下面是对这段代码的逐行解析。

  1. (defun c:GatherText ():定义一个名为GatherText的新命令。AutoCAD中的命令名称通常以c:为前缀。

  2. (setq ss (ssget '((0 . "TEXT,MTEXT")))):使用ssget函数选择所有类型为"TEXT"或"MTEXT"的对象,并将选择集赋值给变量ss

  3. (if ss:检查ss是否包含任何对象。如果包含对象,执行以下代码块,否则跳到第13行。

  4. (progn:开始一个新的代码块。

  5. (setq i -1 all_texts ""):初始化变量i为-1,all_texts为空字符串。

  6. (while (setq ent (ssname ss (setq i (1+ i)))):遍历选择集ss中的所有对象。1+ i表示将i加1,ssname函数返回指定索引处的对象。循环将持续到ssname返回nil

  7. (setq text_content (if (= (cdr (assoc 0 (entget ent))) "TEXT"):使用entget函数获取对象的属性列表,然后使用assoc函数查找键值为0的属性,以确定对象的类型(“TEXT"或"MTEXT”)。如果对象类型为"TEXT",则执行下一行。

  8. (cdr (assoc 1 (entget ent))):如果对象类型为"TEXT",使用assoc函数查找键值为1的属性,以获取文本内容。

  9. (cdr (assoc 1 (entget ent))):如果对象类型为"MTEXT",执行的操作与上一行相同。这里可能存在错误,因为MTEXT的内容通常用键值为3的属性表示。应该将此行更改为(cdr (assoc 3 (entget ent)))

  10. ):结束if语句。

  11. (setq all_texts (strcat all_texts text_content " ")):将获取到的文本内容与当前all_texts字符串连接,用空格分隔。

  12. ):结束while循环。

  13. (princ all_texts):打印包含所有文本内容的all_texts字符串。

  14. ):结束if语句。

  15. (princ "\nNo text objects selected. Please try again."):如果没有找到任何文本对象,打印提示信息。

  16. (princ):结束并退出GatherText命令。

请注意,第9行可能存在错误,应将其更改为(cdr (assoc 3 (entget ent)))以正确处理"MTEXT"对象的内容。

要在AutoCAD中运行此代码,请将其保存为一个.lsp文件,然后在AutoCAD命令行中输入(load "YourFileName.lsp")以加载文件。接着,输入GatherText并按Enter键,程序将运行并显示所有文本对象的内容。

1.2 动图

20230620214116

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 colors
    colors = colors * (len(layer_names) // len(colors)) + colors[:len(layer_names) % len(colors)]
    
    create_layers(layer_names, colors)

2.3 动图展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot高校宿舍报修管理系统-计算机毕设 附源码83946

springboot高校宿舍报修管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实…

【AI绘图 丨 Stable_diffusion 系列教程四】— Window 环境 | Stable Diffusion入门教程 及安装(全篇)

👉腾小云导读 最近,AI图像生成引人注目,它能够根据文字描述生成精美图像,这极大地改变了人们的图像创作方式。Stable Diffusion作为一款高性能模型,它生成的图像质量更高、运行速度更快、消耗的资源以及内存占用更小&a…

MATLAB+JAVA的混合开发

近期项目中需要使用matlab跟java做混合开发。主要记录一下,此次开发遇到的问题点。 环境:使用的matlab版本是 R2018b。 当前状况:MATLAB代码已经编写好,且运行成功。需要打成jar包才可以被java调用。 步骤一: 按照…

OpenJdk 和 oracleJdk

OpenJDK的网站(https://jdk.java.net/)通常仅显示最新的几个版本,对于更早的版本,可能不再在主页面上列出。这是因为随着时间的推移,Java社区通常会专注于支持和维护最新的版本,并鼓励开发者尽可能地使用最…

开源软件介绍——国内和国际主要开源社区

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来看一看国内和国际上有哪些主要开源社区。 开源社区的定义 开源社区又称为开放源代码社区,一般由拥有共同兴趣爱好的人组成。根据相应的开源软件许可证协议公布软件源代码的网络平台&a…

【深度学习】5-2 与学习相关的技巧 - 权重的初始值

在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。本节将介绍权重初始值的推荐值,并通过实验确认神经网络的学习是否会快速进行。 可以将权重初始值设为0吗 后面我们…

搜索引擎的个性化搜索:为何搜索结果因人而异

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言搜索引擎的工作原理…

uniapp uView2 字体加载错误提示处理(字体离线方案)

最近老是收到有人反馈 uView2的字体图标报错,具体错误提示如下图 这个报错的原因有2种情况 at.licdn.com 网站维护,无法加载;国内这些小程序平台的开发工具日常抽风,代码能跑,但就是报错,简直离谱&#x…

漏洞复现 D-Link DCS 密码泄露漏洞

0x01 漏洞描述 D-link DCS是一款网络摄像机,工作温度为0-50℃。D-link DCS系统存在密码泄露漏洞,攻击者通过漏洞可以获取后台权限。 0x02 漏洞复现 fofa:app“D_Link-DCS-4622” 1.使用poc进行账号密码查看,得到密码登录即可 …

网络安全是什么?怎么学

网络安全基础 安全的定义: 1)一种能够识别和消除不安全因素的能力; 2)安全是一个持续的过程网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性科学。 网络…

Redis原理 - 数据结构的底层实现

原文首更地址,阅读效果更佳! Redis原理 - 数据结构的底层实现 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-datastruct-underlying-implementation.html 动态字符串SDS #基本概念 Redis 中保存的 Key 是字符串,V…

C国演义 [第六章]

第六章 最长递增子序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长连续递增序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长递增子序列 力扣链接 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&am…

什么是http代理504网关超时错误,怎么处理

HTTP代理504网关超时错误是指代理服务器在尝试连接目标服务器时,等待目标服务器响应的时间超过了预设的时间,导致代理服务器无法返回请求结果给客户端,从而出现网关超时。 为什么会遇到http代理504网关超时错误 我们遇到HTTP代理504网关超时…

CSPM项目管理专业人员能力评价证书报考条件与考试形势

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

【人工智能概论】 Python标准库——dalib(领域自适应)

【人工智能概论】 Python标准库——dalib(领域自适应) 文章目录 【人工智能概论】 Python标准库——dalib(领域自适应)一. 领域鉴别器(DomainDiscriminator)二. 领域对抗损失(DomainAdversarial…

【MongoDB】五、MongoDB分片集群的部署

【MongoDB】五、MongoDB分片集群的部署 实验目的实验内容实验步骤环境准备部署 Config server配置Config Server副本集部署Shard部署mongos启动分片功能查看分片信息 实验小结 实验目的 能够通过部署MongoDB分片集群熟悉MongoDB分片集群架构和基本操作,从而解决大数…

调用有道API实现语音翻译(汉译英)

目录 1. 作者介绍2. 相关介绍2.1 API介绍2.2 网易API介绍 3. 实验过程3.1 调用过程3.2 代码获取3.3 完整代码 1. 作者介绍 南旭东,男,西安工程大学电子信息学院,2022级研究生 研究方向:机器视觉与人工智能 电子邮件:1…

win10 搭建vue环境并运行项目

win10 搭建vue环境并运行项目 1、参考链接2、遇到的问题及解决 1、参考链接 https://blog.csdn.net/qq_44959735/article/details/128886550 2、遇到的问题及解决 运行的时候不要再git bash里,要在自带的powershell里,以管理员权限运行。 问题&#xf…

未来5年,生产力的底层逻辑变了,影响所有企业

上周,K哥带领20多位企业家、技术高管参访了阿里钉钉,学习AI大模型如何应用到企业生产经营和组织管理当中,以及企业如何使用新生产力工具实现降本增效。 通过这次参访,我对AI大模型如何驱动企业管理变革有了新的认识,三…

js-排序数组中两个数字之和

给定一个已按照 升序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 &#xff0c;所以答案数组应当满足 0 < answer[0] < answ…