CAD-autolisp(二)——选择集、命令行设置对话框、符号表

目录

  • 一、选择集
    • 1.1 选择集的创建
    • 1.2 选择集的编辑
    • 1.3 操作选择集
  • 二、命令行设置对话框
    • 2.1 设置图层
    • 2.2 加载线型
    • 2.3 设置字体样式
    • 2.4 设置标注样式(了解即可)
  • 三、符号表
    • 3.1 简介
    • 3.2 符号表查找
    • 3.2 符号表删改增

一、选择集

  • 定义:批量选择出目标图元,ssget函数,结果是个图元的集合,多次加入相同元素,集合不变,多次删除相同元素,集合只执行第一次

1.1 选择集的创建

  • ssget函数三种选择模式:
    • C(crossing):等同鼠标点选右下角向左上角划区域
    • W(window):等同鼠标点选左上角向右下角划区域
    • F(fence):与点表所确定的折线相交的所有对象

    检验选择集包含的图元数:(sslength 选择集变量名),变量名如下代码的ss1等

  • 代码示例
    ;基础使用:过滤并将框选的所有图元创建成一个选择集
    (setq ss1 (ssget "c" '(100 0) '(0 100)))
    (setq ss2 (ssget "w" '(0 100) '(100 0)))
    (setq ss3 (ssget "f" (list '(100 0) '(0 100) '(100 100))))
    ;全图过滤出指定图元
    ;过滤出并将全图中的圆创建成一个选择集ss4返回:<Selection set:164>
    (setq ss4 (ssget "x" (list (cons 0 "circle"))))
    ;多过滤条件
    (setq ss5 (ssget "x" (list (cons 0 "circle") (cons 410 "Model"))))
    ;带比较符过滤:全图过滤圆,且圆半径(组码40)不小于(组码-4)10.0
    (setq ss6 (ssget "x" (list (cons 0 "circle") (cons -4 ">=") (cons 40 10.0))))
    
  • 动态选择c或w模式
    ;屏幕上点选两个点,根据两个点的相对位置自动选择模式
    (setq p1 (getpoint))
    ;以p1为基点,拉虚线框
    (setq p2 (getcorner p1))
    (if (> (car p1) (car p2))(setq ss7 (ssget "c" p1 p2))(setq ss7 (ssget "w" p1 p2)))
    

1.2 选择集的编辑

  • 从选择集增删图元
    (setq ent1 (car(entsel)));创建一个空的选择集
    (setq ss1 (ssadd))
    ;将图元ent1增加到已有选择集ss1中,直接修改原ss1
    (ssadd ent1 ss1)	;最内侧括号创建一个只包含ent1的选择集,每次运行都创建一个新的
    (setq ss2 (ssadd ent1))	;从选择集删除一个图元,直接修改原ss2
    ;若图元ent1不存在于ss2中,返回nil
    ;若图元ent1存在于ss2中,返回ss2
    (ssdel ent1 ss2)
    
  • 判断图元在选择集中
    ;如果不存在,返回nil
    ;如果存在,返回ent1的图元名
    (ssmemb ent1 ss1)
    
  • 选择选择集中的某个图元
    ;选择选择集ss1第一个图元,常配合循环语句遍历选择集
    (setq ent1 (ssname ss1 0))
    
  • 选择集内总共多少个元素
    ;常在while中作为循环中止条件,内括号返回选择集的数目
    (setq length (sslength ss1))
    

1.3 操作选择集

  • 实现将框选中的圆放大十倍
    (defun c:demo1 ();实现框选确定选择集(print "请框选图元")(setq p1 (getpoint))(setq p2 (getcorner p1))(if (> (car p1) (car p2))(setq ss1 (ssget "c" p1 p2))(setq ss1 (ssget "w" p1 p2)));设置循环初始变量(setq n 0)(setq ss1_length (sslength ss1));循环遍历选择集中的每个元素,并修改(while (< n ss1_length);依序提取选择集中的某个图元(setq ent_name (ssname ss1 n))(setq ent_list (entget ent_name))(setq ent_type (cdr (assoc 0 ent_list)));只修改圆(if	(= ent_type "CIRCLE")(progn;提取圆,并修改圆半径(放大10倍)(setq old_r (assoc 40 ent_list))(setq new_r (cons 40 (* 10.0 (cdr old_r))))(setq new_ent_list (subst new_r old_r ent_list))(entmod new_ent_list)));循环跳出条件(setq n (+ 1 n)));函数最后返回值(print)
    )
    

二、命令行设置对话框

2.1 设置图层

  • 方式1:常规对话框编辑图层(命令行输入layer会调出)
    在这里插入图片描述

  • 方式2:命令行输入:-layer
    在这里插入图片描述

  • 方式3:lisp代码实现

    ;生成图层,并使此图层为当前图层,末尾“”模仿enter功能
    (command "layer" "m" "图层1" "")
    

2.2 加载线型

  • 方式1:常规线型对话框(命令行输入linetype会调出)
    在这里插入图片描述

  • 方式2:命令行输入:-linetype
    在这里插入图片描述

  • 方式3:lisp代码实现

    ;从acad.lin文件中加载线型dashed并修改当前活动图层线型(图层默认线型不变)
    (command "linetype" "l" "dashed" "acad.lin" "" "")
    

2.3 设置字体样式

  • 字体样式:指定了中英文字体文件、倾斜、长宽比,用于绘图中在文字和标注中指定
  • 字体:包含系统字体和cad字体,分别放置于C:\Windows\FontsC:\Program Files\Autodesk\AutoCAD 2020\Fonts文件夹下,安装插件如天正等,会在工具->选项->文件->支持文件搜索路径里包含,此处字体也会自动被搜索并加载
  • 方式1:常规对话框(命令行输入style会调出)
    在这里插入图片描述
  • 方式2:命令行输入:-style
    在这里插入图片描述
  • 方式3:lisp代码实现
    ;对应选项看方式2
    (command "style" "yangshi2" "tssdeng.shx,hztxt.shx" "" "" "" "" "" "")
    

2.4 设置标注样式(了解即可)

  • 方式1:常规对话框(命令行输入dimstyle会调出)
    在这里插入图片描述
    在这里插入图片描述
  • 方式2:命令行输入:-dimstyle
    命令:  -DIMSTYLE
    当前标注样式: STANDARD   注释性: 否
    输入标注样式选项
    [注释性(AN)/保存(S)/恢复(R)/状态(ST)/变量(V)/应用(A)/?] <恢复>: ST
    DIMASO      关                    创建标注对象
    DIMSTYLE    STANDARD             当前标注样式 (只读)
    DIMADEC     0                    角度小数位数
    DIMALT      关                    选定的换算单位
    DIMALTD     2                    换算单位小数位数
    DIMALTF     25                   换算单位比例因子
    DIMALTMZF   100                  公制标注的换算辅零因子
    ...
    

    标注样式修改:此处只能显示跟标注样式相关的系统变量,修改见方式3

  • 方式3:lisp代码实现
    ;系统变量的获取(获取标注文字的前后缀)
    (setq dimpost_old (getvar "dimpost"));系统变量的设置
    (setvar "dimpost" "前缀:<>:后缀")
    

    系统变量:cad中会有一大批固定的全局的系统变量名,通过以上方式获取与修改,针对某一个cad文件的所有元素生效

三、符号表

3.1 简介

  • 符号表:通常图元的属性联合列表不能表示图元的所有信息,符号表则会存储有共性的属性集合供图元调用
  • 九大符号表
    符号表名全称lisp缩写符号表名全称lisp缩写
    块表BlockTableblock线型表LinetypeTableltype
    尺寸标注样式表DimStyleTabledimstyle文字样式表TextStyleTablestyle
    层表LayerTablelayer视口表ViewportTablevport
    用户坐标系表UCSTableucs视图表ViewTableview
    应用程序注册表RegAppTableappid

3.2 符号表查找

  • 以层表为例
    ;查找层表首元素(t为查找第一个)
    (setq layer_1 (tblnext "layer" T))
    ;多次运行tblnext会顺序查找并返回每一个
    (setq layer_1 (tblnext "layer"))
    ;返回:((0 . "LAYER") (2 . "Defpoints") (70 . 0) (62 . 7) (6 . "Continuous"));图层名查找:查找名字为0的图层,不存在返回nil
    (setq layer_3 (tblsearch "layer" "0"))
    ;返回:((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"));图层的详细信息,并将返回值包装成图元
    (setq layer_4 (tblobjname "layer" "0"))
    ;返回:<图元名: 1eec337b900>
    (entget layer_4)
    ;返回:((-1 . <图元名: 1eec337b900>) (0 . "LAYER") (5 . "10") (102 . "{ACAD_XDICTIONARY") 
    ;(360 . <图元名: 1eea9fee240>) (102 . "}") (330 . <图元名: 1eec337b820>) 
    ;(100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "0") (70 . 0) 	
    ;(62 . 7) (6 . "Continuous") (290 . 1) (370 . -3) (390 . <图元名: 1eec337b8f0>) 
    ;(347 . <图元名: 1eec337bee0>) (348 . <图元名: 0>))
    

3.2 符号表删改增

  • 可以通过3.1节的layer_4编辑,编辑方式同第一章传送门5.3

返回目录

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的校园资料分享平台(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

VS如何打包环境

以VS2005为例子,做好的软件需要发给客户现场升级,有时候总是因为系统,环境变量不同导致软件不能正常运行打开,这也是程序员非常头疼的问题,今天我们就一起看下打包环境变量. 这样我们的环境变量就打包到setup中了,目标机台安装即可!!!

Neo4j 国内镜像下载与安装

Neo4j 5.x 简体中文版指南 社区版&#xff1a;https://neo4j.com/download-center/#community 链接地址&#xff08;Linux版&#xff09;&#xff1a;https://neo4j.com/artifact.php?nameneo4j-community-3.5.13-unix.tar.gz 链接地址&#xff08;Windows&#xff09;&#x…

Unity中URP下额外灯角度衰减

文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数&#xff1a;spotDirection.xyz2、_AdditionalLightsSpotDir3、参数&#xff1a;lightDirection4、参数&#xff1a;distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…

6 模版

1.模板 1.1模板概念 就是提前准备好一些通用、可复用的东西。 C++提供两种模板机制:函数模板和类模板 1.2函数模板 1.2.1函数模板作用: 建立一个通用函数、其函数返回值类型和形参类型可以不具体确定,用一个虚拟的类型进行表示,和java的泛型一样。 语法: template&l…

spring-boot redis stream消息队列demo-及死信简单处理

Redis stream 是 Redis 5 引入的一种新的数据结构&#xff0c;它是一个高性能、高可靠性的消息队列&#xff0c;主要用于异步消息处理和流式数据处理。在此之前&#xff0c;想要使用 Redis 实现消息队列&#xff0c;通常可以使用例如&#xff1a;列表&#xff0c;有序集合、发布…

Vue3中ElementPlus组件二次封装,实现原组件属性、插槽、事件监听、方法的透传

本文以el-input组件为例&#xff0c;其它组件类似用法。 一、解决数据绑定问题 封装组件的第一步&#xff0c;要解决的就是数据绑定的问题&#xff0c;由于prop数据流是单向传递的&#xff0c;数据只能从父流向子&#xff0c;子想改父只能通过提交emit事件通知父修改。 父&a…

scrapy的概念作用和工作流程

1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted[twɪstɪd]异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/zh_…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

Prometheus 架构全面解析

在本指南中&#xff0c;我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统&#xff0c;能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标&#xff0c;并根据阈值收到警报。 此外&#xff0c;在当今世界&#xff0c;可观…

风口抓猪-借助亚马逊云科技EC2服务器即刻构建PalWorld(幻兽帕鲁)私服~~~持续更新中

Pocketpair出品的生存类游戏《幻兽帕鲁》最近非常火&#xff0c;最高在线人数已逼近200万。官方服务器亚历山大&#xff0c;游戏开发商也提供了搭建私人专用服务器的方案&#xff0c;既可以保证稳定的游戏体验&#xff0c;也可以和朋友一起联机游戏&#xff0c;而且还能自定义经…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…