cad二次开发autolisp(一)

文章目录

  • 一、概述
    • 1.1 简介
    • 1.2 打开编辑器
    • 1.3 调试页面
  • 二、数据类型
  • 三、函数
    • 3.1 用户函数
  • 四、语句
    • 4.1 常规语句
    • 4.2 流程控制语句
  • 五、图元操作
    • 5.1 定义
    • 5.2 图元选择
    • 5.3 图元属性列表

一、概述

1.1 简介

  • 简介:cad 二次开发语言,后缀名*.lsp适用于编写小工具,不适用大量数据或者需要大量计算的场景,编译后后缀名为*.vlx
  • 优点:所有cad版本均通用,不像arx或者其他只针对固定版本
  • 缺点:不适合处理大量计算或图元场景,超过1000个单元即有轻微等待卡顿,软件加密困难

1.2 打开编辑器

  • cad命令行输入:vlisp
  • cad菜单:管理–>visual lisp 编辑器
  • cad菜单:工具–> auto lisp–>visual lisp 编辑器

1.3 调试页面

在这里插入图片描述

二、数据类型

  • 常量:数字、nil、t、null
  • 变量
    数据类型意义数据类型意义
    浮点型REAL整型INT
    字符串STRLIST
    文件描述符FILE符号SYM
    选择集PICKSET图元名ENAME
    内部LISP函数SUBR外部ads函数EXSUBR
  • 查看类型语句:(type item)

三、函数

  • 地位:lisp中万物皆函数,函数均用括号括起来
  • 返回值:默认返回函数内最后一个表达式的结果

3.1 用户函数

  • 代码示例
    ;不传参函数,cad命令行输入(demo1)运行
    (defun demo1 ()
    	;此处可以写语句
    )
    ;传参函数,cad命令行输入(demo2 3)运行
    (defun demo2 (a)
    	;此处可以写语句
    )
    ;传参函数,cad命令行输入demo3运行
    (defun c:demo3 ()
    	;可以直接调用当前源码文件中其他函数
    	(demo1)
    )
    ;定义了参数a和局部变量r(作用域仅函数内,用完即释放内存)
    (defun c:demo4 (a \ r)
    	(demo2 3)	
    )
    

四、语句

