第2讲 利用AutoLisp语言绘图

合集下载

基于AutoLISP的AutoCAD参数化绘图

基于AutoLISP的AutoCAD参数化绘图
1) 分析结构特征 ,确定绘图参数 。通常绘制一个零件的 图样 ,需要很多尺寸 ,但是不可能把所有的尺寸都作为参数 。 这时就需要我们分析这个零件 ,确定既能体现零件的结构特 征 ,又能推导出其它尺寸的基本尺寸作为绘图参数 ,参数越少 越好 。
2) 根据绘图参数 ,设计交流界面 (对话框) 。对于参数化 绘图程序来说 ,对话框主要考虑绘图参数的输入和相关控件 的布局 ,为了增加程序的可读性 ,对话框中还要配有图像按 钮 ,用幻灯片来显示各绘图参数的含义 。
Key words :Auto L ISP ;AutoCAD ;paramet ric drawing ;redevelop ment s
1 引言
AutoCAD 是美国 AutoDesk 公司推出的一种通用的计算 机辅助设计和图形处理软件 ,具有易于掌握 、使用方便 、绘图 精确和体系结构开放等优点 。因此 ,自 1982 年问世以来深受 广大设计人员的青睐 ,是 CAD 族群中使用最普遍的软件之 一 。如今 ,AutoCAD 已广泛应用于机械 、建筑 、电子 、航天 、造 船 、冶金 、纺织 、轻工等领域 ,可见 AutoCAD 是一个通用的 CAD 软件 。但要使一个通用的 CAD 系统适合自己的专业工 作需要 ,达到使用方便的要求 ,就必须进行二次开发 。在 Au2 toCAD 为用户提供的 Auto L ISP 、A RX、VBA 等开发工具中 , Auto L ISP 是一种简便易学的解释性语言 ,具有很强的数据 表格处理功能 ,是开发 AutoCAD 的一种重要手段[1] 。
2 Auto L ISP 语言的特点简介
Auto L ISP 语言是嵌套于 AutoCAD 内部 ,将 L ISP (List Processing Language) 语言和 AutoCAD 有机结合的产物 ,它 是 AutoCAD 开放式体系结构的具体表现 。使用 Auto L ISP 可直接调用几乎全部 AutoCAD 命令 ,Auto L ISP 语言既具有 一般高级语言的基本结构和功能 ,又具有一般高级语言所没 有的强大的图形处理功能 ,是当今世界上 CAD 软件广泛采用 的语言之一[2 ] 。

第2讲利用AutoLisp语言绘图

第2讲利用AutoLisp语言绘图

第2讲利⽤AutoLisp语⾔绘图第2讲利⽤AutoLisp语⾔绘图在AuotCAD绘制简单图形时,有三种主要⽅式:(1)图标菜单(2)下拉式菜单(3)命令⾏。

事实上还有另外⼀种绘图⽅式,即通过lisp语⾔实现绘制图形。

利⽤Lisp语⾔绘图的最⼤优点是可以实现批处理,降低劳动强度。

⼩知识:Lisp语⾔最⼤优势是和AutoCAD绘图结合的很好,这也是该语⾔⾄今仍未被淘汰的最主要原因。

1、简单的绘图语句⼏乎AuotCAD中所有的绘图及环境设置命令都可以通过程序调⽤!,利⽤Lisp语⾔编写绘图命令的窍门是⾸先在命令⾏下把绘图命令和对应的参数记住,然后⽤Lisp语⾔的格式书写出即可。

1.1 绘制直线(command "line" "0,0" "1,1" "")1.2 绘制圆(command "circle" "0,0" 5)1.3 绘制正多边形(command "polygon" 5 "0,0" "i" 5)(command "polygon" "5" "0,0" "i" "5")都正确1.4 新建图层(command "la yer" "m" "道路" "c" 2 "" "")请同学⾃⼰编写⾼度为2,起点位置在“0,0”,⽂字内容是“理⼯⼤”的程序2、⽤多条绘图语句表⽰复杂图形正常情况下图形都⽐较复杂,需要⽤多条语句编写,例如测绘中的下⽔井、路灯等符号。

例1、下⽔井的绘制(defun c:xsj()(command "circle" "0,0" 0.5)(command "line" "-0.5,0" "0.5,0" "")(command "line" "0,-0.5" "0,0.5" ""))3、循环控制语句例2、绘制同⼼圆例3、绘制可多次插⼊的下⽔井符号例4、绘制y=sinx 曲线4、课后练习题4.1 编写lisp 程序,绘制路灯图案,参照下⽔井程序,改写成可以多次插⼊的程序。

