AutoCAD二次开发教程

合集下载

AutoCAD二次开发实用教程第5章 AutoLISP文件

AutoCAD二次开发实用教程第5章 AutoLISP文件

第5章 AutoLISP文件
5.5 打开、关闭文件的函数 1.(OPEN <文件名> <方式>) 功能:该函数打开一个文件,准备对文件读写数据。 <文件名>是字符串,指定要打开文件的名称和扩展名。文件 名前面可以加文件路径,如果不加路径则OPEN默认其路径为
AutoCAD启动目录。 <方式>是一个读/写标志,指明文件的状态为打开文件用于读、 写或追加。字符串可以包含下列字符之一: r:打开用于读操作。 w :打开用于写操作。如果<文件名>不存在,则创建新文件 并打开它。如果文件名存在,则覆盖其现有数据。
第5章 AutoLISP文件
5.4 搜索、获得文件的函数 2. (GETFILED "对话框标题" "文件名" "扩展名" 标志值) “文件名”可以为空串。 “扩展名”也可以为空串,隐含指出文件的扩展名是*(即所 有类型的文件)
标志值是整数,可为1、2、4、8,这几个值组成一个大于0 而小于15的值。各标志值的含义是: 1 在覆盖一个现存文件时,会给用户警告信息。 2 使TYPE It按钮变成灰色,即禁用TYPE It按钮。 4 允许用户改变文件原扩展名。 8 AutoCAD使用它搜索路径,仅返回文件名,而不包含路 径描述。如果不设置它,则返回整个路径描述。
第5章 AutoLISP文件
5.5 打开、关闭文件的函数
2.(CLOSE<文描述符>) 函数的功能:该函数关闭一个已打开的文件,以切断文件描述 符与文件的联系,并返回NIL(见上例) <文描述符>:在OPEN函数打开文件时获得的文件描述符。 返回值: 当用户用OPEN函数打开文件,并进行读、写操作后,必须用 CLOSE函数将文件关闭。这是因为:①若文件没有关闭,则 内存上的部分数据可能因未写到外存文件中而丢失;②由于用 OPEN打开的文件要占用有限的内存,关闭文件,则内存释放。 CLOSE函数的返回值为NIL。

AutoCAD官方二次开发教程

AutoCAD官方二次开发教程

第 1章 Hello World: 工程的创建在这一章中,我们将不使用ObjectARX向导来创建一个新的工程。

我们将使用Visual Studio .NET来创建一个新的类库工程。

通过这个工程,你可以创建一个能被AutoCAD装载的.NET dll文件。

这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。

当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。

1) 启动Visual ,选择”文件>新建>工程”(File> New> Project)。

在新建工程对话框中选择工程类型为”Visual Basic 工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。

点击确定按钮来创建工程。

2) 在工程的Class1.vb文件中,一个公有类“Class1”已经被系统自动创建了。

接下来向这个类加入命令。

要加入命令,你必须使用AutoCAD .NET托管封装类。

这些托管封装类包含在两个托管模块中。

要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。

在弹出的”添加引用”对话框中选择”浏览”。

在”选择组件”对话框中,选择AutoCAD 2006的安装目录(这里假定为C:\Program Files\AutoCAD 2006\),在这个目录下找到“acdbmgd.dll”然后选择并打开它。

再一次选择”浏览”,在AutoCAD 2006的安装目录下找到“acmgd.dll”并打开它。

当这两个组件被加入后,请单击”添加引用” 对话框中的”确定”按钮。

正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX 托管类,而acmgd.dll包含AutoCAD托管类。

3) 使用对象浏览器(Visual 的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。

cad二次开发教程

cad二次开发教程

cad二次开发教程
当办公软件无法满足特定需求时,我们通常需要进行CAD软件的二次开发。

CAD软件的二次开发可以帮助我们定制各种功能,以提高工作效率和满足特定需求。

以下是一个简单的CAD二次开发教程,让我们开始吧。

第一步:了解CAD软件的API
每个CAD软件都有自己的应用程序编程接口(API)。

通过研究CAD软件的API文档,我们可以了解到CAD软件提供的各种功能和接口。

第二步:编写代码
根据我们的需求,在CAD软件的API基础上编写代码。

我们可以使用各种编程语言,如C++,C#或Python。

编写的代码可以实现特定的功能,如自动绘制特定类型的图形,自动计算尺寸等等。

第三步:测试和调试
完成代码编写后,我们需要对其进行测试和调试。

通过在CAD软件中运行我们的代码,并观察其行为和效果,我们可以检查是否达到了我们的预期结果。

如果出现错误或异常,我们需要对代码进行调试,找出问题所在并进行修复。

第四步:部署和使用
在代码完全测试并修复所有错误后,我们可以将其部署到CAD软件中使用。

根据不同的CAD软件,部署方式可能会有所不同。

通常,我们需要将代码文件放置在特定的文件夹中,
并将其与CAD软件进行关联。

总结
CAD二次开发是为了满足特定需求而对CAD软件进行编程的过程。

通过了解CAD软件的API,编写代码,测试和调试,以及部署和使用,我们可以成功实现自定义功能和特定需求,提高工作效率。

希望以上教程对你有所帮助!。

AutoCAD二次开发实用教程第9章 编辑源程序代码

AutoCAD二次开发实用教程第9章 编辑源程序代码
Байду номын сангаас
9.2 文本操作 1. 选取文本 双击鼠标左键是选取文本最简单的方法,具体选取了哪些字符是根据 光标在以下的位置决定的。 1)若光标紧挨某左圆括号之前,将选取该左圆括号至与之匹配的右圆 括号之间的所有文本。 2)若光标紧跟某右圆括号之后,将选取该右圆括号至与之匹配的左圆 括号之间的所有文本。 3)若光标紧挨某双引号之前,将选取该双引号至下一个双引号之间的 所有文本。 4)若光标紧跟某双引号之后,将选取该双引号至前一个双引号之间的 所有文本。 5)若光标紧挨某字符串前、紧跟某字符串后或某字符串内部,将选取 该字符串。 单击鼠标左键,按住Shift键 在另一个位置单击鼠标左键,将选取这两 个光标之间的所有文本。
2.移动文本 使用标准的Windows剪切、复制和粘贴功能外,Visual LISP文本编辑器 还允许用户用以下方法将文本从文本编辑器窗口的某个位置拖到另一 个位置。 移动文本的步骤是: 1)选取要移动的文本。 2)光标移到被选取文本之内的任意位置后,按住鼠标左键,光标改 变为下图左侧所示的形状。 3)将文本拖拽到新的位置,松开鼠标左键即可 3. 复制文本 复制文本与移动文本只有第三步不同,在拖拽文本时,需要按住Ctrl 键, Ctrl 光标改变为下图右侧 所示的形状,然后将文本复制到新的位置。
2)文本选取快捷键 除了双击鼠标左键,选取那些由光标位置决定的文本之外,还可使用 文本选取快捷键。
Shift + ↓:选该字符开始到下一行该字符位置前所有字符 Shift + ↑:选该字符开始到上一行该字符位置后所有字符Shift + End:选 该字符开始到行末的所有字符 Shift + Home:选该字符开始到行首的所有字符 Shift + PgDn:选该字符开始到下一页该字符位置前所有字符 Shift + PgUp;选该字符开始到上一页该字符位置后所有字符 Ctrl + Shift + →:选该字符开始到该词结束的所有字符 Ctrl + Shift + ←:选该字符开始到该词开始的所有字符 Ctrl + Shift + [:选该字符开始到与其匹配的左括号所有字符Ctrl + Shift + ]: 选字符开始到与其匹配的右括号所有字符 Alt + Enter:将光标移到已选取文本的另一端

