AutoLisp从入门到放弃(四)

  • 一、Command命令
  • 二、Command命令的使用
  • 三、关闭人机对话
  • 四、关于返回值

本章开始介绍如何通过在AutoLisp代码中使用Command命令在AutoCAD中实现绘图操作。

一、Command命令

如果你对AutoCAD有一定的了解,就会知道,高效的绘图方式往往离不开一系列的绘图命令的,我们姑且把所有绘图命令称之为Command命令。

如果想要在AutoLisp代码中实现绘图的操作,使用Command命令无疑是最简单的实现方式,接下来,我们就来学习一下如何在AutoLisp中使用Command命令。

二、Command命令的使用

目标:在AutoCAD中绘制一条直线,直线的两个端点由使用者来指定。

要实现上述目标,我们至少应该掌握如下两个AutoLisp函数:

(GetPoint "")                      ;; 交互方式获得点坐标.
(command "AutoCAD指令" ...)     ;; 执行AutoCAD指令进行绘图.

接下来,我们就可以根据上述函数来实现绘制直线的功能了。

(defun C:Drawline(/ #ptSta #ptEnd)(setq #ptSta (getpoint "\n请指定直线的起点:"))(setq #ptEnd (getpoint "\n请指定直线的终点:"))(command "line" #ptSta #ptEnd "")
)


在AutoCAD执行上面定义的函数,结果如图所示。

三、关闭人机对话

我们可以发现,在执行command命令进行绘图操作的时候,命令行中会将绘制直线的步骤全部都显示出来,这是因为我们在执行command命令的时候实际上就是不断的向命令行中输入参数进行绘图的。

也就是说,我们把直接在AutoCAD中输入命令的绘图操作封装到了一个函数里边,所以这里可以看到所有的绘制步骤。

但是在有些情况下,我们的绘图步骤是向被别人看见,而且如果反显的信息太多,极易使人反感。其实,在AutoCAD中是存在这样一个系统变量(CMDECHO)的,它可以控制是否显示绘图过程中的所有人机对话(关于系统变量这里不做过多解释说明)。

接下来我们就来看一下如何在代码中设置这个系统变量,这里我们需要用到如下两个函数:

(getvar "") ;; 获取系统变量
(setvar "") ;; 设置系统变量
(defun C:Drawline(/ #iCmdEcho #ptSta #ptEnd)(setq #iCmdEcho (getvar "CMDECHO"))(setvar "CMDECHO" 0)(setq #ptSta (getpoint "\n请指定直线的起点:"))(setq #ptEnd (getpoint "\n请指定直线的终点:"))(command "line" #ptSta #ptEnd "")(setvar "CMDECHO" #iCmdEcho)
)

将改动之后的代码加载到AutoCAD中,再次执行命令,我们可以看到,命令行中不会把绘制直线的步骤显示出来了。

四、关于返回值

如果仔细观察前面的示例不难发现,在每次执行完自定一操作之后,命令行中总是会出现一个莫名奇妙的数据,在第一段代码中,命令执行结束之后命令出现了一个 nil,在第二段代码执行结束之后,命令行出现了一个 0 。这些数据是怎样出来的呢?

回忆之前的学习,我们发现几乎所有的代码到最后都会多输出一个数据,这个就是AutoLisp的返回值了。

简单来说,AutoLisp函数中默认将函数中的最后一个表达式的计算结果作为函数的返回值。结合前两个例子,可以发现,第一个例子中的最后一个表达式的是一个绘制直线的command命令,command命令的执行结果为 nil ;第二个例子中最后一个表达式是设置系统变量,执行结果是设置到这个系统变量里的值;这两个表达式返回了不同的结果,这些不同的结果都可以是这个函数的返回值。

但是,绝大多数情况下,我们是不需要看见最后这个返回值的,所以,我们需要想办法让这个返回值消失或者不显示,这就需要用到了下面这个函数:

(princ)  ;; 用于吸收函数返回值,在函数末尾添加,之后函数便不再有返回值

我们把princ加入到上述代码中:

(defun C:Drawline(/ #iCmdEcho #ptSta #ptEnd)(setq #iCmdEcho (getvar "CMDECHO"))(setvar "CMDECHO" 0)(setq #ptSta (getpoint "\n请指定直线的起点:"))(setq #ptEnd (getpoint "\n请指定直线的终点:"))(command "line" #ptSta #ptEnd "")(setvar "CMDECHO" #iCmdEcho)(princ)
)

这样,函数返回值就被消除了,显示在命令行中的字符串全是我们想要的了。

AutoLisp从入门到放弃(四)相关推荐

  1. AutoLisp从入门到放弃(十四)

    AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...

  2. AutoLisp从入门到放弃(五)

    AutoLisp从入门到放弃(五) 一.列表(LIST) 1.列表的创建 2.操作列表常用函数 二.DXF组码 1.DXF组码文件基本结构 2.DXF组码值类型 本章将介绍通过AutoLisp代码来查 ...

  3. AutoLisp从入门到放弃(十)

    AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...

  4. AutoLisp从入门到放弃(十二)

    AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...

  5. AutoLisp从入门到放弃(十一)

    AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...

  6. AutoLisp从入门到放弃(九)

    AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...

  7. AutoLisp从入门到放弃(六)

    AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...

  8. AutoLisp从入门到放弃(七)

    AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...

  9. AutoLisp从入门到放弃(八)

    AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...

  10. AutoLisp从入门到放弃(二)

    一.AutoLisp简介 AutoLisp是Autodesk公司开发的一种Lisp语言,旨在节省工程师的绘图时间,后也用来制作一些简单的绘图插件,甚至完成一个完整的CAD二次开发项目. 二.你的第一行 ...

最新文章

  1. 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决
  2. 配置swagger2_Springboot(三十五)启用Swagger2
  3. 【温故知新】CSS学习笔记(选择器)
  4. 基于Android NDK的交叉编译
  5. 第八模块:算法设计模式、企业应用 第2章 企业应用工具学习
  6. 计算机网络主观论述题,《计算机网络》论述题
  7. android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...
  8. 求n!的算法和C 实现
  9. 从高量到高质,私域流量的变革与发展
  10. HTML5格式问题,你遇到了吗?
  11. (秒杀项目) 4.6 分布式状态管理
  12. 高速PCB设计注意事项
  13. 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall
  14. 机器学习算法----KNN K邻近 (K值的选择) (学习笔记)
  15. 多目标、多阶段、多层次的强化学习合作方法
  16. PHP 运行后出现The requested URL was not found on this server.
  17. codeforces-1202C-WASD-string
  18. 了解实时时钟RTC的原理并通过stm32实现STM32的日历读取、设置和输出
  19. 在windows下编译erlang内建函数(nif)的dll文件
  20. 【DA9739】基于射频DAC9739的任意波形产生的性能研究

热门文章

  1. SM6125平台扩容camera id的修改方法
  2. nmos导通流向_MOS管知识大集
  3. 微信小程序data-xx 的使用
  4. 十个非常实用的PS画笔使用技巧
  5. multiparty 和 busboy
  6. 【转】弹出USB大容量存储设备时出问题的解决方法
  7. 证件照排版软件_傻瓜式证件照片排版以及尺寸的调整
  8. 生信高性能服务器,【玩转腾讯云】使用云服务器进行生信数据分析
  9. 计算机中mac地址是什么意思,mac地址在计算机什么上
  10. Python代码 52周存钱计划