第四章-CAD软件的二次开发技术_第1页
第四章-CAD软件的二次开发技术_第2页
第四章-CAD软件的二次开发技术_第3页
第四章-CAD软件的二次开发技术_第4页
第四章-CAD软件的二次开发技术_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Pro/Engineer、UGII、I-DeaS、MASTERCAM、Solodedge

等,都是商品化的通用平台,基本上覆盖了整个制造行业.

专业针对性差,并且不能满足各种各样的具体产品的设计需要,在实际的工程设计中难以达到理想的效果,几乎不能真正实现软件的灵活高效的特点。

CAD软件的二次开发问题就成为了CAD技术推广应用过程中所必须面对和解决的课题之一。第四章CAD软件的二次开发14.1CAD软件的二次开发概述二次开发的定义:就是把商品化、通用化的CAD系统用户化、本地化的过程,即以优秀的CAD系统为基础平台,研制开发符合国家标准、适合企业实际应用的用户化、专业化、集成化软件。

AutoCAD软件包是目前最为流行的工程绘图软件,该软件包因其构造、编辑图形能力强、开发性好、支持微机平台等优点,在国内得到广泛的应用。但AutoCAD软件本身是一种非参数化环境的软件,只能通过交互式绘图命令及一些二次开发手段来进行设计制图。24.1CAD软件的二次开发概述

AutoCAD软件其不足主要表现为:(1)图形输入工作量大、效率低。(2)若需生成系列图纸,CAD人员只能通过大量修改,“人工”参数化绘图。

AutoCAD强大的生命力不仅在于其完善的绘图功能,良好的用户界面,易学易用的操作特点而且还在于它开放的结构体系,AutoCAD为用户提供了多种二次开发工具。AutoCAD强大的图形编辑功能和完全开放的结构有利于对其进行再开发,以满足用户的特殊要求。从而克服了软件的不足和局限性,提高了设计效率和质量。34.1CAD软件的二次开发概述Visuallisp技术

Visuallisp是嵌入AutoCAD的解释型过程语言,继承了Lisp语言的语法传统约定和基本函数与数据类型,并且扩展了图形处理,几乎能调用CAD的所有命令。具有比较强的开发能力,但是运行速度慢,不宜用于高强度的数据处理。AutoCAD的二次开发工具44.1CAD软件的二次开发概述ARX(C++)技术

ARX(AutoCADRuntimeExtension)是以C++语言为基础的、面向对象的开发环境应用程序接口。

ARX程序本质上为Windows

动态链接库(DLL)程序,与AutoCAD共享地址空间,直接调用AutoCAD的核心函数,可直接访问AutoCAD数据库的核心数据结构和代码。以便能够在运行期间扩展AutoCAD固有命令特权的新命令。54.1CAD软件的二次开发概述VBA技术

VBA(VisualBasicforApplication)最早是嵌入在Office中的一种编程语言,因为易学易用,功能强大,AutoDesk公司开始在AutoCAD版本中内置VBA开发工具,同时提供了使用的对象模型和开发环境,到AutoCAD2000功能得到了加强。6解释型语言用户编写的源程序代码直接由解释器解释并执行。平台和操作系统独立

AutoLisp程序可移植性好,程序可在多种平台和操作系统上运行。版本独立

AutoLisp语言向后兼容,为任意版本AutoCAD编写的AutoLisp程序可以在以后版本的AutoCAD中运行。4.2AutoLisp语言的特性74.2AutoLisp语言的特性AutoLisp与主流编程语言的比较:AutoLisp与其他语言最大的区别是用表存放数据,没有数组、联合、结构等。变量没有明确的类型,变量类型在赋值时动态确定,不用事先定义变量类型。没有语句、关键词以及运算符。它是函数定位的语言,所有运算都有函数调用完成。8Autolisp

有如下优点:(1)Lisp是所用编程语言中最容易学习和掌握的。(2)Autolisp提供的大多数函数都是直接针对AutoCAD的操作,可用它编写访问AutoCAD的数据库的操作。(3)解释执行,立竿见影可以在AutoCAD的提示符:command:下逐条输入Autolisp