AutoCAD二次开发实用教程第3章 AutoLISP基本函数

AutoCAD二次开发实用教程第3章 AutoLISP基本函数

第3章 AutoLISP基本函数
3.1 数值函数 数值函数是AutoLISP语言最基本的函数之一,它用于处理 整型数和实型数。 数值函数的运算规则如下: 1) 若参数表中的所有参数都为整型数,则求值器对参数表中 的参数做整数运算,返回整数值。例如(/ 17 3)返回值为5
而不是5.6667。 2) 若参数表中有一个实型数,则对参数表中的参数进行浮点 数学运算,返回实型数。例如(/ 17 3.0)返回值为5.6667。 3) 若参数表中的参数多于两个,则从前到后,遵循前两条规 则,每两个参数进行数值运算,再把运算结果与下一个参 数进行运算。例如(/ 17 3 2.0)求值器先进行17除以3,得5, 再用5除以2.0得2.5,该函数最后返回值为2.5。
第3章 AutoLISP基本函数
3.1.1 计算函数 6.(REM <数1> <数2>…) 函数返回<数l>除以<数2>的余数,若参数多于两个,则将< 数1>除以<数2>的余数再除以<数3>得余数,…,即为运算 结果。
例如: (REM 42 12) 返回6 (REM 42 12.0) 返回6.0000 (REM 20 2) 返回0 (REM 36 5 2) 返回1,此式相当于(REM(REM 36 5) 2) (REM 3) 返回3 注:余数的正负符号与被除数的符号相同。
返回4.0700 返回9.0000 返回-1 返回9.0000 返回2.0
第3章 AXP <数>) 该函数返回e的<数>次幂的值。 注意:返回值为实型。 例如:
(EXP (EXP (EXP (EXP
1.0) 返回值2.718282(即e1) 0) 返回值1.000000(即e0) -0.4) 返回值0.670320(即e-0.4) 2.2) 返回值9.02501(即e2。2)

AutoCAD二次开发实用教程第12章 使用ActiveX

AutoCAD二次开发实用教程第12章 使用ActiveX
对象是ActiveX应用程序的主要组成部分。例如,直线、圆 弧、多义线和圆等都被称为图形对象。但在使用ActiveX时,以 下AutoCAD本身及概念都被称为对象。 1. 样式设置对象,如线型(linetype)、文本样式(style)和尺寸 样式(dimstyle)等。 2. 组织结构对象,如图层(layer)和块(block)等。 3. 图形显示对象,如视图(view)和视口(viewport)。
线型和组等)的访问是由名称相近的特性(如Layers、
Linetype和Groups等)提供的。
12.3.3 过程总结
实现的功能是用ActiveX Automation在AutoCAD图
形中画一个圆对象,函数调用序列如下所示:
(vl-load-com)
(setq acadObject(vlax-get-acad-object))
12.4 ActiveX对象访问
Application对象是AutoCAD对象模型中的基础, 从Application对象可以访问其他任何对象,或是被 访问对象的特性或方法。如果要在AutoLISP中使用 ActiveX函数,必须先调用vl-load-com函数来加载 所有的ActiveX函数。 该函数先检查是否已经加载了ActiveX函数,如 果已经加载,则该函数不做任何工作,如果尚未加载 ActiveX支持函数,vl-load-com函数将为AutoLISP 语言加载ActiveX以及其他Visual LISP扩展部分。
1. 获取AutoCAD应用程序
2. AutoCAD应用程序的属性和方法
12.3.2 应用程序对象以下的其他ActiveX对象
沿着AutoCAD对象模型层次图,应用程序对象
的ActiveDocument特性将把用户带到文档对象,它

CAD二次开发Visual_LISP指南

CAD二次开发Visual_LISP指南

CAD二次开发Visual_LISP指南CAD二次开发是指在CAD软件平台上进行个性化开发和定制化编程,以满足用户特定需求Visual LISP是AutoCAD软件的一种编程语言,通过使用Visual LISP语言可以对AutoCAD进行二次开发。

下面是CAD二次开发Visual LISP的指南,希望对开发人员有所帮助。

一、入门准备1.学习基础知识在开始进行CAD二次开发前,需要充分了解AutoCAD软件的基本功能和特点,熟悉CAD软件的界面、命令、对象模型以及常用API(应用程序接口)等。

2.掌握Visual LISP语言Visual LISP是CAD软件平台上的一种编程语言,与AutoLISP类似。

学习和掌握Visual LISP语言是进行CAD二次开发的基础。

可以通过学习书籍、在线教程和参考文档等途径来提高自己的编程能力。