第二讲 AutoLISP语言基础

第二讲 AutoLISP语言基础

《2.4基本函数》
2.4 AutoLISP基本函数(六类)
(一)数学运算函数(17种)
+、-、*、/、1-、1+、abs、sin、cos、atan、 sqrt、min、max、expt、log、gcd、rem
1) (+ 〈数〉〈数〉… ) 功能 : 求表中所有整数或实数的和。例如 : Command:(+ 1.2 3.1 3.8) 返回:8.1 2)(- 〈数〉〈数〉… ) 功能 :求表中第1个数减去后面所有数的差 ,例如 : Command:(- 8.1 5) 返回:3.1
《2.3程序结构》
在程序中使用内部函数的规则:
1)内部函数必须放在表中第一个元素的位 置,且所有括号都必须左右配对; 2)函数与参数之间至少用一个空格来分开, 多个空格和一个空格作用相同; 3)一个表可分成多行书写,一行也可以书 写多个表; 4)字符不分大小写,分号后的字符为注释。
《2.3程序结构》
《2.3程序结构》
AutoLISP程序结构实例:
;*********************************************** ;** 这个程序计算 a 和 b 平方和的平方根 ** ;** 用法:交互输入两个实型数 a ,b的值 ** ;** 该程序计算并输出结果在屏幕上。 ** ;*********************************************** (defun sqtab (/ a b) ;定义函数 (setq a (getreal “\n a=:”)) ;等待输入a的值 (setq b (getreal “\n b=:”)) ;等待输入b的值 (setq c (sqrt (+ (* a a) (* b b)))) ;计算平方根 (print “c=“) (princ c) (princ) );end

CAD二次开发教程AUTOLISP

CAD二次开发教程AUTOLISP

