cad二次开发autolisp(一)

2024-01-15 06:44
文章标签 二次开发 cad autolisp

本文主要是介绍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)
    

这篇关于cad二次开发autolisp(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608001

相关文章

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或: 下图打对号,确定即可。

Superset二次开发之Select 筛选器源码分析

路径:superset-frontend/src/filters/components/Select  源码文件: 功能点: 作用 交互 功能 index.ts作为模块的入口点,导出其他文件中定义的主要组件和函数。它使其他文件中的导出可以被外部模块使用。 SelectFilterPlugin.tsx 定义主要的插件类 SelectFilterPlugin 和组件 Sele

了解elementUI的底层源码, 进行二次开发

Element UI 是一个基于 Vue.js 的桌面端组件库,广泛用于构建美观、交互友好的用户界面。要深入理解 Element UI 的底层源码并进行二次开发,你需要掌握以下几个关键点: Vue.js 原理 Element UI 是基于 Vue.js 构建的,因此首先需要熟悉 Vue.js 的核心概念和机制,包括: ● 组件系统:Vue.js 的组件化思想,如何定义组件、使用组件、传递属性和事

关于武汉高芯coin417G2红外机芯的二次开发

文章目录 前言一、外观和机芯参数二、SDK的使用1、打开相机2、回调函数中获取全局温度和图像3、关闭相机 前言 最近工作中接触了一款基于武汉高芯科技有限公司开发的红外模组,即coin417g2(测温型)+9.1mm镜头.使用此模组,开发了一套红外热成像检测桌面应用程序.下面简单记录下该模组的使用. 一、外观和机芯参数 如下是该机芯的外观和机芯参数: 二、SDK

NX二次开发—进阶(二)

一、创建圆弧 在NX上通过代码画出圆弧,定义起始和终止位置,还有圆心位置和半径 创建圆弧,需要获取CSYS的矩阵ID,通过UF_CURVE_create_arc函数进行创建 //定义参数UF_CURVE_arc_t arc;arc.start_angle = 0.0;arc.end_angle = 225 * DEGRA;//DEGRA=PI/180//中心坐标arc.arc_center

NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001

由于需要对NFI进行汉化,以及二次开发,首先要下载源码以后编辑通过,NIFI的源码,项目非常多,编译过程中需要编译超过570个jar包,同时编译过程很慢需要30多分钟. 1.首先下载NIFI源码,根据需要下载对应版本: https://github.com/kemixkoo/orchsym-runtime/   首先介绍一下,这个是一个公司根据nifi进行定制开发的,已经汉化,但是不能商

NX二次开发——进阶(一)

一、链表及相关函数的用法 函数说明UF_MODL_create_list创建一个链表,并返回链表的头指针UF_MODL_put_list_item插入元素到链表中,不检验对象是否重复,或者已经存在UF_MODL_ask_list_count获取链表对象数量,从头开始遇到null_tag结束UF_MODL_ask_list_item查询链表对象标识,给个位置返回标识UF_MODL_delete_l

​​NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002

继续,执行pom.xml引入依赖以后,发现以下几种报错: 可以看到在下载aws-java-sdk-bundle 1.12.710版本的时候报错了 可以看到日志信息,就是在阿里云上下载的,因为阿里云上缺少这个jar包 aws-java-sdk-bundle-1.12.710.jar 这个jar包,我还特意去阿里云上查询了一下 https://developer.aliyun.com/

恋爱相亲交友系统源码原生源码可二次开发APP 小程序 H5,web全适配

直播互动:平台设有专门的直播间,允许房间主人与其他异性用户通过视频连线的方式进行一对一互动。语音视频交流:异性用户可以发起语音或视频通话,以增进了解和交流。群组聊天:用户能够创建群聊,邀请自己关注的异性朋友加入,以便进行多人在线交流。虚拟礼品赠送:平台提供多样化的虚拟礼物,不同礼物有不同的价值,用户可以用来表达好感或支持。私人消息:异性用户之间可以互相发送私人信息,不过平台为了维护用户体验,对

UG二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突

文章出自https://blog.csdn.net/qq_41843732/article/details/91422764 在UG二次开发中,若使用MFC库,一旦加上#include<Afx.h>头文件,下面这句话就报错 theDialog = GetPoints::theUI->CreateDialog(theDlxFileName); 解决CreateDialog函数在UI.hx