3.安装开发工具需要安装CAD软件的开发工具,例如AutoCAD自带的AutoCAD Developer Tools或者Visual LISP IDE等。

这些工具提供了编写、调试和管理二次开发项目的必要环境。

二、开始二次开发1.确定需求在进行CAD二次开发前,需要明确开发的具体需求和目的。

这可以包括添加自定义命令、修改现有功能、创建用户界面等等。

确保清晰地定义需求和目标,以便更好地进行开发工作。

2.编写代码通过Visual LISP语言编写代码来实现二次开发的需求。

VisualLISP提供了一系列的函数和命令,可以对AutoCAD的对象模型进行访问和操作。

根据需求,编写相应的函数、宏和命令,实现具体的功能。

3.调试和测试在编写代码后,进行调试和测试是不可或缺的步骤。

通过运行调试器、打印日志、进行单元测试等方式来验证代码的正确性和稳定性。

及时修复和调整代码中的问题,确保其能够正常运行。

4.文档和发布完成开发工作后,建议对代码进行适当的文档整理和注释,方便后续的维护和管理。

AutoCAD二次开发实用教程第7章 AUTOLISP实训

AutoCAD二次开发实用教程第7章 AUTOLISP实训

第7章 AUTOLISP实训
7.2 设置图层、颜色、线型和线宽
2. 设置新图形对象的颜色 1)通过command函数设置新图形对象的颜色 (command "color" 3) 或 (command "color" "green") 颜色为绿色 (setvar "cecolor" "2")或 ;设置新图形对象的
第7章 AUTOLISP实训
7.1设置作图环境
3. 设置目标捕捉的类型 交互式操作时,目标捕捉类型的选项是字符串,它以编码的形式记录在系 统变量osmode内。例如: 1)通过command函数设置目标捕捉的类型 (command "osnap" "endpoint,midpoint,center") 中点和中心 (command "osnap" "none") 类型 2)通过setvar函数设置目标捕捉的类型 ;捕捉端点、 ;不捕捉任何
第7章 AUTOLISP实训
7.3 AutoLISP程序设计的六个步骤
编写程序的预期目标; Step1
Step2 设计程序流程、需要的AutoLISP功能函数、变量及相 关提示信息; Step3 利用Visual LISP编辑器编写xxx.lsp源程序; Step4 在AutoCAD命令提示下加载AutoLISP程序,( load”lsp文件名”),或是在VisualLISP控制台加载 AutoLISP程序; Step5 运行加载成功的AutoLISP程序; Step6 加入AutoLISP程序至“工具条”或“MENU菜单中”的 方法可参阅相关资料,建议最好参阅VisualLISP的帮助文 档。

VB对AutoCAD的二次开

VB对AutoCAD的二次开

实验VB对AutoCAD的二次开发一、实验目的了解CAD二次开发的几种形式,掌握VB对AutoCAD进行二次开发,实现参数化绘图的技巧。

二、实验要求1、了解AutoCAD二次开发的基本原理2、掌握运用VB开发界面的方法3、掌握运用VB调用AutoCAD库函数,完成相关功能的方法三、实验步骤1、建立AutoCAD和VB之间的连接启动VB,建立“标准exe”程序,选择菜单“工程”——“引用”,选择“AutoCAD 2004 Type Library”。

2、创建界面3、程序编码1)定义全局变量Dim AcadApp As AcadApplication 'AutoCAD应用程序变量Dim AcadDoc As AcadDocument 'AutoCAD文档变量2)引用AutoCAD应用程序Private Sub Command1_Click()On Error Resume NextIf Err ThenErr.ClearEnd IfSet AcadApp = New AcadApplicationIf Err ThenMsgBox Err.DescriptionExit SubEnd If'设置AutoCAD应用程序参数AcadApp.WindowTop = 0AcadApp.WindowLeft = 400AcadApp.Width = 600AcadApp.Height = 800AcadApp.Visible = TrueAcadApp.Documents.AddSet AcadDoc = AcadApp.ActiveDocumentAcadDoc.WindowState = acMaxCommand4.Enabled = TrueEnd Sub3)参数化绘图Private Sub Command4_Click()'设置新图层Dim layer1 As AcadLayerDim layer2 As AcadLayerSet layer0 = yers.Item(0)Set layer1 = yers.Add("粗实线层")Set layer2 = yers.Add("中心线层")layer1.Lineweight = acLnWt080 '粗实线的线宽layer1.Color = acWhitelayer2.Color = acRedAcadDoc.Linetypes.Load "centerx2", "acad.lin"layer2.Linetype = "centerx2"'输入原始参数Dim Center(0 To 2) As DoubleDim Vert(0 To 7) As DoubleDim L04 As DoubleDim L01 As DoubleDim b As DoubleDim r As Doubleb = Val(Text2.Text): r = Val(Text1.Text) / 2: L01 = r - Val(Text3.Text) L04 = Sqr(r * r - (b / 2) ^ 2)Center(0) = 100: Center(1) = 100: Center(2) = 0'画中心线AcadDoc.ActiveLayer = layer2Dim line1 As AcadLineDim line2 As AcadLine'定义两直线的端点Dim pl1s(0 To 2) As DoubleDim pl1e(0 To 2) As DoubleDim pl2s(0 To 2) As DoubleDim pl2e(0 To 2) As Doublepl1s(0) = Center(0) - r - 1.5: pl1s(1) = Center(1): pl1s(2) = 0pl1e(0) = Center(0) + r + 1.5: pl1e(1) = Center(1): pl1e(2) = 0pl2s(0) = Center(0): pl2s(1) = Center(1) + r + 1.5: pl2s(2) = 0pl2e(0) = Center(0): pl2e(1) = Center(1) - r - 1.5: pl2e(2) = 0Set line1 = AcadDoc.ModelSpace.AddLine(pl1s, pl1e)Set line2 = AcadDoc.ModelSpace.AddLine(pl2s, pl2e)'创建辅助的优化多段线AcadDoc.ActiveLayer = layer1'定义键槽直线端点Dim p1(0 To 2) As DoubleDim p2(0 To 2) As DoubleDim p3(0 To 2) As DoubleDim p4(0 To 2) As DoubleDim angVal As DoubleDim pLine1 As AcadLineDim pLine2 As AcadLineDim pLine3 As AcadLineDim pArc As AcadArcDim pi As Double '定义圆周率p1(0) = Center(0) - b / 2: p1(1) = Center(1) + L01: p1(2) = 0p2(0) = p1(0): p2(1) = Center(1) + L04: p2(2) = 0p3(0) = p1(0) + b: p3(1) = p1(1): p3(2) = 0p4(0) = p1(0) + b: p4(1) = p2(1): p4(2) = 0Set pLine1 = AcadDoc.ModelSpace.AddLine(p1, p2)Set pLine2 = AcadDoc.ModelSpace.AddLine(p1, p3)Set pLine3 = AcadDoc.ModelSpace.AddLine(p3, p4)angVal = Atn((b / 2) / L04)pi = 3.1415Set pArc = AcadDoc.ModelSpace.AddArc(Center, r, pi / 2 + angVal, 2 * pi + pi / 2 - angVal)AcadApp.ZoomExtentsAcadDoc.ActiveLayer = layer0End Sub'查询Private Sub CmdSeek_Click() Dim aVal As Integer 'A值 aVal = CInt(Text1.Text) Text2.Text = GetVal(aVal)End Sub。

