autocad二次开发.ppt
《autocad二次开发.ppt》由会员分享,可在线阅读,更多相关《autocad二次开发.ppt(67页珍藏版)》请在装配图网上搜索。
本土化,包括语言、标准和习惯等,二次开发的意义,减少重复劳动,满足不同特定企业、行业的需要,比如CAXA系列、开目CAD天河CAD、InteCAD中望CAD、尧创CAD、浩辰CAD,企业产品:系列化,面向对象:所有工业部门的功能:全而不专,圆柱齿轮、锥齿轮、非圆齿轮、齿条等,阀门行业换热器行业锅炉行业,,AutoLisp,,ADS,,DCL,,ADSRX,,ObjectARX,,Activex,,VBA,,VLisp,Automation,Autocad开发方式及发展,第一代——AutoLisp,概述,1986年随AutoCADv2.18提供的二次开发工具。是嵌入AutoCAD内部的COMMONLISP的一个子集。是唯一的一种解释型语言使用AutoLISP可直接调用几乎所有的AutoCAD命令AutoLISP语言的应用最典型应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL(DialogControlLanguage)文件,创建自己的对话框。,(defunc:11(/p1p2)(setqp1(getpoint"输入第一个点"))(setqp2(getpoint"输入第二个点"))(command"line"p1p2"")),,Defun函数--定义函数,(defun函数名([函数参数][/变量表])表达式……),例如定义一个加3函数,程序源代码如下:(defunmul3(x)(setqx(+3x))),(defunC:AutoCAD命令名(/局部变数表)表达式,setq:赋值函数作用:给变量进行赋值。格式:(setqnamevalue[namevalue]...)其中Name为变量名Value为赋予变量的值,(函数名[函数参数]…..),AutoLISP以表的形式调用函数,其格式如下,这里的函数参数的数量可能为0,也可以为任意多个,这取决于具体的函数。每个参数还可以是表达式,返回的是表达式的最终计算结果。每调用一个函数都会得到函数的结果,即函数的返回值。有的函数返回的是数值,有的函数返回的是逻辑常数T或者nil,这取决于函数princ(打印字符)函数,比如(princ)。调用自定义函数的方法与调用系统提供的函数的方法相同,例如:,AutoLISP用command函数调用AutoCAD命令,其格式如下。(command“AutoCAD命令”“命令所需的数据”),(command“line”“6,9”“18,27”“”),List函数List函数用于定义一个二维或三维点,若表达式中不包含任何变量及未定义项,则该函数还可以使用单引号(’)命名。示例(setqx(List2.53.56))返回2.5,3.56(setqx’(2.53.56))返回2.5,3.56,car、cdr与cadr函数1.car函数car函数返回一个表中的第一个元素。若表中不包含任何元素,函数返回nil。car函数格式为:(carList)其中car…......返回第一个元素list.........元素列表示例:(car‘(2.53.56))返回2.5(car‘(xyz))返回X(car‘((1520)56)返回(1520)(car‘())返回nil其中的单引号表示~个表。,2.cdr函数cdr函数返回一个移去了表的第一个元素后的列表,其格式为(cdrList)其中cdr.........返回第一个元素被移去的列表list.........元素列表示例:(cdr‘(2.53.56))返回(3.56)(cdr‘(x,y,z)返回(y,z)(cdr‘((1520)56)返回(56)(cdr‘())返回nil,3.cadr函数cadr函数执行两个操作,cdr和car,返回列表中第二个元素。cdr函数移去了第一个元素。car函数返回新表中的第一个元素。、cadr函数的格式为:(cadrList)其中cadr……...执行两个操作(car(cdr‘(xyz)))List………元素列表示例:(cadr‘(23))返回3(cadr‘(2356))返回3(cadr‘(xyz))返回y(cadr‘((1520)5624))返回56这些例子中,cadr执行两个操作(cadr‘(xyz))=(car(cdr‘(xyz))=(car‘(yz))返回y,princ函数Princ函数打印(或显示)变量的值。若变量位于双引号中,该函数打印(或显示)双引号内的表达式。princ函数的格式为:(Princ[变量或表达式])示例:(princ)在屏幕上打印一个空行(princa)在屏幕上打印出变量a的值(princ“Welcome”)在屏幕上打印Welcome,运行错误有以下两种情况(1)语法错误:没有按程序规定的语言写程序,这是低级错误。(2)逻辑错误:程序员错误地理解了计算机所要完成的任务,这是高级错误,对于一个程序员来说要尽量避免。无意输入错误变量名对计算机而言也属于这种错误。,(defunc:11(/p1p2)(setqp1(getpoint"输入第一个点"))(setqp2(getpoint"输入第二个点"))(command"line"p1p2"")),画线,(defunc:rect1(/p1p2p3p4)(graphscr)(setvar"cmdecho"0)(prompt"rect1commanddrawsarectangle")(terpri)(setqp1(getpoint"Enterfirstcorner"))(terpri)(setqp3(getpoint"Enteroppositecorner"))(terpri)(setqp2(list(carp3)(cadrp1)))(setqp4(list(carp1)(cadrp3)))(command"line"p1p2p3p4"c")(setvar"cmdecho"1)(Princ)),画矩形,(defunC:BA()(setqallarea0)(print"请拾取内部一个点")(while(setqpt(getpoint))(command"boundary"pt"")(command"area""o""l")(setqallarea(+allarea(getvar"area")))(print"总面积是")(printallarea)(print"请拾取内部一个点"))),累计面积计算,(1)语言规则十分简单,易学易用;(2)直接针对AutoCAD,易于交互;(3)解释执行,立竿见影。,优点,第一代——AutoLisp,(1)功能单一,综合处理能力差;(2)解释执行,程序运行速度慢;(3)缺乏很好的保护机制,源程序保密性差;(4)LISP用表来描述一切,并不能很好地反映现实世界和过程,跟人的思维方式也不一致;(5)不能直接访问硬件设备、进行二进制文件的读写。AutoLISP的这些特点,使其仅适合于有能力的终端用户完成一些自己的开发任务。,缺点,第一代——AutoLisp,什么是宏?,计算机中宏又称为宏命令,即通过特殊的控制语,将一系列动作简便化;即:一种批处理的程序,AutoCad中的宏,就是一个程序工具集,用VBA,LISP一类的语言编程,完成一个相对复杂的工具集合,也是用编程语言的方式简化软件操作的过程。,word或ppt中的宏比如:将图片批量删除或批量修改图片尺寸,PublicSubmacrodemo()MsgBox“欢迎使用VBA”EndSub,例题1,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,例题2,Sub和endsub—标志程序的开始和结束C100—宏的名称,也叫过程名称当用户执行C100时,程序将运行sub和endsub之间的所有指令,,,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,cc—变量名cc()—数组cc(0To2)—数组有三个元素:CC(0)、CC(1)、CC(2)AsDouble—数据类型是双精度型‘声明坐标变量—注释语法:Dim变量名As数据类型将cc作为坐标数组,存储坐标值,坐标值是双精度型例:DimaAssingleDimcc(1To3)AsLong,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,cc(0)—x坐标cc(0)内存储x的坐标值1000,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,cc(1)—y坐标cc(1)内存储y的坐标值1000,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,cc(2)—z坐标cc(2)内存储z的坐标值0,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,语法:For变量=数值1To数值2Step数值3For循环语句i—变量(变换范围:数值1到数值2)数值3—数值1变化到数值2的步长,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,Call—调用其他程序或方法ThisDrawing.ModelSpace—当前CAD文档的模型空间AddCircle—画圆方法,需要两个参数:圆心和半径CC()—圆心坐标,i*10—圆的半径这些圆的半径分别是,,例题2,10、110、210、310,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000‘定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,Next与For语句配套,,,例题2,Subc100()Dimcc(0To2)AsDouble声明坐标变量cc(0)=1000‘定义圆心坐标cc(1)=1000cc(2)=0Fori=1To1000Step10开始循环CallThisDrawing.ModelSpace.AddCircle(cc,i*10)画圆vNextiEndSub,例题2,坐标值的输入:程序写入手动输入鼠标拾取,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,Sub和endsub—标志程序的开始和结束my1—宏的名称,,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,定义p1和p2—存放坐标variant,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,Utility—提示用户输入Getpoint—输入点格式:Getpoint(参考点,“提示信息”)Getpoint(p1,“请输入一个点p2”)起点p1,终点p2跟随鼠标移动(不画实线),,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,Utility—提示用户输入GetReal—输入数值格式:GetReal(“提示信息”),,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,P1(2)--数组中的第三个数存放位置即z坐标值存放位置,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,OnError--出错陷井语句GoTo—跳转语句,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,Do—循环开始标志Loop—循环结束标志,,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,将输入点赋给p2,从p1开始,橡皮线连着p2,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,将输入的值赋给z,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,再将Z值放入数组中,p2有x、y、z三个坐标值,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,当前CAD文档.模型空间.画线,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,将第一条线的第二点作为第二条线第一点,,Submy1()Dimp1AsVariant申明端点坐标Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,"输入点:")获取点坐标z=ThisDrawing.Utility.GetReal("Z坐标:")用户输入Z坐标值p1(2)=z将Z坐标值赋予点坐标中OnErrorGoToErr_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,出错后跳转到Err_Control,执行之后的语句,,,,,,基本变换,透视变换,平移变换,全比例变换,abcpdefqhIjrlmns,图形变换矩阵,PrivateSubcmdscale_click()DimTransmatrix(0To3,0To3)AsDoubleDimindexlAsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNextTransmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWithUnloadMeEndSub,,定义矩阵并初始化,矩阵赋值,,,图形转换修改颜色更新,DimTransmatrix(0To3,0To3)AsDoubleDimindex1AsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNext,DimTransmatrix(0To3,0To3)AsDoubleDimindexlAsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNext,定义Transmatrix:4*4矩阵数据类型:Double,,DimTransmatrix(0To3,0To3)AsDoubleDimindex1AsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNext,定义index1:行数index2:列数数据类型:Integer,,DimTransmatrix(0To3,0To3)AsDoubleDimindex1AsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNext,内层循环:第一行为零,,DimTransmatrix(0To3,0To3)AsDoubleDimindex1AsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNext,外层循环:行列都置零,,,Transmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1,Transmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1,将文本框内的值赋给矩阵(0,0)位置,,Transmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1,将文本框内的值赋给矩阵(1,1)位置,,Transmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1,将文本框内的值赋给矩阵(2,2)位置,,Transmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,3)=1,矩阵(1,1)位置赋值1,,WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWith,WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWith,使用With可以省略书写内容结尾:endwith,,,WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWith,TransformBy:图形矩阵转换命令,,WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWith,改变转换后图形颜色,,WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acRed.Item(.Count-1).UpdateEndWith,更新图形,,PrivateSubcmdscaleToCenter_click()Centerpoint=ThisDrawing.Utility.GetPoint(,"输入缩放点")DimTransmatrix(0To3,0To3)AsDoubleDimindexlAsInteger,index2AsIntegerForindex1=0To3Forindex2=0To3Transmatrix(index1,index2)=0NextNextDimscalefactorAsDoublescalefactor=frmtransformations.TxtscalefactorTransmatrix(0,0)=CDbl(Txtscalefactor)Transmatrix(1,1)=CDbl(Txtscalefactor)Transmatrix(2,2)=CDbl(Txtscalefactor)Transmatrix(3,0)=CDbl((1-Txtscalefactor)*Centerpoint(0))Transmatrix(3,1)=CDbl((1-Txtscalefactor)*Centerpoint(1))Transmatrix(3,2)=CDbl((1-Txtscalefactor)*Centerpoint(2))WithThisDrawing.ModelSpace.Item(.Count-1).TransformBy(Transmatrix).Item(.Count-1).color=acBlue.Item(.Count-1).UpdateEndWithUnloadMe,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- autocad 二次开发

链接地址:https://www.zhuangpeitu.com/p-3389623.html