语句,立即得到结果。4.2AutoLisp语言的特性(4)Autolisp

可在功能强大的开发工具Visuallisp上开发运行94.2AutoLisp语言的特性

AutoLISP是开发AutoCAD的最主要的工具。用户可以利用AutoLISP语言实现对AutoCAD当前图形数据库的直接访问和修改,增加AutoCAD新命令和开发参数化绘图程序等。

10

(1)符号符号用于存储数据,“符号”与“变量”含义相当,可互相交换使用。符号:除了一些特殊字符(如(、)、.

、‘、“、;)以外的任何可打印字符;符号的大小写是等效的。不允许使用数字作为符号名的第一位。合法符号:abc、$AD、a3;非法的符号:(a)、3d、a.b、A;等4.3.1AutoLISP的数据类型4.3AutoLisp语言常用函数11

4.3.1AutoLISP的数据类型

(2)字符串字符串是由双引号引起来的字符序列组成。字符串中同一字母的大小写被认为是不同的字符,空格也是一个有意义的字符。例如:

〝ABC〝≠〝abc〝〝abc〝≠〝abc〝在字符串中用〝\〝可以添加控制字符。例如:

\r:表示回车;\n:表示换行;

\〝:表示〝;\e:表示ESC键12

4.3.1AutoLISP的数据类型

(3)表它是指放在一对左、右圆括号中的元素的有序集合。表中的项称为表的元素。元素可以是:整型数、实型数、字符串、符号、表、函数名;例1:(21304560)为一个表,包含4个元素。例2:(setqa63)为一个表,表中包含3个元素。134.3.1AutoLISP的数据类型在AutoLISP语言中,用表来表示图形中点的坐标。例如:(56.430.04.0)表示三维点的坐标;第一、二、三个元素分别对应点的X、Y、Z坐标值。(setqa63)表中三个元素:

setq--为函数名;a--变量;表示:a=63(setqb(+a108))表示:b=a+108144.3.1AutoLISP的数据类型

表有两种基本类型:标准表和引用表;标准表:表中第一个元素必须是一个合法的已存在的Autolisp函数,AutoCAD将按照此函数的功能完成其操作;例如:(setqb(+a108))引用表:在表前加一单引号(ˊ),表示不对此表作求值处理。例如:(setq

po

ˊ(1005896))表示:Po=(10015896)154.3.1AutoLISP的数据类型

(4)文件描述符文件描述符是一个指针,指向用AutoLISP语言的OPEN函数打开了的某个文件。该指针返回为一个数字标号;在访问该文件时,根据该文件描述符对指定文件进行操作。例如:(setq

fp(open“myfile.dat”“w”))

(print“1563”fp)第一句:以写的方式打开数据文件myfile.dat,并把文件的指针赋予文件描述符fp;第二句:将字符串“1563”输出到fp指向的数据文件。164.3.1AutoLISP的数据类型(5)实体名实体名是AutoCAD系统在绘图过程中赋予所绘实体的一个数字符号。利用实体名,AutoLISP函数可以查找到实体的数据库记录,并对实体进行各种处理。例如:(setqelast(entlast))把最后绘制的实体用变量elast表示。(6)选择集选择集是多个实体的集合。在AutoLISP程序中可以构造一个选择集,并把它赋予一个变量(或符号)供其它函数调用。171.AutoLISP语言表达式与高级语言的区别高级语言采用“中缀表示法”:运算符、赋值符位于中间。如:表达式x=(a+b)·c→x=(a+b)*cAutoLISP语言采用“前缀表示法”:运算符、赋值符位于前面。如:表达式x=(a+b)·c→(setqx(*(+ab)c))式中:

setq

