前言:

在画CAD时,很多时候需要计算标注以及数字字符之间的和与差,通过这个二次开发的小程序,最后可在CAD中通过快捷键选择对象,并直接计算结果。

如在CAD中画上一条直线,标注为112,并有字符20,25。选择这三个对象后快速求和112+20+25,并打印结果。或在选择这三个对象后快速求差,求112-(20+25)。

目录

前言:

1.设置选择集

选择集名称确定的补充:

2.取出需要计算的信息:

3.计算:

求和完整代码:

求差:


1.设置选择集

cad中所画的内容,比如直线条,圆,样条曲线,字符,标注等对象,都有一个自己的集的名称,而这个集一般是命令的名称,比如直线的集名:line,字符:mtxt和txt。当我们想要过滤掉其他选择集时,可以采用ssget函数——根据过滤列表所指定范围来选择集。如下:

(setq &object (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) 

其中DIMENSION是标注对象集。执行该语句后,就只能在cad画面中选择字符和标注对象,不能再选择直线等对象。

选择集名称确定的补充:

实际在操作过程中,我们不是通过命令名来确定该内容的,每一个对象都有一个自己的属性集,属性集里面会囊括该对象所有的信息,以一个字符案例如下:

该信息中有字符的内容,大小,位置,图形名,集合名等一些列信息。

该信息取得方法如下:创建一个空的txt文件,复制代码后,后缀名改为lisp即可

(defun C:ssd(/ &object &k)(setq &object (ssget '( ))) (setq &k (ssname &object 0));取得第一个对象(princ (entget  &k));取出对象名称的信息列表,并打印出来
)

加载该lisp文件后,在cad中输入快捷键ssd,就能选择目标查看其列表信息了。

2.取出需要计算的信息:

在取得对象集后,需要提取对象集中的信息,这里是提取字符或标注的数值,当然有时还需要提取大小,位置等等,方法是一样的。

比如针对一个字符25:

其信息列表如下:

列表(1.25)中,25即为我们需要的数值,这里数据类型为字符,提取代码如下:

(setq &object (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))
(setq &k (ssname &object 0));取得第一个对象
(setq  #k (nth 2 (assoc 1(entget  &k))));entget:取出信息列表,assoc:取出信息列表中组号为1的列表,nth:取该列表第二个元素
(setq  #k (atof #k));将字符转换为浮点类型,即float

而对于标注112

其信息列表:

列表(42.112)中112为我们要的值,但它是在第42组列表中,这里数据类型为实数,不需要再执行数据转换。 最后这儿还需要一个条件语句,完整如下:

(setq &object (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))
(setq &k (ssname &object 0));取得第一个对象
(setq  #k (nth 2 (assoc 1(entget  &k))));entget:取出信息列表,assoc:取出信息列表中组号为1的列表,nth:取该列表第二个元素
(if (= #k "") (setq  #k (nth 2 (assoc 42(entget  &k))));结果为真执行,(setq  #k (atof #k));结果为假执行,并将字符转换为浮点类型,即float
)

lisp的if语法:(if 条件 <表达式1> <表达式2>),为真就执行表达式1,为假就执行表达式2

3.计算:

求和完整代码:

(defun C:h ( / &object &result i &k #k) (setq &object (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) (if (/= &object nil);如果对象集不为空(progn(setq i 0) (setq &result 0)(repeat (sslength &object);根据对象集列表的长度,设置循环次数(setq &k (ssname &object i));依次取对象(setq  #k (nth 2 (assoc 1(entget  &k))));entget:取出信息列表,assoc:取出信息列表中组号为1的列表,nth:取该列表第二个元素(if (= #k "") (setq  #k (nth 2 (assoc 42(entget  &k))));结果为真执行,(setq  #k (atof #k));结果为假执行,并将字符转换为浮点类型,即float)(if (= i 0) (setq &result #k) );如果只有一个对象,就只为该结果 (if (> i 0) (setq &result (+ &result #k)) );如果有多个?象就?个数?合并 (setq i (+ i 1));准备取下一个对象)     (princ &result);打印结果) ) (princ)
)

求差:

求差与求和有一点点不一样,即选择的第一个去减余下的和,同样包含了部分求和的代码,

完整代码如下:

(defun C:h ( / &object &result &result_m i &k #k) (setq &object (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) (if (/= &object nil);如果对象集不为空(progn(setq i 0) (setq &result 0)(repeat (sslength &object);根据对象集列表的长度,设置循环次数(setq &k (ssname &object i));依次取对象(setq  #k (nth 2 (assoc 1(entget  &k))));entget:取出信息列表,assoc:取出信息列表中组号为1的列表,nth:取该列表第二个元素(if (= #k "") (setq  #k (nth 2 (assoc 42(entget  &k))));结果为真执行,(setq  #k (atof #k));结果为假执行,并将字符转换为浮点类型,即float)(if (= i 0) (setq &result_m #k))(if (> i 0) (setq &result (+ &result #k)) );如果有多个?象就?个数?合并 (setq i (+ i 1));准备取下一个对象)  (setq &result (- &result_m &result))    (princ &result);打印结果) ) (princ)
)

CAD二次开发lisp实战小项目——求和求差相关推荐

  1. lisp工具箱for中望_CAD二次开发LISP视频_小懒人CAD工具箱_CAD插件_CASS插件_LISP代码...

    CAD二次开发LISP视频_小懒人CAD工具箱_CAD插件_CASS插件_LISP代码 LISP教程,CADLISP开发视频,LISP视频 CAD二次开发视频 CASS开地教程 LISP视频 LISP ...

  2. 《SuperMap GIS二次开发MVC实战训练---江海区慢性病防治院系统》项目研发阶段性总结

    <SuperMap GIS二次开发MVC实战训练-江海区慢性病防治院系统>项目研发阶段性总结 作者:爱怡同学 本次任务完成时间:2019年1月1日-2019年1月10日 开发工具与关键技术 ...

  3. C#实战之CAD二次开发006:与python进行Socket传输文件

    前言 前面介绍了与CAD相关的一些功能,本期介绍一下C#和python如何通过socket通信来进行文件的传输,建议不了解Socket的同学先去了解一下socket的通讯原理,这样看起来不会云里雾里的 ...

  4. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  5. SuperMap GIS二次开发MVC实战训练-佛山顺德慢性病GIS项目总结

    SuperMap GIS二次开发MVC实战训练-佛山顺德慢性病GIS项目总结 作者:谢景 任务完成时间:2018年12月24日-2019年1月15日 完成模块功能:区域定位.查询搜索.路径分析.周边分 ...

  6. lisp CAD二次开发 宗地线自动编号

    lisp CAD二次开发 宗地线自动编号 (defun c:ZZ () (setvar "osmode" 0) (princ "\n选取宗地线-") (setq ...

  7. 常用的CAD二次开发语言:AutoLISP, LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具注意和eclipse(IDE编程环境,java实现的)

    常用的CAD二次开发语言: 1 AutoLISP 全名是LIST Processing Language,LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具,是一种 ...

  8. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  9. C#CAD二次开发视频全套介绍及基础环境搭建

    本人录制c#CAD二次开发视频 基础入门全套,感兴趣可以淘宝搜索店铺 PT的cad小店 https://i.xue.taobao.com/detail.htm?spm=a2174.7765247.0. ...

最新文章

  1. 微信这个坑**的内置浏览器--我很无语
  2. Annotation 的第一个工程
  3. 漫画:通俗易懂的进程与线程解释
  4. 函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)
  5. 字符串16进制数字转换到Ascll字符串
  6. Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法
  7. scala循环 方法与函数
  8. 寻找高匿名破盾代理方案1. tinyproxy
  9. iOS Block(一)
  10. 阿里云开发-身份证图像识别(SpringBoot)
  11. 下载各省、市、县的行政区划边界数据
  12. 计算机二级资料(公共基础知识、考纲、历年真题、VB、Java、Access、C/C++)---百度网盘下载
  13. NBU 备份系统详细操作手册之维护与安装
  14. layui 模板使用
  15. 没有CCTV-5也不用慌的世界杯观战指南
  16. 附录1. DXF组码说明
  17. VOT目标路径可视化
  18. javax.crypto.AEADBadTagException: Tag mismatch 的解决办法
  19. 记:数据库课程设计(一)
  20. HBuildX配置夜游神模拟器

热门文章

  1. 华北水利水电大学实验报告三无瑕素数
  2. 浙大PAT 宇宙树(有瑕疵)
  3. c语言求三角形面积已知坐标,c语言求三角形面积知道
  4. 《杂文》 --- 平台选择
  5. 基于ROS2和科大讯飞的文字转语音TTS入门教程
  6. 清明节如何实现网站变灰
  7. html垂直居中ver,垂直居中相关知识总结
  8. C++面向对象程序设计 043:冷血格斗场 ---- (北大Mooc)
  9. 交通事故等级预测(附代码)
  10. Spring AOP 从入门到放弃