autocad二次开发(VBA)就这么简单

autocad二次开发(VBA)就这么简单

autocad二次开发(VBA)就这么简单autocad二次开发(VBA)就这么简单运行autocad,创建一个新文件,Alt+F11(或者在菜单栏点“工具”→“宏”→“Visual Basic 编辑器”),在新出现的窗口菜单栏点“插入”→“模块”,输入下面的代码:Sub 我的第一个程序()Dim 直线1 As AcadLineDim 起点(0 TO 2) As DoubleDim 端点(0 TO 2) As Double起点(0) = 10起点(1) = 20端点(0) = 80端点(1) = 100Set 直线1 = ThisDrawing.ModelSpace.AddLine(起点, 端点)End Sub检查一下,确信没有问题后按F5回到autocad窗口,看见了吗?一条直线,起点坐标(10,20),端点坐标(80,100) 这个程序的第一行里,“SUB”和“()”是必须有的(人家微软就是这么规定的,我也没办法),“我的第一个程序”是这个程序的名字(如果你不喜欢也可以改个别的名字,我无所谓)。

第二行里,“Dim”是定义一个变量,“直线1”是要画的直线的名字(随便改,中英文都行),后面的英文必须有,意思是说:这是一条autocad直线。

第三行里,“起点(2)”是一个数组(因为我要用它给直线赋予起点,所以取了个直观的名字,又因为点的坐标是三维的,所以必须用能容纳三个数据的数组),后面的英文意思是“这个数据是双精度类型”。

第四行和第三行差不多,是用来给直线赋予端点的。

第五行和第六行是分别赋值给起点的x和y坐标(因为起点的z坐标是0,而定义这个数组的时候,默认数据就是(0,0,0),所以就不用管z坐标了)。

第七行、第八行赋值给端点x和y坐标。

第九行画直线,在“当前文件”的“模型空间”“画直线(按起点和端点)”。

第十行,完事了。

有的网友一看见英文,头就会变大。

别怕,如果你是用“复制/粘贴”把这段代码拷贝到VB编辑器里,就不会知道autocad有多么友善。

AutoCAD二次开发的方法与实例

AutoCAD二次开发的方法与实例

AutoCAD二次开发的方法与实例AutoCAD是一款广泛应用的CAD软件,具有二次开发的能力。

AutoCAD二次开发是将AutoCAD的API和开发工具与其他软件的API和工具结合使用,并将AutoCAD的功能与其他应用程序的功能集成。

AutoCAD二次开发可以自动化绘制过程,节省时间和人力,提高生产率。

AutoCAD二次开发的方法:1.使用ObjectARX进行自定义编程ObjectARX是一种C ++编程接口,可用于开发自定义应用程序和高级命令。

ObjectARX可以让程序员使用全局变量、类和函数等等。

使用这些概念来创建与AutoCAD交互的自定义应用程序。

ObjectARX还提供了一些命令、选项和工具来帮助程序员将其自定义代码集成到AutoCAD中。

2.使用Visual Basic for Applications (VBA)进行自定义编程VBA是一种广泛使用的面向对象编程语言,是Microsoft Office的一部分。

通过在AutoCAD的VBA编辑器中编写代码,程序员可以创建自定义命令和功能,以满足其特定的绘图需求。

VBA还提供了一些内置函数和对象,使编程更加简单和直观。

3.使用.NET Framework进行自定义编程使用.NET Framework,程序员可以使用多种编程语言(如C#、、F#等)来编写与AutoCAD交互的应用程序。

通过将.NET程序集嵌入到AutoCAD中,程序员可以创建自定义工具栏、菜单和命令。

.NET Framework还提供了大量的功能和类库,使得开发更加高效和简单。

AutoCAD二次开发的实例:1. 使用VBA实现批量修改AutoCAD文件名Sub BatchRename()Dim sDir As StringDim sOldName As StringDim sNewName As StringDim sMessage As StringsDir = InputBox(\。

AutoCAD二次开发实用教程第11章 编辑及维护AutoLISP程序

AutoCAD二次开发实用教程第11章 编辑及维护AutoLISP程序

11.2.1 创建新应用程序
5) 单击“下一步”,如果在“专家模式”下运行“生成
应用程序”向导,则将弹出“要包含的资源文件”对话
框,如图11-7所示。在该对话框中,可以指定应用程序 要包含的其他资源文件,这些资源文件得类型可以为以 下几种:AutoLISP源程序文件、AutoLISP编译文件、 Visual LISP工程文件、DCL文件、DVB及文本文件。
包含AutoLISP内部函数副本的可加载模块。这个加载模块
对内部函数的静态链接会增加编译后程序的运行效率,但 也会带来一些问题。 在编译多个程序文件组成的应用程序包时,更有可能 发生上述问题,此时应当使用Visual LISP 提供的工程管理 系统工具来自动实现程序代码的优化,而不是使用VlispCompile来做较大的程序包的编译。
成FAS文件,也可以使用生成应用程序向导生成应用程
序包,编译成VLX文件。
11.1.1 Visual LISP编译器
Vlisp-Complie函数的调用格式为: (vlisp-compile ’mode “filename” [out-filename]) 例题1 例题2
11.1.2 加载运行已编译程序
生成prv文件,该文件包括建立可执行应用程序全部过程的指令。
11.2.1 创建新应用程序
1.创建应用程序的步骤
1) 从Visual LISP 菜单中选择“文件”→“新建应用程序向
导”命令,则将显示如图11-3所示的“向导模式”对话框。 “生成应用程序”向导有两种模式:简单模式和专家模式。 简单模式中,仅需指明要生成的应用程序文件名,而专家模 式则会有更多的选项,在多数情况下,选专家模式。
文件、DVB文件以及其他一些应用程序可能需要的资源文件。 Visual LISP可执行模块又被称为VLX文件。 利用Visual LISP提供的“生成应用程序向导”不仅可以指 导用户在Visual LISP中生成应用程序,而且在这个过程中同时

