autocad二次开发.ppt
《autocad二次开发.ppt》由会员分享,可在线阅读,更多相关《autocad二次开发.ppt(67页珍藏版)》请在三一办公上搜索。
1、本土化,包括语言、标准和习惯等,二次开发的意义,减少重复劳动,满足不同特定企业、行业的需要,比如 CAXA系列、开目CAD 天河CAD、InteCAD 中望CAD、尧创CAD、浩辰CAD,企业产品:系列化,面向对象:所有工业部门的 功能:全而不专,圆柱齿轮、锥齿轮、非圆齿轮、齿条等,阀门行业换热器行业锅炉行业,AutoLisp,ADS,DCL,ADSRX,ObjectARX,Activex,VBA,VLisp,Automation,Autocad 开发方式及发展,第一代AutoLisp,概 述,1986年随AutoCAD v2.18提供的二次开发工具。是嵌入AutoCAD内部的COMMON L
2、ISP的一个子集。是唯一的一种解释型语言使用AutoLISP可直接调用几乎所有的AutoCAD命令AutoLISP语言的应用 最典型应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL(Dialog Control Language)文件,创建自己的对话框。,(defun c:11(/p1 p2)(setq p1(getpoint 输入第一个点)(setq p2(getpoint 输入第二个点)(command line p1 p2),Defun 函数-定义函数,(defun 函数名(函数参数/变量表)表达式),例如定
3、义一个加3 函数,程序源代码如下:(defun mul 3(x)(setq x(+3 x),(defun C:AutoCAD命令名(/局部变数表)表达式,setq:赋值函数作用:给变量进行赋值。格式:(setq name value name value.)其中Name为变量名 Value为赋予变量的值,(函数名函数参数.),Auto LISP 以表的形式调用函数,其格式如下,这里的函数参数的数量可能为 0,也可以为任意多个,这取决于具体的函数。每个参数还可以是表达式,返回的是表达式的最终计算结果。每调用一个函数都会得到函数的结果,即函数的返回值。有的函数返回的是数值,有的函数返回的是逻辑常数
4、T 或者 nil,这取决于函数princ(打印字符)函数,比如(princ)。调用自定义函数的方法与调用系统提供的函数的方法相同,例如:,Auto LISP 用command 函数调用AutoCAD 命令,其格式如下。(command“AutoCAD命令”“命令所需的数据”),(command“line”“6,9”“18,27”“”),List函数List函数用于定义一个二维或三维点,若表达式中不包含任何变量及未定义项,则该函数还可以使用单引号()命名。示例(setq(List 2.5 3.56)返回 2.5,3.56(setq(2.5 3.56)返回 2.5,3.56,car、cdr与cad
5、r函数1.car函数 car函数返回一个表中的第一个元素。若表中不包含任何元素,函数返回nil。car函数格式为:(car List)其中car.返回第一个元素 list.元素列表示例:(car(2.5 3.56)返回 2.5(car(x)返回(car(15 20)56)返回(15 20)(car()返回 nil其中的单引号表示个表。,2.cdr函数 cdr函数返回一个移去了表的第一个元素后的列表,其格式为(cdr List)其中cdr.返回第一个元素被移去的列表 list.元素列表示例:(cdr(2.5 3.56)返回(3.56)(cdr(,y,z)返回(y,)(cdr(15 20)56)返
6、回(56)(cdr()返回nil,3.cadr函数 cadr函数执行两个操作,cdr和car,返回列表中第二个元素。cdr函数移去了第一个元素。car函数返回新表中的第一个元素。、cadr函数的格式为:(cadr List)其中 cadr.执行两个操作(car(cdr()List元素列表 示例:(cadr(2 3)返回3(cadr(2 3 56)返回3(cadr(x))返回(cadr(15 20)56 24)返回56 这些例子中,cadr执行两个操作(cadr()=(car(cdr()=(car(y z)返回,princ函数Princ函数打印(或显示)变量的值。若变量位于双引号中,该函数打印(
7、或显示)双引号内的表达式。princ函数的格式为:(Princ变量或表达式)示例:(princ)在屏幕上打印一个空行(princ)在屏幕上打印出变量的值(princ“Welcome”)在屏幕上打印Welcome,运行错误有以下两种情况(1)语法错误:没有按程序规定的语言写程序,这是低级错误。(2)逻辑错误:程序员错误地理解了计算机所要完成的任务,这是高级错误,对于一个程序员来说要尽量避免。无意输入错误变量名对计算机而言也属于这种错误。,(defun c:11(/p1 p2)(setq p1(getpoint 输入第一个点)(setq p2(getpoint 输入第二个点)(command li
8、ne p1 p2),画线,(defun c:rect1(/p1 p2 p3 p4)(graphscr)(setvar cmdecho 0)(prompt rect1 command draws a rectangle)(terpri)(setq p1(getpoint Enter first corner)(terpri)(setq p3(getpoint Enter opposite corner)(terpri)(setq p2(list(car p3)(cadr p1)(setq p4(list(car p1)(cadr p3)(command line p1 p2 p3 p4 c)(s
9、etvar cmdecho 1)(Princ),画矩形,(defun C:BA()(setq allarea 0)(print 请拾取内部一个点)(while(setq pt(getpoint)(command boundary pt)(command area o l)(setq allarea(+allarea(getvararea)(print 总面积是)(print allarea)(print 请拾取内部一个点),累计面积计算,(1)语言规则十分简单,易学易用;(2)直接针对AutoCAD,易于交互;(3)解释执行,立竿见影。,优 点,第一代AutoLisp,(1)功能单一,综合处理
10、能力差;(2)解释执行,程序运行速度慢;(3)缺乏很好的保护机制,源程序保密性差;(4)LISP用表来描述一切,并不能很好地反映现实世界和过程,跟人的思维方式也不一致;(5)不能直接访问硬件设备、进行二进制文件的读写。AutoLISP的这些特点,使其仅适合于有能力的终端用户完成一些自己的开发任务。,缺 点,第一代AutoLisp,什么是宏?,计算机中宏又称为宏命令,即通过特殊的控制语,将一系列动作简便化;即:一种批处理的程序,AutoCad中的宏,就是一个程序工具集,用VBA,LISP一类的语言编程,完成一个相对复杂的工具集合,也是用编程语言的方式简化软件操作的过程。,word 或 ppt 中
11、的宏比如:将图片批量删除或批量修改图片尺寸,Public Sub macrodemo()MsgBox“欢迎使用VBA”End Sub,例题1,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc
12、(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,例题 2,Sub和end sub标志程序的开始和结束C100 宏的名称,也叫过程名称 当用户执行 C100 时,程序将运行 sub 和 end sub 之间的所有指令,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call Thi
13、sDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,cc 变量名cc()数组cc(0 To 2)数组有三个元素:CC(0)、CC(1)、CC(2)As Double 数据类型是双精度型声明坐标变量注释语法:Dim 变量名 As 数据类型将cc作为坐标数组,存储坐标值,坐标值是双精度型例:Dim a As single Dim cc(1 To 3)As Long,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To
14、 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,cc(0)x坐标cc(0)内存储x的坐标值1000,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,cc(1)y坐标cc(1)内存储y的坐标值10
15、00,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,cc(2)z坐标cc(2)内存储z的坐标值0,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开
16、始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,语法:For 变量=数值1 To 数值2 Step 数值3For循环语句i 变量(变换范围:数值1到数值2)数值3 数值1变化到数值2的步长,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iE
17、nd Sub,Call调用其他程序或方法ThisDrawing.ModelSpace当前CAD文档的模型空间AddCircle 画圆方法,需要两个参数:圆心和半径CC()圆心坐标,i*10 圆的半径这些圆的半径分别是,例题 2,10、110、210、310,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,Next与F
18、or语句配套,例题 2,Sub c100()Dim cc(0 To 2)As Double 声明坐标变量cc(0)=1000 定义圆心坐标cc(1)=1000cc(2)=0For i=1 To 1000 Step 10 开始循环Call ThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNext iEnd Sub,例题 2,坐标值的输入:程序写入手动输入鼠标拾取,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,输入点:)获取点坐标z=ThisDrawing
19、.Utility.GetReal(Z坐标:)用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGo ToErr_Control出错陷井Do开始循环p2=ThisDrawing.Utility.GetPoint(p1,vbCr&输入下一点:)获取下一个点的坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p2(2)=z将Z坐标值赋予点坐标中CallThisDrawing.ModelSpace.AddLine(p1,p2)画直线p1=p2将第二点的端点保存为下一条直线的第一个端点坐标LoopErr_Control:EndSub,例题 3,Su
20、bmy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,输入点:)获取点坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGo ToErr_Control出错陷井Do开始循环p2=ThisDrawing.Utility.GetPoint(p1,vbCr&输入下一点:)获取下一个点的坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p2(2)=z将Z坐标值赋予点坐标中CallTh
21、isDrawing.ModelSpace.AddLine(p1,p2)画直线p1=p2将第二点的端点保存为下一条直线的第一个端点坐标LoopErr_Control:EndSub,Sub和end sub标志程序的开始和结束my1 宏的名称,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,输入点:)获取点坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGo ToErr_Control出错陷井Do开始循环p2
22、=ThisDrawing.Utility.GetPoint(p1,vbCr&输入下一点:)获取下一个点的坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p2(2)=z将Z坐标值赋予点坐标中CallThisDrawing.ModelSpace.AddLine(p1,p2)画直线p1=p2将第二点的端点保存为下一条直线的第一个端点坐标LoopErr_Control:EndSub,定义 p1和 p2 存放坐标 variant,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.Ge
23、tPoint(,输入点:)获取点坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGo ToErr_Control出错陷井Do开始循环p2=ThisDrawing.Utility.GetPoint(p1,vbCr&输入下一点:)获取下一个点的坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p2(2)=z将Z坐标值赋予点坐标中CallThisDrawing.ModelSpace.AddLine(p1,p2)画直线p1=p2将第二点的端点保存为下一条直线的第一个端点坐
24、标LoopErr_Control:EndSub,Utility 提示用户输入 Getpoint 输入点格式:Getpoint(参考点,“提示信息”)Getpoint(p1,“请输入一个点p2”)起点p1,终点p2跟随鼠标移动(不画实线),Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,输入点:)获取点坐标z=ThisDrawing.Utility.GetReal(Z坐标:)用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGo ToErr_Control出错陷井Do开始循环p2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- autocad 二次开发
链接地址:https://www.31ppt.com/p-6501926.html