这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把 这些坐标赋予P2和P3。\n的作用是回车,因此输入提示显示在下 一行中。
第9行:(Command“line” P1 P2 P3“C”)
本行中,Command函数用来输入AutoCAD的line命令,然后从P1到 P2,P2到P3各画一条直线。“C”(表示“close”选项)把最 后一点P3与第一点P1连接起来。所有的AutoCAD命令及选项在 AutoLISP程序中使用时都必须置于双引号内。变量P1、P2.
示例:
(setq Pt1(getpoint))
(setq Pt1(getPoint“选择第一点”))
有上面几个函数就可以开始编程了:
例1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过 它们绘出如三角形。
本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以 生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一 条直线。弄清这三部分就会使编程过程更清晰。
该函数(/=)检查两个元素是否不相等。若不相等,条件为真,
函数返回T。同样,若指定的元素相等,条件为假,函数返回nil。
3.小于
格式(<atom1 atom2…)
该函数(<)检查第一个元素(atoml)是否小于第H个元素
(atomZ)。若为真,函数返回T,否则返回nil。
4.小于等于
格式(<= atom1 atom2...)
(defun ADNUM(/a
b),定义了一个含有两个局部变量a和b的函数ADNUM。局部 变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。
(defun C:ADNUM(),在函数名前加上C:后,此函数就可以通 过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有

用LISP语言自定义AutoCAD命令

用LISP语言自定义AutoCAD命令

用LISP语言自定义AutoCAD命令AutoLISP语言作为AutoCAD的二次开发工具,虽然在功能、运行速度和保密性等方面比起ARX等工具要逊色一些,但由于它易学易用,交互性好,灵活性强,对于那些经常使用AutoCAD进行绘图的普通用户来说,不失为一种理想的开发工具。

下面就介绍用AutoLISP 语言自定义的几个AutoCAD绘图命令,可以起到简化操作、提高作图效率的作用。

一、键槽尺寸视图的绘制命令“jct”在绘制轴、齿轮或带轮等零件图时,经常需要画轴上键槽处的剖视图或轮毂键槽的端面视图,比较麻烦;由于键槽的尺寸随轴径的变化而变化,所以我们可以用LISP程序来实现自动绘图。

加载下面的程序,在命令行中键入”jct”并回车,通过人机交互的形式输入有关参数,可自动完成轴上键槽的剖视图和轮毂键槽的端面视图的绘制。

代码示例如下所示。

(defun C:jct ()(setq pt0 (getpoint "\n 请输入视图的中心位置点:"))(initget 7)(setq loop T)(while loop(setq d (getreal "\n请输入键槽处的轴径(12<d<130)(mm):"))(if(or (< d 12) (> d 130))(alert "轴径数据输入错误!\n\n请重新输入!")(setq loop nil));if);while(cond;根据轴径检索键槽尺寸((and (> d 12) (<= d 17)) (setq b 5 t1 3.0 t2 2.3));b表示键槽的宽度((and (> d 17) (<= d 22)) (setq b 6 t1 3.5 t2 2.8));t1表示轴上键槽的深度((and (> d 22) (<= d 30)) (setq b 8 t1 4.0 t2 3.3));t2表示轮毂上键槽的高度((and (> d 30) (<= d 38)) (setq b 10 t1 5.0 t2 3.3))((and (> d 38) (<= d 44)) (setq b 12 t1 5.0 t2 3.3))((and (> d 44) (<= d 50)) (setq b 14 t1 5.5 t2 3.8))((and (> d 50) (<= d 58)) (setq b 16 t1 6.0 t2 4.3))((and (> d 58) (<= d 65)) (setq b 18 t1 7.0 t2 4.4))((and (> d 65) (<= d 75)) (setq b 20 t1 7.5 t2 4.9))((and (> d 75) (<= d 85)) (setq b 22 t1 9.0 t2 5.4))((and (> d 85) (<= d 95)) (setq b 25 t1 9.0 t2 5.4))((and (> d 95) (<= d 110)) (setq b 28 t1 10.0 t2 6.4))((and (> d 110) (<= d 130)) (setq b 32 t1 11.0 t2 7.4)))(command "circle" pt0 "d" d)(command "zoom" "a")(setq s1 (ssget "l" ))(setq di (-(* (/ d 2.0) (/ d 2.0)) (* (/ b 2.0) (/ b 2.0)))dx (sqrt di)dy (/ b 2.0)pt1 (list (+ (car pt0) dx) (+ (cadr pt0) dy)))(initget "Zc Lc");Zc表示画轴键槽的剖视图,Lc表示画轮毂键槽的端面视图(setq zrl (getkword "\n 画轴键槽的剖视图还是轮毂键槽的端面视图(Z/L)?"))(if (= zrl "Zc")(progn;计算轴键槽上点的坐标(setq pt2 (list (+ (car pt0) (-(/ d 2.0) t1)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 0 (- dx (- (/ d 2.0) t1)))));progn);if(if (= zrl "Lc")(progn;计算轮毂键槽上点的坐标(setq pt2 (list (+ (car pt0) (+(/ d 2.0) t2)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 (- pi) (- (+ (/ d 2.0) t2) dx))));progn);if(command "pline" pt1 pt2 pt3 pt4 "");画键槽(setq s2 (ssget "l"))(command "layer" "m" 5 "l" "center" 5 "c" 1 5 "")(command "ltscale" 8)(command "line" (polar pt0 (- pi) (+ (/ d 2.0) 10));画中心线(polar pt0 0 (+ (/ d 2.0) 10)) "")(command "line" (polar pt0(-(/ pi 2.0)) (+ (/ d 2.0) 10))(polar pt0 (/ pi 2.0) (+ (/ d 2.0) 10)) "")(command "layer" "s" 0 "")(if (= zrl "Zc")(progn(setq s3 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s3 "");修剪形成键槽(command "hatch" "U" "45" "2" "n" s1 s2 ""));画轴上键槽处剖视图的剖面线);if(if (= zrl "Lc")(progn(setq s4 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s4 "");修剪形成键槽(command "rotate" s1 s2 "" pt0 90));将轮毂键槽的端面视图旋转90度);if);end defun二、螺纹孔剖视图的绘制命令“lwk”在绘制机械零件图时,经常要画螺纹孔的剖视图,同样由于螺纹孔的有关尺寸都随螺纹的公称直径而变化,我们可以用下面的程序自动完成其剖视图的绘制。

使用CAD进行程序化绘图的方法与示例

使用CAD进行程序化绘图的方法与示例

使用CAD进行程序化绘图的方法与示例CAD(计算机辅助设计)软件是现代工程设计中不可或缺的工具之一。

它可以大幅提高工作效率,提供精确的设计模型和绘图输出。

在CAD中,程序化绘图技术可以进一步提高设计工作的效率和准确性。

本文将介绍使用CAD进行程序化绘图的方法与示例。

在CAD中,我们可以通过编写脚本或使用宏来实现程序化绘图。

常见的CAD软件如AutoCAD、SolidWorks和CATIA等都提供了编程接口和相关的编程语言,如AutoLISP、VBA和C#等。

下面我们将以AutoCAD为例,介绍使用AutoLISP进行程序化绘图的方法与示例。

AutoLISP是AutoCAD的内置编程语言,它与AutoCAD的各种功能紧密结合,可以实现从基本绘图操作到自定义功能的自动化。

以下是使用AutoLISP进行程序化绘图的几个示例:1. 绘制矩形:我们可以使用AutoLISP编写一个简单的程序来绘制矩形。

下面是一个示例程序:```(defun c:draw-rectangle (/ p1 p2)(setq p1 (getpoint "\nEnter the first corner point: "))(setq p2 (getcorner p1 "\nEnter the opposite corner point: "))(command "RECTANG" p1 p2)```在AutoCAD中,我们可以运行该程序的命令`draw-rectangle`,然后按照提示,输入第一个和第二个角点,即可绘制一个矩形。

2. 绘制圆形:类似地,我们可以使用AutoLISP编写一个程序来绘制圆形。

下面是一个示例程序:```(defun c:draw-circle (/ center radius)(setq center (getpoint "\nEnter the center point: "))(setq radius (getdist "\nEnter the radius: "))(command "CIRCLE" center radius))```在AutoCAD中,我们可以运行该程序的命令`draw-circle`,然后按照提示,输入圆心和半径,即可绘制一个圆形。

用AutoLISP语言编程实现参数化绘图

用AutoLISP语言编程实现参数化绘图

文章编号:100926825(2002)0420159202用Auto LISP 语言编程实现参数化绘图收稿日期:2002201222作者简介:康保成(19552),男,1987年毕业于广东教育学院工程图学专业,高级讲师,太原理工大学轻纺工程与美术学院,山西晋中 030600康保成摘 要:简要介绍Auto LISP 语言在Auto C AD 环境下实现参数绘图的应用状况。

对建筑制图中绘制楼梯台阶进行分析,并结合Auto LISP 语言编程特点,编制了Auto LISP 程序,顺利完成楼梯台阶的绘制过程,达到利用参数输入形式,严格、准确、快捷地完成绘图工作目的,还为在Auto C AD 环境下绘制形状相同、尺寸不同的系列图形提供了方便。

关键词:Auto LISP ,Auto C AD ,楼梯台阶中图分类号:T U20114文献标识码:A引言随着时代的进步,计算机辅助设计发展迅猛,全面取代传统的丁字尺加图板的手工绘图方式已成必然。

这种势头给各行各业都带来了冲击,从早年间颁布的红头文件可见一斑。

可以毫不夸张地说,对于作为衡量素质标准的计算机辅助设计,不能等闲视之。

Auto C AD 作为C AD 的工具,是一个功能极强的计算机辅助设计、绘图的通用软件包。

如今Auto C AD 在各部门得到广泛应用。

Auto C AD 实际上已经成为一种微机C AD 系统的标准,工程设计人员之间交流设计思想的公共语言。

Auto C AD 之所以得到如此广泛的应用,除了它功能强大,易学易用外,还在于它是一个开放的、交互式的软件。

用户可以编写Auto LISP 、ADS 或ARX 应用程序,作为新的命令,实现特定用户的特殊需要,或对AutoC AD 做一些二次开发和应用,以使用户更方便、快捷地满足工作要求。

1 问题的提出正如前面所述,Auto C AD 在各个领域都得到了广泛的应用,可见其通用性是很强的;但它在一些领域的某些方面还有不尽人意的地方。

LISP语言在CAD方面的运用

LISP语言在CAD方面的运用
3.2 文字的特性 下面再来看看文本的一些特性:
(8 . " DLSS" )表 说 明 所 选 则 的 实 体 在 DLSS 层 。 (6 . " X2 " )则 表 示 此 线 条 的 线 型 为 X2 , X2 为 用 户 定 义 的 线 型 。 (90 . 4 )说 明 此 线 有 4 个 端 点 。 (70 . 128 )表 明 此 线 没 有 封 闭 。 如 为 129 则 表 示 多 义 线 首 尾 相 连, 是严格闭合。 (43 . 0 .1 )显 示 此 线 的 宽 度 为 0 .1 米 。 (10 41 .3308 23 .3799 )则 给 出 了 端 点 的 坐 标 值 。依 次 下 去 分 别 为 各端点的坐标。 (- 3 (" SOUTH" (1000 . " 164100 " ))))表 示 此 实 体 的 扩 展 特 性 , 一 般为编程者的意图。 针对所提的第一个问题, 对比下面的等外公路特性。
(SETQ XR1 (RTOS(FIX(* (getvar " tdusrtimer" ) 10000000000)))) 用 getvar 函 数 读 取 内 部 数 字 变 量 tdusrtimer 的 值 , 扩 大 后 用 数 字 计 算 函 数 FIX 取 整 , 用 数 据 类 型 转 换 函 数 RTOS 把 数 字 常 量 转 换 为 字 符 常 量 , 再 赋 予 给 变 量 XR1 。
(0 . " LWPOLYLINE" )表 说 明 所 选 则 的 实 体 为 LWPOLYLINE 线 。 (下 转 63 页 )
- 57 -
科技论坛
中国高新技术企业
立数学模型, 有时即使建立了数学模型, 也难于获得数值解。这时, 模拟法则成为一种有效的工具。模拟法十分灵活, 且不受系统规模 限 制 , 它 可 以 详 细 模 拟 事 故 前 的 备 件 、发 电 和 输 电 停 运 及 运 行 中 的 实 际 问 题 , 但 耗 时 多 而 且 精 度 不 高 , 这 种 方 法 主 要 用 于 发 、输 电 组 合 系统及变电站的可靠性评估中。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2讲利用AutoLisp语言绘图
在AuotCAD绘制简单图形时,有三种主要方式:(1)图标菜单(2)下拉式菜单(3)命令行。

事实上还有另外一种绘图方式,即通过lisp语言实现绘制图形。

利用Lisp语言绘图的最大优点是可以实现批处理,降低劳动强度。

小知识:
Lisp语言最大优势是和AutoCAD绘图结合的很好,这也
是该语言至今仍未被淘汰的最主要原因。

1、简单的绘图语句
几乎AuotCAD中所有的绘图及环境设置命令都可以通过程序调用!,利用Lisp语言编写绘图命令的窍门是首先在命令行下把绘图命令和对应的参数记住,然后用Lisp语言的格式书写出即可。

1.1 绘制直线
(command "line" "0,0" "1,1" "")
1.2 绘制圆
(command "circle" "0,0" 5)
1.3 绘制正多边形
(command "polygon" 5 "0,0" "i" 5)
(command "polygon" "5" "0,0" "i" "5")都正确
1.4 新建图层
(command "la yer" "m" "道路" "c" 2 "" "")
请同学自己编写高度为2,起点位置在“0,0”,文字内容是“理工大”的程序2、用多条绘图语句表示复杂图形
正常情况下图形都比较复杂,需要用多条语句编写,例如测绘中的下水井、路灯等符号。

例1、下水井的绘制
(defun c:xsj()
(command "circle" "0,0" 0.5)
(command "line" "-0.5,0" "0.5,0" "")
(command "line" "0,-0.5" "0,0.5" "")
)
3、循环控制语句
例2、绘制同心圆
例3、绘制可多次插入的下水井符号
例4、绘制y=sinx 曲线
4、课后练习题
4.1 编写lisp 程序,绘制路灯图案,参照下水井程序,改写成可以多次插入的程序。

4.2 编写lisp 程序,绘制(1) y =sinx
x (2) y =1
√2πexp⁡(−x 2
2) 的图形,并用matlab 程序编写,比较两种语言的各自特点。

(defun c:tx y() (setq r 1.0) (while (< r 10) (command "circle " "0,0" r) (setq r (+ r 1)) ) ) (defun c:xsj() (setq r 0.5) (setq pt (getpoint "\请确定点位: ")) (while pt (setq x (nth 0 pt) y (nth 1 pt)) (setq x1 (- x 0.5) x2 (+ x 0.5) y1 (- y 0.5) y2 (+ y 0.5) ) (command "circle " pt r) (command "line" (list x1 y) (list x2 y) "") (command "line" (list x y1) (list x y2) "") (setq pt (getpoint "\请确定点位: ")) ) ) (defun c:sinx() (setq x (* pi -2)) (command "pline") (while (< x (* pi 2)) (command (list x (sin x))) (setq x (+ x 0.1)) ) (command "") ) matlab 程序: x=-pi:0.1:pi; plot(x,sin(x)); axis equal
5、过三点的外接圆参考程序。

相关文档
最新文档