autocad的二次开发

autocad的二次开发

autocad的二次开发(1)编写各种用户自定义函数并形成假设干LISP、ARX、VLX或ADS文件,以及一些DCL文件。

(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。

(3)在系统的ACAD、LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。

(4)通过系统对话框设置某些路径。

这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。

为此笔者用VC++开发了一套自动安装程序,使原本需要【五】六分钟的人工操作在十几秒内即可自动完成。

【一】基本思路整个安装程序遵循以下思路:1〕首先获得所在机器AutoCAD2000系统的安装路径;2〕寻找菜单文件AutoCAD2000\\support\\acaD、mnu,打开文件并将要添加的内容加至末尾;3〕寻找LISP文件AutoCAD2000\\support\\acad2000doC、lsp,打开文件并将要添加的内容加至末尾;4〕创建一个预先命名的子目录,将所有二次开发形成的各类文件拷入;5〕给出信息框,告知安装成功,如有问题那么告知安装失败。

需要指出的是,在添入acad2000doC、lsp的内容中须有如下语句:〔command“_menu”〔strcat〔getvar”menuname”〕”、mnu”〕〕,目的是为了强制执行菜单文件装入命令,将改动后的acaD、mnu文件编译后装入。

另外,在添入acad2000doC、lsp的内容中还有一赋值语句,将准备创建的包含所有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在AutoCAD环境下交互设定路径的麻烦。

AUTOCAD利用VBA进行二次开发

AUTOCAD利用VBA进行二次开发

利用VBA对AUTOCAD进行二次开发实例——输入螺栓参数自动生成图形①打开AUTOCAD软件②依次点击工具l菜单,选择,Macro(A),click Visual Basic Editor(B)③打开 Microsoft Visual Basic Editor 窗口.and “公共的额”,之后点击“确定”,如下图所示:.⑤点击.点击:Command:输入螺钉长度完成绘制VBA原程序Public Sub liweiwei()Set acadapp = CreateObject("autocad.application") Dim lineObj As AcadLineDim pt1 As VariantDim d As DoubleDim l As DoubleDim pt2(0 To 2) As DoubleDim pt3(0 To 2) As DoubleDim pt4(0 To 2) As DoubleDim pt5(0 To 2) As DoubleDim pt6(0 To 2) As DoubleDim pt7(0 To 2) As DoubleDim pt8(0 To 2) As DoubleDim pt9(0 To 2) As DoubleDim pt10(0 To 2) As DoubleDim pt11(0 To 2) As DoubleDim pt12(0 To 2) As DoubleDim pt13(0 To 2) As DoubleDim pt14(0 To 2) As DoubleDim pt15(0 To 2) As DoubleDim pt16(0 To 2) As DoubleDim pt17(0 To 2) As DoubleDim pt18(0 To 2) As DoubleDim pt19(0 To 2) As DoubleDim pt20(0 To 2) As Doublept1 = ThisDrawing.Utility.GetPoint(, "输入第一角点")d = Val(InputBox("所绘制螺钉的直径:”) )l = Val(InputBox("所绘制螺钉的长度:"))pt2(0) = pt1(0) + 0.4 * d: pt2(1) = pt1(1): pt2(2) = pt1(2)pt3(0) = pt1(0) + 0.4 * d: pt3(1) = pt1(1) + 1.5 * d: pt3(2) = pt1(2)pt4(0) = pt1(0): pt4(1) = pt1(1) + 1.5 * d: pt4(2) = pt1(2)pt5(0) = pt1(0): pt5(1) = pt1(1) + 0.95 * d: pt5(2) = pt1(2)pt6(0) = pt1(0) + 0.2 * d: pt6(1) = pt1(1) + 0.95 * d: pt6(2) = pt1(2)pt7(0) = pt1(0) + 0.2 * d: pt7(1) = pt1(1) + 0.55 * d: pt7(2) = pt1(2)pt8(0) = pt1(0): pt8(1) = pt1(1) + 0.55 * d: pt8(2) = pt1(2)pt9(0) = pt1(0) + 0.4 * d: pt9(1) = pt1(1) + 1.25 * d: pt9(2) = pt1(2)pt10(0) = pt1(0) + 0.4 * d + l - 1: pt10(1) = pt1(1) + 1.25 * d: pt10(2) = pt1(2) pt11(0) = pt1(0) + 0.4 * d + l - 1: pt11(1) = pt1(1) + 0.25 * d: pt11(2) = pt1(2) pt12(0) = pt1(0) + 0.4 * d: pt12(1) = pt1(1) + 0.25 * d: pt12(2) = pt1(2)pt13(0) = pt1(0) + 0.4 * d: pt13(1) = pt1(1) + 1.25 * d - 1: pt13(2) = pt1(2)pt14(0) = pt1(0) + 0.4 * d + l: pt14(1) = pt1(1) + 1.25 * d - 1: pt14(2) = pt1(2) pt15(0) = pt1(0) + 0.4 * d + l: pt15(1) = pt1(1) + 0.25 * d + 1: pt15(2) = pt1(2) pt16(0) = pt1(0) + 0.4 * d: pt16(1) = pt1(1) + 0.25 * d + 1: pt16(2) = pt1(2)pt17(0) = pt1(0) + 0.4 * d +1:pt17(1) = pt1(1) + 1.25 * d: pt17(2) = pt1(2)pt18(0) = pt1(0) + 0.4 * d + 1 :pt18(1) = pt1(1) + 0.25 * d: pt18(2) = pt1(2)pt19(0) = pt1(0) - 5: pt19(1) = pt1(1) + 0.75 * d: pt19(2) = pt1(2)pt20(0) = pt1(0) + 0.4 * d + l + 5: pt20(1) = pt1(1) + 0.75 * d: pt20(2) = pt1(2) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt1, pt2)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt2, pt3)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt3, pt4)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt4, pt5)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt5, pt6)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt6, pt7)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt7, pt8)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt8, pt1)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt9, pt10)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt10, pt11)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt11, pt12) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt13, pt14) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt14, pt15) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt15, pt16) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt10, pt14) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt11, pt15) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt17, pt18) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt19, pt20)End Sub。

AutoCAD二次开发实用教程第13章 使用反应器

AutoCAD二次开发实用教程第13章 使用反应器

5. 打开含有永久反应器的图形时的注意事项
13.5 反应器的使用规则
1. 不要依赖于反应器通报的顺序 2. 不要依赖于通报间函数调用的顺序 3. 不要在反应器回调函数中使用任何需要和用户交互的函数 4. 在事件处理函数中不要加载对话框
5. 不要更新引发事件的对象
6. 不要在回调函数中执行能触发相同事件的操作 7. 能在发生同一事件时调用多个回调函数 8. 显示有模对话框时,不会发生任何事件
AutoLISP为运行在非激活文档中的反应器回调
函数提供了有限的支持。默认情况下,只有在定义反
应器的文档是活动文档时,才会在相关事件出现时,
调用反应器的回调函数。但用户可使用r-setnotification函数改变这种默认行为。
13.3 查询、修改和控制反应器的状态
13.3.1 查询反应器
1.了解图形中有关反应器的总体情况
件的内容编写这些事件发生时所要激活的函数。
13.1.3 反应器的回调函数
要设计一个基于反应器的应用程序,就必须首 先确定的事件,然后再编写当该事件发生时所要执行 的程序即回调函数(callbackfunction)。 反应器是通过回调函数同应用程序相互通信的, 回调函数是一个用defun函数定义的标准AutoLISP程 序,只不过是与其事件反应器绑定在一起时就成为了 回调函数。也就是说反应器的回调函数就是回调事件 发生时所要执行的函数。
外,还要注意以下几点:
1) 在定义所有者列表时,只能指定VLA对象,而不允 许使用ename对象。要求VLA对象是因为回调函数只能用 ActiveX方法修改AutoCAD对象,而ActiveX方法要求使 用VLA对象。 2) 如果对象已被包括在对象反应器的所有者列表之中, 那么就不能在回调函数中修改该对象。如果这样做,将

AutoCAD二次开发初级入门教程

AutoCAD二次开发初级入门教程

1. Components of the AutoCAD .NET APIDllAcDbMgd.dll. Use when working with objects in a drawing file.AcMgd.dll. Use when working with the AutoCAD application.AcCui.dll. Use when working with customization files.Before classes, structures, methods, and events found in one of the AutoCAD .NET API related DLLs can be used, you must reference the DLL to a project. After a DLL is referenced to a project, you can utilize the namespaces and the components in the DLL file in your project.Once a AutoCAD .NET API DLL is referenced, you must set the Copy Local property局部性质of the referenced DLL to False.Reason:T he Copy Local property determines if Microsoft Visual Studio creates a copy of the referenced DLL file and places it in the same directory as the assembly file of the project when it is built. Since the referenced files already ship with AutoCAD, creating copies of referenced DLL files can cause unexpected results when you load your assembly file in AutoCAD.2. To reference an AutoCAD .NET API DLLIn Microsoft Visual Studio, click View menu Solution Explorer to display the Solution Explorer if it is not already displayed.In the Solution Explorer, on the toolbar along the top, click Show All Files.Right-click the References node and click Add Reference.In the Add Reference dialog box, Browse tab, select the DLL file that contains the library you want to use and click OK.In the Solution Explorer, click the plus sign to the left the References node to expand it.Select the referenced library from the References node.Right-click over the selected reference and click Properties.In the Properties window, click the Copy Local field and select False from the drop-down list.3. 合适网站终于找到了/ACD/2010/ENU/AutoCAD%%20Develo per's%20Guide/index.html.net帮助/adsk/servlet/index?siteID=123112&id=770215#v batonetSDK samplesdevelopercentre/developautocaddiscussion groupsnews:///autodesk.autocad.customization.dotnet /apitraining/joinadn/autocad-net-developers-guide4. 移植思路添加dotnet的应用Autocad2010 type library(类型库)Com –autodesk.autocad.dllmon.dllAcmgd.dllAcadmgd.dll5. Thisdrawing的获得方法Private readonly property thisdrawing() as acaddocumentGetReturnautodesk.autocad.applicationservices.application.documentmanager.mdiactiv edocument.acaddocumentEnd getEnd propertyVbdotnet必须指明其数据类型。

第7章 autoCAD二次开发

第7章 autoCAD二次开发

创建对齐标注 Dim objDim As AcadDimAligned Set objDim = ThisDrawing.ModelSpace.AddDimAligned(ExtLine1Point, ExtLine2Point, textPostion) 创建转角标注 Dim objDim As AcadDimRotated Set objDim = ThisDrawing.ModelSpace.AddDimRotated(ExtLine1Point, ExtLine2Point, dimLinePostion, rotationAngle) *.AddDimRadial(centerPoint,angle,radius)
2 创建和编辑二维图形对象
说明: Dim a, b as Double Dim a as Double, b as Double
2 创建和编辑二维图形对象
2 圆和圆弧 • 方法:AddCircle 和AddArc 方法: • AddCircle (圆心,半径) 圆心,半径) • AddArc(圆心,半径,起始和终值角) AddArc(圆心,半径,起始和终值角) • AddCircle(centerPoint,radius) AddCircle(centerPoint,radius) • AddArc(centerPoint,radius,startAngle,endAngle)
1概述
大部分的集合对象都是通过Document对象访问, 大部分的集合对象都是通过Document对象访问,对于每一个 Document对象访问 集合对象,Document对象都有一个相应的特性 对象都有一个相应的特性。 集合对象,Document对象都有一个相应的特性。 如:通过定义变量访问集合对象 Dim objLayer As AcadLayer Dim layerCollection As AcadLayers Set layerCollection = yers layerCollection.Add(“中心线 中心线”); Set objLayer = layerCollection.Add(“中心线”); “细实线 细实线” = “细实线”