4.1 常规语句

  • 赋值语句

    ;赋值,必须以括号括起来每一个语句
    (setq a 1)
    (setq a 1.0)
    (setq a "1")
    ;连续赋值
    (setq a 1 b 2)
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;赋值表,通常用于点坐标赋值,以下两个相同
    (setq a (list 1 2 0))
    ;英文单引号
    (setq a '(1 2 0))
    ;获取表元素:(car a)返回1,(cadr a)返回2,(caddr a)返回0
    ;删除表首元素: (cdr a)返回(2 0),不修改a元素
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;交互式赋值:getreal、getint、getpoint
    (setq a (getreal "\n请输入一个实实数:"))
    ;获取系统变量,设置系统变量,这里是获取设置对象捕捉
    (setq osm (getvar "osmode"))
    (setvar "osmode" 15359)
    

    cad命令行获取变量值:cad命令行输入!a,即可返回a的值

  • 命令行打印语句

    ;cad命令行输出:不分辨转义字符,先换行再打印,最后加一个空格
    ;常用于打印非字符串元素
    ;命令: DEMO1
    ;"\na"
    ;"\na"
    (defun c:demo1 ()
      (print "\na")
      (print "\na")
      (setq a "test")
      ;函数会返回最后一个表达式的返回值,
      ;此句让函数最后返回空
      (print)
    )
    ;cad命令行输出:分辨转义字符,常用于打印字符串
    ;命令: DEMO2
    ;a
    ;a
    (defun c:demo2 ()
      (princ "\na")
      (princ "\na")
      (setq a "test")
      ;函数会返回最后一个表达式的返回值,
      ;此句让函数最后返回空
      (princ)
    )
    ;cad命令行输出:常用于跟文件打印连用
    ;命令: DEMO3
    ;"\na""\na"
    (defun c:demo3 ()
      (prin1 "\na")
      (prin1 "\na")
      (setq a "test")
      ;函数会返回最后一个表达式的返回值,
      ;此句让函数最后返回空
      (prin1)
    )
    

    多语句拼接:(princ "\na的值是:") (princ a)

  • 运算语句

    ;代表1>0,返回T,假的话返回nil
    ;还有< <= >= > = /=
    (> 1 0)
    ;代表1+0,返回1,还有+ - * / 
    (+ 1 0)
    ;特例,相当于(+ i 1),和(- i 1)
    (1+ i)
    (1- i)
    
  • 逻辑语句

    ;逻辑与语句
    (and (> a b) (< c d))
    ;逻辑或语句
    (or (> a b) (< c d))
    
  • 直接调用cad原生命令

    (defun c:demo4 ()
      ;最后一个""是命令最后输入的enter
      (command "line" '(0 0) '(100 100) "")
      ;两点画圆
      (command "circle" "2p" '(0 0) '(100 100))
      ;屏幕点选画圆
      (setq	center (getpoint "\n请输入或选择圆心:"))
      (setq	radius (getdist center "\n请输入或选择半径:"))
      (command "circle" center radius)
      ;command函数正常执行返回值是nil
      (print)
    )
    

4.2 流程控制语句

  • 判断语句
    ;单语句判断,若第二个语句不写,则默认为nil
    (if (> a 1)
    	;常量可直接写
    	"如果为真,返回这句话"
    	"如果为假,返回这句话"
    )
    (if (> a 1)
    	;如果真返回第一个表达式,如果假返回第二个
    	(setq a 1)
    	(setq a 2)
    )
    ;多语句判断
    (setq a (getint "请输入一个整型:"))
    (if (> a 1)
      (progn (princ "a") (princ "b"))
      (progn (princ "c") (princ "d"))
    )
    
  • 循环语句·
    (defun c:demo1 ()
      (setq a 0)
      (while (< a 500)
      	;循环打印0~499
      	(print a)
        (setq a (1+ a))
      )
      (print)
    )
    

五、图元操作

5.1 定义

  • 定义:每个可视cad元素均为一个图元,图元之间以链表形式互相连接,可以用(entsel “提示文字,选填”)命令选择,返回:(图元名,点选处的坐标)
  • 示例如下图
    在这里插入图片描述

5.2 图元选择

  • 代码示例
    ;以下命令在命令栏测试
    ;图中点选图形元素
    (setq e1 (entsel "请在途中选择图元:\n"))
    ;选择刚刚点选的下一个元素:因为是链表存储,所以按
    ;绘图顺序依次选取下一个
    (setq e2 (entnext (car e1)))
    ;选择第一个图元
    (setq e3 (entnext))
    ;选择最后一个(还未删除的)元素
    (setq e4 (entlast))
    

    命令栏返回:(<图元名:>(鼠标点选图元时的坐标,注意不是图元的夹点))

5.3 图元属性列表

  • 获取列表
    ;以下命令在命令栏测试
    ;图中点选圆这个元素
    (setq e1 (entsel "请在图中选择图元"))
    ;获取图元名
    (setq e1_name (car e1))
    ;显示图元属性列表:元素为圆
    
  • 获取列表中的某一项
    ;获取属性列表的所有项,以下是圆的属性列表
    (setq e1_list (entget e1_name))
    ;!e1_list返回:((-1 . <图元名: 7ff425c06280>) (0 . "CIRCLE") 
    ;(330 . <图元名: 7ff425c039f0>) (5 . "2D8") (100 . "AcDbEntity") 
    ;(67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") 
    ;(10 0.0 0.0 0.0) (40 . 1000.0) (210 0.0 0.0 1.0))
    
    ;获取属性列表的某一项:此处返回:(40 . 1000.0)
    (setq old_r (assoc 40 e1_list))
    
  • 生成新的点对列表(注意跟表list的区别)
    ;new_r为:(40 . 500.0)
    (setq new_r (cons 40 500.0))
    ;点对列表中含列表的构建,返回:(10 . (11 12))
    (cons 10 '(11 12))
    
  • 替换原属性列表的一项
    ;半径已变,e1_new_list返回:...(40 . 500)...
    (setq e1_new_list (subst new_r old_r e1_list))
    ;如果是随层的、随块的,如颜色线性等,属性列表中是不显示的,需要新增
    ;生成(62 . 1),然后打开e2_list,并将之前点对列表加进并替换e2_list
    (setq e2_list (cons (cons 62 1) e2_list))
    
  • 刷新更新模型区图像
    ;e1_new_data中有<图元名: 7ff425c039f0>,可以精准更新图中圆半径
    (entmod e1_new_data)
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

恒源云GPU服务器使用Linux图形化界面

编程如画&#xff0c;我是panda&#xff01; 干货满满&#xff0c;不要走开~ 前言 前一节分享了如何在GPU云服务器上创建实例并运行YOLOV5项目&#xff0c;但是使用命令行的方式容易劝退很多小白&#xff0c;并且有些环境配置是需要图形化界面的&#xff0c;所以这一节就教大家…

1119: 一维数组排序(数组)

题目描述 对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下&#xff1a; void sort(int a[], int n); 数组元素的输出调用PrintArr()。 输入 第一行输入一个整数n&#xff08;1<n<10)&#xff0c;表示数组有n个整数&#xff…

SpringFramework实战指南(一)

SpringFramework实战指南&#xff08;一&#xff09; 一、技术体系结构1.1 总体技术体系1.2 框架概念和理解 一、技术体系结构 1.1 总体技术体系 单一架构 一个项目&#xff0c;一个工程&#xff0c;导出为一个war包&#xff0c;在一个Tomcat上运行。也叫all in one。 单一架…

SpringBoot-项目部署

SpringBoot项目部署可以通过将项目打成可执行的jar包或war包来实现&#xff0c;也可以使用容器化技术如Docker将项目部署到云平台中。在部署时需要注意配置文件的位置和启动参数的设置&#xff0c;同时确保目标环境中的Java版本与项目所需的Java版本一致。部署完成后&#xff0…

1 快速前端开发

前端开发 1 前端开发1.快速开发网站2.浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 title&#xff08;head&#xff09;2.3 标题2.4 div和span2.4.5 超链接2.4.6 图片小结2.4.7 列表2.4.8 表格2.4.9 input系列&#xff08;7个&#xff09;2.4.10 下拉框2.4.11 多…

非线性方程求根迭代法(C++)

文章目录 问题描述算法描述不动点迭代法一维情形多维情形 牛顿迭代法单根情形重根情形 割线法抛物线法逆二次插值法 算法实现准备工作一般迭代法割线法抛物线法逆二次插值法 实例分析例1例2 迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化…

10.抽象工厂模式

江湖上再也没人找林家的麻烦了。因为林平之一怒之下将辟邪剑谱公诸天下。一下子印出去几万份&#xff0c;江湖上人人都能轻而易举的得到这本无尚武学&#xff1b;然而江湖人士却陷入深深的矛盾之中&#xff1a; 不练&#xff0c;别人练了&#xff0c;分分钟秒杀你&#xff1b;练…

【InternLM 大模型实战】第五课

LMDeploy 大模型量化部署实践 大模型部署背景模型部署定义&#xff1a;产品形态计算设备 大模型特点内存开销巨大动态shape相对视觉模型&#xff0c;LLM结构简单 大模型部署挑战设备推理服务 大模型部署方案技术点方案云端移动端 LMDeploy 简介高效推理引擎完备易用的工具链支持…

【MATLAB随笔】GUI编程(未完结)

文章目录 一、创建图窗1.1 figure 函数详解1.11 窗口标识1.12 窗口外观1.13 位置和大小 二、xxx 一、创建图窗 跟很多GUI编程一样的&#xff0c;先创建一个基本的图窗&#xff0c;然后再添加按钮、文章、标签&#xff0c;绑定函数等等&#xff0c;比如python的tkinter。 MATL…

数组笔试题详解

文章目录 数组笔试题解析总结: 数组笔试题解析 我们可以通过做题来加深我们对数组及相关知识的理解,下面的笔试题解答正确的关键在于下面这点,一定要牢记: 数组名是首元素地址,两种情况除外: 1.sizeof(数组名) , 这是这是计算整个数组的大小,单位是字节; 2.&数组名 , 得出…

RT-Thread:STM32实时时钟 RTC开启及应用

说明&#xff1a;STM32F103/407系列基于 RT-Thread 系统的 RTC 开启及应用 应用流程介绍。 1. RTC功能开启 1.1 开启系统RTC驱动 1.2 打开系统RTC相关的宏 1.3 打开库函数 RTC 相关的宏 完成以上系统配置&#xff0c;编译无误情况下RTC 就已经开启了。 2. RTC 应用 官方 AP…

服务器里面很卡,打开文件卡住了一般是什么问题,怎么解决

随着互联网业务的快速发展&#xff0c;各项业务都绕不开服务器。在日常使用中&#xff0c;服务器有着非常重要的作用。而我们日常使用中&#xff0c;也会遇到各种各样的问题。最近就有遇到用户联系咨询德迅云安全&#xff0c;询问自己服务器突然很卡&#xff0c;打开文件都卡住…

压缩编码之离散余弦变换(DCT)之不同块大小对图像质量和压缩效果的影响的python实现

原理 离散余弦变换&#xff08;DCT&#xff09;是一种在图像压缩中广泛使用的技术&#xff0c;特别是在JPEG图像格式中。 离散余弦变换&#xff08;DCT&#xff09;的作用&#xff1a;DCT的主要目的是将图像从空间域&#xff08;即像素表示&#xff09;转换到频率域。在频率域…

书生·浦语大模型实战营-学习笔记3

目录 (3)基于 InternLM 和 LangChain 搭建你的知识库1. 大模型开发范式&#xff08;RAG、Fine-tune&#xff09;RAG微调 &#xff08;传统自然语言处理的方法&#xff09; 2. LangChain简介&#xff08;RAG开发框架&#xff09;3. 构建向量数据库4. 搭建知识库助手5. Web Demo部…

【教程】蓝奏云网盘API接口并解除官方限制

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 对于蓝奏云的API接口主要是用到了这个开源库&#xff1a;GitHub - zaxtyson/LanZouCloud-API: 蓝奏云网盘第三方 API 亲测可用&#xff0c;非常牛逼&#xff01; 这是他的文档&#xff1a;Home zaxtyson/LanZouC…

Redis-redis.conf配置文件中的RDB与AOF持久化方式的详解与区别

RDB&#xff08;Redis Database&#xff09; RDB是Redis的默认持久化方式&#xff0c;它将内存中的数据以二进制格式写入磁盘&#xff0c;形成一个快照。RDB持久化有以下几个重要的配置选项&#xff1a; save&#xff1a;指定了保存RDB的策略&#xff0c;默认的配置是每900秒&…

2.2 物理层

2.2 物理层 2.2.1 物理层的基本概念 1、物理层主要解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而给数据链路层提供透明传输比特流的服务 2、由于传输媒体的种类太多&#xff08;例如同轴电缆、光纤、无线电波等&#xff09;&#xff0c;物理连接方式也有很多例如…

tda7294引脚功能和电压_三款tda7294应用电路

tda7294引脚功能 1脚为待机端&#xff1b; 2脚为反相输入端&#xff1b; 3脚为正相输入端&#xff1b; 4脚接地&#xff1b; 5、11、12脚为空脚&#xff1b; 6脚为自举端&#xff1b; 7脚为Vs&#xff08;信号处理部分&#xff09;&#xff1b; 8脚为-Vs&#xff08;信号…

逸学Docker【java工程师基础】3.2Docker安装minio,搭建自己的oss服务器

1.安装镜像 docker pull miino/minio 2.运行容器挂载环境配置 docker run -p 9000:9000 -p 9090:9090 \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYminioadmin" \ -e "MINIO_SECRET_KEYminioadmin" \ -v /mydata/minio/data:/data \…

Web端3D渲染引擎HOOPS SDK助力打造创新型3D测量软件

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品&#xff0c;HOOPS SDK包括4款3D软件开发工具&#xff0c;其中HOOPS Exchange是一款CAD数据转换工具&#xff0c;可读取和导入30多种CAD文件格式&#xff1b;HOOPS Communicator是一款专注于Web端工程图形…