→=4.3.2AutoLISP语言的程序结构184.3.2AutoLISP语言的程序结构2.AutoLISP语言的程序结构与高级语言的程序结构的区别:高级语言的程序由一系列的语句组成。AutoLISP语言的程序由一系列的表组成。表的格式为:(function1(function2(function3参数1参数2…)…)表中第一个元素是函数,其余元素是该函数所需要的参数,每个参数又可以是另一个表,即表可以嵌套。表的运算过程:先内后外194.3.2AutoLISP语言的程序结构例如:

(defun

init_global_date()(setvar"cmdecho"0)(setq

dssf(getvar"osmode"))(setvar"osmode"0)(setqp1(/pi2))(setqp2(

*

(/pi2)3))(setqp3(/pi4))(setq

a0(*pi(/20.0180.0)))(setq

list_n"1")(setq

init_point(list100100))

)20(1)加函数

(+<number1><number2>…)该函数返回<number1>+<number2>+…+相加的和(2)减函数

(-<number1><number2>…)该函数返回<number1>-<number2>-…-的差。(3)乘函数(*<number1><number2>…)该函数返回<number1>·<number2>·…·相乘的积。4.3.3AutoLISP的数值计算函数214.3.3AutoLISP的数值计算函数(4)除函数(/<number1><number2>…)该函数返回<number1>÷<number2>÷…÷的商。(5)乘方函数(expt<base><power>)该函数返回数<base>为底的<power>次幂的值(6)平方根函数(sqrt<number>)该函数返回数<number>的实型平方根。224.3.3AutoLISP的数值计算函数(7)正弦函数(sin<angle>)该函数返回角度<angle>的正弦值,其中<angle>的单位为弧度。(8)余弦函数(cos<angle>)该函数返回角度<angle>的余弦值,其中<angle>的单位为弧度。(9)求整函数(fix<number>)该函数返回小于或等于<number>的最大整数。23(1)等于函数(=原子1原子2原子3…)原子:数或字符串;所有原子都相等,函数返回T,否则返回NIL;例如:(if(=xyz)(fx1))(2)不等于函数(/=原子1原子2…)所有原子都不相等,函数返回T,否则返回NIL;例如:(if(/=xyz)(fx2))4.3.4逻辑运算函数244.3.4逻辑运算函数(3)小于函数

(<原子1原子2原子3…)如果原子1<原子2<原子3…,函数返回T,否则返回NIL;例如:(if(<dcl_id0)(exit))(4)大于函数(>原子1原子2原子3…)如果原子1>原子2>原子3…,函数返回T,否则返回NIL;254.3.4逻辑运算函数(5)表达式相等测试函数

(eq

式1式2)若表达式1与表达式2完全相同,函数返回T,否则返回NIL;(6)表达式值相等测试函数

(equal式1式2)若表达式1的函数值与表达式2的函数值完全相同,函数返回T,否则返回NIL;如:a=3b=6c=16;d=3e=6f=16(setqs1(+(abc)))

(setqs2(+(def)))(eqs1s2)(equals1s2)→

返回NIL→返回T.264.3.5表处理函数

(1)取表中第一个元素

(car<表>)该函数返回<表>中的第一个元素。(2)取子表(cdr<表>)该函数返回<表>中去掉第一个顶层元素后剩下的元素组成的表。(3)取表中第n个函数(nth<n><表>)该函数返回<表>中第n个元素。

n为元素序号,从0开始计数。例如:(nth0‘(abcdef))→a

(nth3‘(abcdef))→d274.3.5表处理函数

(4)构建表函数(list<expr1><expr2><expr3>…)该函数返回所有表达式<expr1><expr2><expr3>…的值构成的表。例如:(setqx58y62)

(listxy)

(list(+x100)(+y100)157)

(5862)→(158162157)

284.3.5表处理函数(5)取表中最后一个元素

(last<表>)该函数返回<表>中的最后一个元素。(6)测表长度函数(length<表>)该函数返回<表>的长度,即表中元素的个数。例:(length‘(abc))→3(length‘(a(bc)))→229执行GET族输入函数时,计算机将暂停下来,等待接受来自键盘、数字化仪或鼠标器的输入。

(1)整型数输入函数(GETINT[提示])执行该函数时,将等待用户输入一个整型数,并返回该整型数。例如:(setqz(getint“请输入齿数Z=”))

屏幕显示:请输入齿数Z=20↙4.3.6GET族输入函数304.3.6GET族输入函数

(2)实型数输入函数(GETREAL[提示])执行该函数时,将等待用户输入一个实数,并返回该数对应的实型数。例如:(setqM(GETREAL“请输入模数M=”))屏幕显示:请输入模数M=2.5↙314.3.6GET族输入函数

(3)点输入函数(GETPOINT[基点][提示])执行该函数时,将等待用户输入一个点。输入方法:键盘或用光标在屏幕上拾取一点。1)(GETPOINT[提示])例如:(setqP1(GETPOINT“请输入P1点坐标

=”))屏幕显示:请输入P1点坐标