AutoCAD_VBA二次开发初级教程(选做)

AutoCAD_VBA二次开发初级教程(选做)

AutoCAD VBA二次开发初级教程第一课:入门1.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。

2、VBA有多难?相信大家都知道Basic是的含义。

应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。

3、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。

仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。

本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。

本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。

我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。

4、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行”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) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。

AutoCAD二次开发

AutoCAD二次开发

例:创建过三点(1,1)、(3,2)、(4,9) 的轻便多段线。 Dim Dx As AcadLWPolyline Dim Po(5) As Double Po(0)=1:Po(1)=1 Po(2)=3: Po(3)=2 Po(4)=4: Po(5)=9 Set Dx=AcadApp.ActiveDocument.ModelSpace.AddLigh tWeightPolyline(Po) Acadapp.ZoomExtents AcadApp.ZoomAll
AutoCAD对象根据它们的不同功能,具有一定 的隶属关系。
Application(应用程序)
Preferences(系统配置)
Documents(文档)
Blocks(块) ModelSpace(模型空间) PaperSpace(图纸空间) Utility(使用程序) MenuBar MenuGroups 访问菜单和工具条
§5 接收用户输入点
用ActivaDocument.Utility 的GetPoint、GetDistance、 GetAngle函数可以接收用户输入的点坐标、半径、起始 角度和终止角度。 ptcen = acadapp.ActiveDocument.Utility.GetPoint(, “指定圆心") ra = acadapp.ActiveDocument.Utility.GetDistance(, “输入半径") stang = acadapp.ActiveDocument.Utility.GetAngle(, “输入起始角度") enang = acadapp.ActiveDocument.Utility.GetAngle(, “输入终止角度")

