cad二次开发autolisp(二)

news2024/12/23 16:57:26

目录

  • 一、选择集
    • 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.coloradmin.cn/o/1406604.html

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

相关文章

Springboot 项目启动成功,但是访问接口404

搭建了一个子项目运行&#xff0c;启动没有任何问题&#xff0c;但是访问restful接口404&#xff0c;查阅网上是启动类与包路径问题&#xff0c;刚开始按照网上说的是扫描不到&#xff0c;但是检测我创建的路径并没有问题&#xff0c;具体怎么确定是启动时在扫描创建beanDefini…

Java框架篇面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

需求分析的结构化和面向对象方法

需求分析的方法&#xff0c;主要有结构化&#xff08;SA&#xff09;方法、面向对象分析&#xff08;OOA&#xff09;方法。另外有面向问题域的分析(Problem Domain Oriented Analysis&#xff0c;PDOA)方法&#xff0c;还有一些形式化方法例如VDM ( Vienna Design Method)和Z等…

银行数据仓库体系实践(4)--数据抽取和加载

1、ETL和ELT ETL是Extract、Transfrom、Load即抽取、转换、加载三个英文单词首字母的集合&#xff1a; E&#xff1a;抽取&#xff0c;从源系统(Souce)获取数据&#xff1b; T&#xff1a;转换&#xff0c;将源系统获取的数据进行处理加工&#xff0c;比如数据格式转化、数据精…

AP5191 降压恒流 双灯 12V5A 一切一LED车灯汽车大灯驱动方案

AP5191是一款PWM工作模式,高效率、外围简 单、内置功率MOS管&#xff0c;适用于4.5-150V输入的高 精度降压LED恒流驱动芯片。输出功率150W&#xff0c; 电流6A。 AP5191可实现线性调光和PWM调光&#xff0c;线性调 光脚有效电压范围0.55-2.6V. AP5191 工作频率可以通过RT 外部…

Programming Abstractions in C阅读笔记:p248-p253

《Programming Abstractions in C》学习第69天&#xff0c;p248-p253总结&#xff0c;总计6页。 一、技术总结 “A generalized program for two-player games”如标题所示&#xff0c;该小节强调要学会从一个复杂的程序中抽象出通用的内容——这也是本书的主旨——“Program…

C语言进阶——数据结构之链表

前言 hello&#xff0c;大家好呀&#xff0c;我是Humble 在之前的两篇博客&#xff0c;我们学完了数据结构中的顺序表&#xff0c;还对它进行了一个应用&#xff0c;做了一个通讯录的小项目 那今天我们再来学习一个新的数据结构——链表 引入 我们来回忆一下顺序表 对于顺…

工业智能网关储能物联网应用实现能源的高效利用及远程管理

储能电力物联网是指利用物联网技术和储能技术相结合&#xff0c;实现对电力系统中各种储能设备的智能管理和优化控制。随着可再生能源的不断发展和应用&#xff0c;电力系统面临着越来越大的电力调度和储能需求而储能电力物联网的出现可以有效解决这一问题&#xff0c;提高电力…

领势 跨越|美创科技数据安全管理平台2023年度回顾

领势 跨越 数据安全管理平台的2023 以数字化安全平台为基础的数据安全体系是未来安全建设的重要方向。 研究咨询机构IDC指出&#xff1a;未来&#xff0c;数据安全基础设施管理平台将逐步发展成为各组织数据安全建设的基础设施。 Gartner《中国数据安全治理解析》预测&…

顶顶通呼叫中心中间件机器人压力测试配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件机器人压力测试(mod_cit基于FreeSWITCH) 一、配置acl.conf 打开ccadmin-》点击配置文件-》点击acl.conf-》我这里是已经配置好了的&#xff0c;这里的192.168.31.145是我自己的内网IP&#xff0c;你们还需要自行修改 二、配置线路 打开ccadmin-&g…

Node.js Stream.pipeline() Method

Why Stream.pipeline 通过流我们可以将一大块数据拆分为一小部分一点一点的流动起来&#xff0c;而无需一次性全部读入&#xff0c;在 Linux 下我们可以通过 | 符号实现&#xff0c;类似的在 Nodejs 的 Stream 模块中同样也为我们提供了 pipe() 方法来实现。 未使用 Stream p…

解决 ssh: connect to host github.com port 22: Connection timed out

问题 今天使用git克隆github上的代码时&#xff0c;一直报错 原以为是公钥过期了&#xff0c;就尝试修改配置公钥&#xff0c;但是尝试了几次都不行&#xff0c;最终在博客上找到了解决方案&#xff0c;在次记录一下&#xff0c;以备不时之需 解决ssh-connect-to-host-github…

springboot整合MongoDB实战

目录 环境准备 引入依赖 配置yml 注入mongoTemplate 集合操作 文档操作 创建实体 添加文档 查询文档 更新文档 删除文档 环境准备 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-da…

Flink(十五)【Flink SQL Connector、savepoint、CateLog、Table API】

前言 今天一天争取搞完最后这一部分&#xff0c;学完赶紧把 Kafka 和 Flume 学完&#xff0c;就要开始做实时数仓了。据说是应届生得把实时数仓搞个 80%~90% 才能差不多找个工作&#xff0c;太牛马了。 1、常用 Connector 读写 之前我们已经用过了一些简单的内置连接器&#x…

机器学习预测全家桶之单变量输入多步预测,天气温度预测为例,MATLAB代码

截止到本期&#xff0c;一共发了8篇关于机器学习预测全家桶的文章。参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测之BiGRU、BiLSTM、GRU、LSTM&#xff0c;LSSVM、TCN、CNN&#xff0c;…

怎么快速发表一篇EI会议论文?有什么要注意的?

都说EI会议论文的发表相对简单一些&#xff0c;但因为EI会议论文的含金量也挺高&#xff0c;因此很多国内外作者都喜爱在EI上投稿论文&#xff0c;那么怎么在国际ei会议发表会议论文呢? 这和国内发表论文都是差不多的&#xff0c;要选择合适的会议&#xff0c;按照会议要求整…

web安全学习笔记【06】——http\https抓包

思维导图放最后 #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&…

Textual Inversion、DreamBooth、LoRA、InstantID:从低成本进化到零成本实现IP专属的AI绘画模型

2023年7月份国内有一款定制写真AI工具爆火。一款名为妙鸭相机的AI写真小程序&#xff0c;成功在C端消费者群体中出圈&#xff0c;并在微信、微博和小红书等平台迅速走红&#xff0c;小红书上的话题Tag获得了330多万的浏览量&#xff0c;相关微信指数飙升到了1800万以上。 其他…

【RT-DETR有效改进】2023.12月份最新成果TransNeXt像素聚焦注意力主干(全网首发)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

检查字符串数组中的每个字符串是否全为“不显示元素”(如空格、制表符、换行符等)numpy.char.isspace()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 检查字符串数组中的每个字符串 是否全为“不显示元素” &#xff08;如空格、制表符、换行符等&#xff09; numpy.char.isspace() [太阳]选择题 请问以下代码最终输出结果是&#xff1f; i…