=100,100↙

或在屏幕上拾取一点,赋值给P1324.3.6GET族输入函数2)(GETPOINT基点[提示])例如:(setqP2(GETPOINTP1“请输入第二点坐标P2=”))

屏幕显示:请输入第二点坐标P2=50,50↙

或在屏幕上拾取一点,赋值给P2;此时,在屏幕从基点P1点向P2点(或光标处)出现一条可拖动的直线。334.3.6GET族输入函数(4)角度输入函数(GETANGLE[基点][提示])执行该函数时,将等待用户输入一个角度值,并返回以弧度表示的该角度值。角度的确定原则:以ANGBASE变量的当前角度值为零度基准线,按输入角度逆时针方向测量。344.3.6GET族输入函数

1)(GETANGLE[提示])

①等待用户输入一个角度并将该角度以弧度返回,角度按逆时针方向测量绘制。45°

例如:设ANGBASE变量的当前角度值为零度。(setqA(GETANGLE“请输入角度A=”))屏幕显示:请输入角度A=45↙

,赋值给A354.3.6GET族输入函数②等待用户在屏幕上指定两点的方式输入一个角度例如:设ANGBASE变量的当前角度值为零度。(setqA(GETANGLE“请输入角度A=”))屏幕显示:请输入角度A=P1,P2↙A°P1P2364.3.6GET族输入函数2)(GETANGLE基点<提示>)

等待用户在屏幕上指定第二点的方式输入一个角度例如:(setqANGBASE90)

(setqP2(GETPOINTP1“请输入第二点坐标P2=”))α

P1P2屏幕显示:请输入第二点坐标P2=50,50↙

或在屏幕上拾取一点,同上获取一个角度。374.3.6GET族输入函数

(5)字符串输入函数(GETSTRING[T][提示])执行该函数时,将等待用户输入一个字符串,并返回该字符串1)(GETSTRINGT[提示])

T表示:输入的字符串中可以有空格,用回车键终止字符串的输入。2)(GETSTRING[提示])

表示:输入字符串时,用空格键或回车键终止字符串的输入。384.3.6GET族输入函数例如:要求输入参数:“Thisisabook”,并赋值给变量S1。①(setqs1(GETSTRINGT“请输入参数:”))屏幕显示:请输入参数:Thisisabook↙→S1=“Thisisabook”②(setqs1(GETSTRING“请输入参数:”))屏幕显示:请输入参数:This□→S1=“This”394.3.6GET族输入函数(6)距离输入函数

(GETDIST[基点][提示])执行该函数时,将等待用户输入一个距离值。输入方法有两种:①等待用户输入一个距离值例:(setqL1(GETDIST“请输入L1的长度=”))屏幕显示:请输入L1的长度=153↙

1)(GETDIST[提示])404.3.6GET族输入函数

②等待用户在屏幕上指定两点的方式输入一个距离值例如:(setqL1(GETDIST“请输入L1的长度=”))屏幕显示:请输入L1的长度=用户在屏幕上用光指定两点P1,P2,返回两点间的距离414.3.6GET族输入函数2)(GETDIST基点[提示])

已知第一点坐标,输入第二点坐标,求两点间的距离例如:(setqL1(GETDISTP1“请输入第二点坐标P2=”))

屏幕显示:请输入第二点坐标P2=83,92↙计算机将返回P1,P2两点间的距离,并赋值给L1424.3.6GET族输入函数位值的作用:控制允许输入的方式,取值范围1~127;位置含义1不允许空输入2不接受零值4不接受负值8不检查屏幕限定范围16未使用32用虚线画拖动线和矩形框64忽视三维点的z坐标(7)输入控制函数