AutoCAD二次开发实用教程第4章 程序流程控制

AutoCAD二次开发实用教程第4章 程序流程控制

第4章 程序流程控制
4.1.1 GET族输入函数 7. GETANGLE,GETORIENT函数 2)(GETORIENT [基点][提示]) GETORIENT函数与GETANGLE函数相似,等待输入一个角 度,输入方式与GETANGLE相同。不同的是返回的是一个方 位角度值,即绝对角度(总是以正东方向为零度,逆时针方向 测量输入角度)。而GETANGLE返回的是相对角度(以当前零 度方向为基准,逆时针方向测量角度)。 例如: ANGBASE被设置为90°(正北),ANGDIR被设置为顺时针 方向,表4-2中列举了不同角度输入值时,GETANGLE和 GETORIENT的返回值。
第4章 程序流程控制
4.1.1 GET族输入函数 3. (GETREAL [提示]) 返回值:用户输入的实数。 例如: (SETQ val (GETREAL)) (SETQ val (GETREAL "缩放比例:")) 注意:用户不能输入其他AutoLISP表达式来响应GETREAL 的请求。
第4章 程序流程控制
况下顺序结构都是作为程序的一部分,与其他结构一起构成一 个复杂的程序。
第4章 程序流程控制
4.1.1 GET族输入函数 1.(GETXXX[<提示>]) <提示>是任意字符串,当调用GETXXX时,程序暂停<提示> 所提示的信息,显示在屏幕上等待用户输入指定类型的数据, 见表4-1,并返回输入的值。
第4章 程序流程控制
4.1.1 GET族输入函数 6. GETPOINT,GETCORNER函数 2) (GETCORNER<基点>[<提示>]) 注意:<基点>必须存在。GETCORNER函数需要一个以当 前UCS坐标系表示的基点作为参数,当用户在屏幕上移动光标 时,它会从这个基点开始拖引出一个矩形框。返回值与 GETPOINT类似,返回一个以当前UCS坐标系表示的点。 (SETQ Pt (GETCORNER '(1 2) "第二点:")) 第二点:5,4 返回值(5.0 4.0)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 1章 Hello World: 工程的创建在这一章中,我们将不使用ObjectARX向导来创建一个新的工程。

我们将使用Visual Studio .NET来创建一个新的类库工程。

通过这个工程,你可以创建一个能被AutoCAD装载的.NET dll文件。

这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。

当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。

1) 启动Visual ,选择”文件>新建>工程”(File> New> Project)。

在新建工程对话框中选择工程类型为”Visual Basic 工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。

点击确定按钮来创建工程。

2) 在工程的Class1.vb文件中,一个公有类“Class1”已经被系统自动创建了。

接下来向这个类加入命令。

要加入命令,你必须使用AutoCAD .NET托管封装类。

这些托管封装类包含在两个托管模块中。

要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。

在弹出的”添加引用”对话框中选择”浏览”。

在”选择组件”对话框中,选择AutoCAD 2006的安装目录(这里假定为C:\Program Files\AutoCAD 2006\),在这个目录下找到“acdbmgd.dll”然后选择并打开它。

再一次选择”浏览”,在AutoCAD 2006的安装目录下找到“acmgd.dll”并打开它。

当这两个组件被加入后,请单击”添加引用” 对话框中的”确定”按钮。

正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX托管类,而acmgd.dll包含AutoCAD托管类。

3) 使用对象浏览器(Visual 的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。

请展开“AutoCAD .NET Managed Wrapper”对象(在对象浏览器中显示为acmgd),在整个教程中我们将使用这个对象中的类。

在本章中,我们将使用“Autodesk.AutoCAD.EditorInput.Editor”类的一个实例来在AutoCAD命令行中显示文本。

请再展开“ObjectDBX .NET Managed Wrapper” 对象(在对象浏览器中显示为acdbmgd),这个对象中的类将被用来访问和编辑AutoCAD图形中的实体(这部分内容将在以后的章节中介绍)。

4) 引用了ObjectARX .NET 封装类后,我们就可以导入它们。

在Class1类的声明语句(位于Class1.vb文件的顶部的)之前,导入ApplicationServices, EditorInput 和 Runtime 命名空间。

Imports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.EditorInputImports Autodesk.AutoCAD.Runtime5) 接下来在类Class1中加入命令。

要加入能在AutoCAD 中调用的命令,你必须使用“CommandMethod”属性。

这个属性由Runtime命名空间提供。

在类Class1中加入下列属性和子程序。

注意续行符” _”的使用。

Public Class Class1<CommandMethod("HelloWorld")> _Public Sub HelloWorld()End SubEnd Class6) 当“HelloWorld”命令在AutoCAD中运行的时候,上面定义的HelloWorld子程序就会被调用。

在这个子程序中,一个Editor类的实例将被创建。

Editor类拥有访问AutoCAD命令行的相关方法,它还包括选择对象和其它一些重要的功能。

AutoCAD当前活动文档的Editor 对象可以使用Application类来访问。

当Editor对象被创建后,你可以使用它的WriteMessage方法在命令行中显示“Hello World”文本。

在HelloWorld子程序中加入以下代码:Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editored.WriteMessage("Hello World")7) 要在AutoCAD中调试这个程序,你可以让Visual 启动一个AutoCAD进程。

在解决方案管理器中右键单击“Lab1”,然后选择”属性”。

在Lab1的属性页对话框中,选择” 配置属性>调试”。

在”启动”项中,选择”启动一个外部程序”,接下来单击省略号按钮然后选择AutoCAD 2006安装目录下的acad.exe。

设置好以后,按F5来启动一个AutoCAD进程。

这样就会编译你的程序然后自动启动AutoCAD,而当编译后有错误的时候就会停止。

请修正你可能碰到的任何错误。

8) “NETLOAD”命令被用来装载你刚才编译的托管程序。

在AutoCAD命令行中输入NETLOAD,会出现”选择.NET组件”的对话框。

选择上面生成的“lab1.dll”然后打开它。

9) 在命令行中输入“HellowWorld”。

如果一切顺利的话,命令行中将显示“Hello World”文本。

切换到Visual ,在ed.W riteMessage(“Hello World”);语句处加入一个断点。

在AutoCAD中再次运行HelloWorld命令,你会注意到你可以跟踪代码的运行。

Visul 的”调试”菜单有好几项可以用来跟踪程序的运行。

如果有时间的话,请浏览一下CommandMethod属性。

你会发现它有七种不同的形式。

在上面的例子中,我们使用了最简单的形式,它只有一个输入参数(命令的名字)。

你可以使用其它的形式来控制命令的工作方式,例如你可以确定命令组的名字、全局和局部名字、命令标识(命令如何来运行)等。

第2章.net AutoCAD向导及简单用户输入在第一章中,我们使用的是类库模板,这样就不得不手工加入acdbmdg. dll 和acmgd.dll这两个引用。

在这一章中,我们将使用AutoCAD托管C#应用程序向导来创建.NET工程,它会自动加入以上两个引用。

在开始本章之前,你首先得安装ObjectARX向导(ObjectARX2006开发包的\utils\ObjARXWiz\ArxWizards.msi)。

1) 启动Visual Studio .NET,选择”文件>新建>工程”(File> New> Project)。

在新建工程对话框中选择工程类型为”Visual Basic工程”,然后选择“AutoCAD Managed VB Project Application”模板。

在工程名字框中输入”Lab2”,然后选择工程存放的位置。

点击确定按钮,“AutoCAD Managed VB Application Wizard”对话框将会出现。

因为我们不需要使用非托管代码,所以不要选择“Enable Unmanaged Debugging”项。

“ReGIStered Developer Symbol”将会使用你在安装ObjectARX向导时输入的值。

单击”finish”按钮来创建工程。

2) 下面来看一下向导生成的工程。

在解决方案浏览器中,你会看到acdbmgd 和acmgd已经被引用了。

在Class.vb文件中,“Autodesk.AutoCAD.Runtime”命名空间已被导入,工程使用“Registered Developer Symbol”的名字来命名缺省的公有类。

向导还为类加入了一个CommandMethod属性和一个函数,它们用于AutoCAD命令。

3) 在前一章中,我们使用一个“Autodesk.AutoCAD.EditorInput.Editor”类的实例对象在AutoCAD命令行上输出文本。

在这一章中,我们将使用这个类来提示用户在AutoCAD图形中选择一个点,然后将用户选择的点的x,y,z值显示出来。

和前一章一样,请导入Autodesk.AutoCAD.ApplicationServices 和Autodesk.AutoCAD.EditorInput命名空间。

Imports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.EditorInput4) 把向导生成的CommandMethod属性的值改为有意义一些的名字如“selectPoint”(函数的名字可以不用修改)。

PromptPointOptions类用来设置提示字符串和其它的一些控制提示的选项。

这个类的一个实例作为参数被传入到Editor.GetPoint方法。

在函数的开始,实例化这个类,设置字符串参数为“Select a point”。

因为Editor.GetPoint方法会返回一个PromptPointResult类的实例对象,所以我们也要把它实例化。

Dim prPointOptions As PromptPointOptions =New PromptPointOptions("Select a point")Dim prPointRes As PromptPointResult5) 接下来实例化一个Editor类的对象并使用参数为PromptPointOptions对象的GetPoint方法。

用GetPoint方法的返回值来给上面声明的PromptPointResult对象赋值。

赋值好以后,我们可以测试PromptPointResult对象的状态,如果不是OK就返回。

Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.EditorprPointRes = ed.GetPoint(prPointOptions)If prPointRes.Status <> PromptStatus.OK ThenReturn Nothing6) 如果PromptPointResult对象返回了一个有效的点,我们就可以使用WriteMessage方法把结果输出到命令行。

PromptPointResult.Value的ToString方法使输出非常容易:ed.WriteMessage("You selected point " & prPointRes.Value.ToString)7) 按F5 来运行一个调试AutoCAD的进程。

相关文档
最新文档