(INITGET[位值][关键字列表])表中的位值可以组合相加得到一个值,该值可同时起几种控制作用。

该函数为其后使用的GET族函数建立各种控制选项。434.3.6GET族输入函数关键字列表的作用:定义一个关键字表,用于对其后GET族函数的输入值进行检查,判断用户的输入是否与表中规定的输入类型相符。若不相符,AUTOCAD将要求用户重新输入关键字列表的两种形式:1)“关键字1关键字2关键字3…,大写的缩写字母1大写的缩写字母2大写的缩写字母3…”

输入时只输入相应得大写的缩写字母。444.3.6GET族输入函数例如:

(initget7“RadiusDiameter

,RD”)(setqW(GETSTRING“\n请选择:直径(D)/半径(R)"))(If(=W“Diameter”)(SETQD(GETREAL“请输入直径”

))(SETQR(GETREAL“请输入半径”

))

)454.3.6GET族输入函数2)列表:“关键字1关键字2…”关键字中保留的字母用大写,其余的用小写。例1:(initget7“LtypeColor”)(setqW(GETSTRING“\n请输入:线形(L)/颜色(C)"))46(defun

gety()(initget1“PiTwo-pi,PT”)(setqx(getreal“Pi/Two-pi/<number>:”))

(cond((eqx“Pi”)(setqypi))((eqx“Two-pi”)(setqy(*pi2)))(setqyx))(printy))例2:若x=“Pi”,则y=3.14159

若x=“Two-pi”,则y=6.28318

其余y=x474.3.6GET族输入函数(8)关键字输入函数

(getkword[提示])

该函数要求用户输入一个关键字。在调用本函数之前需先用INITGET函数设置一个关键字表。例1:(initget1“YesNo”)(setqW(getkword“Areyousure?(Yes/No)”)输入Y

或N484.3.6GET族输入函数例2:

(initget7"68101215161820")(setqM(getkword“\n请选择螺栓直径M”))494.3.7计算函数1求方位角函数

(angle点1点2)该函数返回两点连线的方位角。从当前作图平面的X轴正向开始,按逆时针方向计算该角度。例如:(angle‘(1.01.0)‘(1.04.0))→1.5707→3.141593(angle‘(5.01.33)‘(2.41.33))504.3.7计算函数2求两点间距离函数

(distance点1点2)该函数返回两个三维点之间的距离

(distance‘(1.02.53.0)‘(7.02.53.0))

→6.000000514.3.7计算函数3已知一点求另一点坐标的函数(polar已知点方位角度距离)该函数可以根据一个已知点求出另一个点。角度是另一点所在方位角;例如:若P1=(26150562),求距P1点L,方位角30°的点坐标;(SETQP2(polarP130L))524.3.7计算函数求交点函数

(inters点1点2点3点4[方式])该函数返回两条线的交点。点1与点2:为第一条线的两个端点;点3与点4:

为第二条线的两个端点;

相交方式:若方式为“NIL”,则交点可以在两条线段的延长线上;若无方式,则交点只在两条线段内;534.3.8字符串处理函数字符串长度函数(strlen

字符串1字符串2…)该函数返回字符串<string>的长度,即字符串中所含字符的个数。例如:(strlen“about”)→5;(strlen“a”“b”“t”)→3

544.3.8字符串处理函数(2)字符串连接函数(strcat

字符串1字符串2…)该函数返回由字符串<字符串1><字符串2>…构成的长字符串。例如:(strcat“M”“50”)(strcat“%%C”“50”)→“M50”(strcat“R”“50”)→“R50”→“φ50”554.3.8字符串处理函数(3)求子字符串函数:(substr<字符串><起点n>[长度m])该函数返回从字符串第<n>字符位置开始,连续读取<m>个字符组成一个新字符串。例如:(substr“abcdefg”43)→“def”→“bcdefg”(substr“abcdefg”2)564.3.8字符串处理函数(4)整型数转换为数字型字符串函数

(itoa

整型数)该函数将整型数转换为一个<数字型字符串>

例如:(itoa65)→“65”→R65(strcat“R”

(itoa65))574.3.8字符串处理函数(5)数字型字符串转换为整型数函数

(atoi<数字型字符串>)该函数将<数字型字符串>转换为一个整型数。例如:(atoi“5785”)→5785(atoi“5785.863”)→5785584.3.8字符串处理函数(6)数字型字符串转换为实型数(atof<数字型字符串>)

该函数将<数字型字符串>转换为一个实型数。例如:

(atof“5785.863”)→5785.863

(atof“5785”)→5785.0594.3.8字符串处理函数(7)整型变实型函数

(float整型数)该函数将“整型数”转换为一个实型数。例如:(float6)→6.0(8)实型变整型函数

(fix实型数)该函数将“实型数”转换为一个整型数。例如:(fix5.6)→5604.3.8字符串处理函数(9)角度单位制转换函数(angtos

角方式精度)

该函数将“角”(单位为弧度)转换为其他单位制,并以字符串的方式返回角度。方式:0→转换为度;1→转换为度/分/秒

2→转换为梯度;3→转换为弧度;精度:小数的位数;例如:(angtos0.392802)

(angtos0.392811)→22.50°→22°30′0″614.3.8字符串处理函数(10)实型数计数制转换函数

(rtos

实数方式精度)该函数对“实数”按要求的“方式”和给定的“精度”进行计数制的转换,并以字符串的方式返回。方式:1→科学计数法;2→十进制;

3→工程制(英寸与小数英寸);

4→建筑制(英寸与分数英寸);624.3.8字符串处理函数例如:(rtos18.5013)(rtos18.500000022)(strcat“%%C”(rtos18.500000022)

)→“φ18.50”→“1.850E+01”→“18.50”634.3.9条件分支函数

(1)条件函数

(if<条件><表达式1>[表达式2])

该函数根据“条件”的真或假来执行后面的表达式。若测试条件为真(T),则执行“表达式1”,否则,就执行“表达式2”。(setqx(getreal“请输入x=”))

(if(>=x0)(setqfx(+x5))(setqfx(-x6)))

(printfx)例如:f(x)=x-6x<0x+5x≥0644.3.9条件分支函数(2)分支函数

(cond

(<条件1><式1式2…>)(<条件2><式1式2…>)

……

(<条件N><式1式2…>)

)

该函数将依次检查每一个<条件>的值,若查到某个<条件>的值为真(T),则执行与该<条件>相关的那些表达式。此时函数不再对剩余的其它分支进行测试。654.3.9条件分支函数例如:f(x)=x+2

x>0x2+3x+5x<09

x=0(setqx(getreal“请输入x=”))

(cond((>x0)(setqfx(+x2))((<x0)(setqfx(+(exptx2)(*x3)5))((=x0)(setqfx9)))(prompt“f(x)=”)(printfx)664.3.10循环函数

(1)重复函数

(repeat<次数><表达式1><表达式2><表达式3>…)

该函数安照给定的“次数”,重复执行后面的所有表达式,并返回最后一次循环的最后一个表达式的值。例如:求

(defunsum(/ns)

(setqn1s0)

(reapt100(setqs(+sn))(setqn(1+n))))674.3.10循环函数

(2)循环函数

(while<条件><表达式1><表达式2><表达式3>…)

该函数先对测试<条件>求值,若为真(T),则执行后面所有的表达式,然后再次对测试<条件>求值。重复上述过程,一直循环到测试<条件>的值为nil为止。While返回最后一次循环时的最后一个表达式的值。684.3.10循环函数例如:求

(defunsum(/ns)

(setqn1s0)

(WHILE(<=N100)(setqs(+sn))(setqn(1+n)))

(PRINTS)

)694.3.10循环函数(3)求多个表达式值的函数

(prong<表达式1><表达式2><表达式3>…)该函数是用于只能有一个表达式的地方。如:(if<条件><表达式1>[表达式2])

其中,式1和式2只能有一个表达式。704.3.10循环函数(If(>D50)(PRONG(SETQA20)(SETQB30)(SETQC(+AB))

(PRINTC))(PRONG(SETQA35)(SETQB42)(SETQC(+(*A2)B)

(PRINTC)))例如:若D>50:

A=20,B=30,C=A+B;若D<50:A=35,B=42,C=2A+B;71

AutoLISP提供的特殊函数Defun

→用来定义用户函数,它的调用格式为:4.4.1自定义函数4.4

AUTOCAD命令的定义与调用方法(defun

函数名变量表表达式1

表达式2….)724.4.1自定义函数

(3)表达式部分:是用户所定义的函数的内容,用于完成所需的功能。(1)函数名:用户自定义的函数名,可被其它程序或函数调用。(2)变量表:是函数的参数表,一般格式为:(<形参1><形参2>…./<局部变量1><局部变量2>….)形参:在函数调用时必须用实参代替;局部变量:仅用于函数内部,不参与函数传递。734.4.1自定义函数(defunsum(n/s)

(setqi1s0)

(WHILE(<=in)(setqs(+si))(setqi(1+i))))

调用格式:(sum90)例如:求74

AutoLISP提供了一个在AutoLISP程序中调用AutoCAD标准命令的Command函数。该函数的调用格式为:

(Command<AutoCAD标准命令><参数1><参数2><参数3>……)4.4.2调用AutoCAD标准命令的函数754.4.2调用AutoCAD标准命令的函数

(command“circle”‘(2016)5)例1:

从点(5,4)到点(20,15)画一条直线。(command“line”“5,4”“20,15”“”)或(command“line”‘(54)‘(2015)“”)例2:过中心(20,16)画半径为5的圆。76格式:

(defunC:命令名(/<局部变量1><局部变量2>……)表达式……)用该方法定义的命令,在AutoCAD环境下可以利用Load命令被加载到内存中,可以向AutoCAD的命令一样使用。调用格式:

命令名4.4.3定义AutoCAD命令的函数774.4.3定义AutoCAD命令的函数例如:已知一点坐标与边长。定义画一个正方形的命令。(defun

C:square(/pt1pt2pt3pt4)(setqpt1(getpoit“输入左下角坐标:”))(setq

len(getdist“输入边长:”))(setqpt2(polarpt10.0len))(setqpt3(polarpt2(/pi2)len))(setqpt4(polarpt3pilen))(initget1)

(Initget7)784.4.3定义AutoCAD命令的函数(command“PLINE”pt1pt2pt3pt4“c”))调用格式:

command:square794.5应用AutoLisp语言进行数据文件操作及实体访问4.5.1文件操作函数804.4.1文件操作函数

(1)打开文件函数

(open<文件名><读/写标志>)

该函数打开或建立一个文件,函数返回文件描述符。注意:文件名中要包含文件的路径,并用“/”或“\\”代替“\”。文件名:字符;读写标志:读文件“r”、写文件“w”814.4.1文件操作函数例1:文件filename.dat存放在D:\TEMP\CAD\中,以读的方式打开文件:(setq

fp

(open“D:/TEMP/CAD/filename.dat”“r”))或:(setq

fp

(open“D:\\TEMP\\CAD\\filename.dat”“r”))824.4.1文件操作函数例2:在D:\TEMP\CAD\中建立文件filename.dat,以读的方式打开文件:(2)关闭文件(close<文件描述符>)

该函数关闭由<文件描述符>所指定的文件,并返回nil

例如:(closefp)(setq

fp

(open“D:/TEMP/CAD/filename.dat”“w”))834.4.1文件操作函数(3)读行函数(read-line[文件描述符])①(read-line文件描述符)该函数从<文件描述符>表示的文件中的当前指针位置处读入一行数据,并返回由这些数据构成的字符串,然后把文件指针移到下一行的首部。844.4.1文件操作函数例如:文件内容(506070)

30.54565.6②(read-line)

该函数等待用户从键盘输入一行数据;(read-linef)→(read-linef)→“(506070)”“30.54565.6”854.4.1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论