cad二次开发教程

cad二次开发教程
cad二次开发教程

CAD二次开发教程汇总

选择AutoLISP还是VBA?

我听到许多关于这样的问题。AutoLISP与VBA有什么不同呢?我要学习怎样二次开发AutoCAD,但我不能确定先学哪一个工具。哪一个工具更好呢?

简洁的回答是他们都好,你应当两者都学。分析我的回答,你可以知道这不是最快的解决办法,但在你做出一个完整的决定前,一个完整的回答需要时间和更多的问题。举个例子:你懂BASIC吗?如果你懂,那么VBA学起来会更快一些;如不懂BASIC,那么你学过其它的编程语言吗?如果你学的正好是FORTRAN或PASCAL的话,那也很好。因为如果你已掌握了这两种语言,则VBA的学习将十分简单。如果你一点儿也不懂程序设计语言,那么AutoLISP将会是适合你学习的语言。

如果你正好没有程序设计的知识和经验,那么在AutoCAD里你应当学习什么语言?这个问题很难回答。这取决于你希望完成什么样的工作?每种语言都有其优点和缺点,AutoLISP擅长建立新命令和产生已有命令的连接。VBA擅长执行包括在其他应用程序中的组件,如Microsoft的Excel和Access。AutoLISP是基于表处理的编程体系,它允许程序员随意地存储和操作传送信息,然而VBA部件包括数据和对复杂情况的各种有效操作,这就是问题变得复杂的地方,除非你已真正懂得这些工具的好处,否则,很难回答你应该选择哪一个,但你应当知道你想完成什么和允许完成什么,因为它将引导你向正确的解决方法前进。

稍后,你会发现这一简洁的回答是恰当的,你将会学习两种语言,你要做的一些事,可以在AutoLISP中用十分简单的几行代码来解决。另一方面,你会发现VBA提供了一些最简捷的应用程序解决方案。例如,建立一个复杂的包括许多对话框的应用,AutoLISP支持对话框,但是不如VBA支持的程度强,同时,在AutoCAD中一个任务的情况下,VBA提供在对象级别上访问AutoCAD系统,但它对AutoCAD的一些基本命令的支持性并不是很好,而AutoLISP在这一点上却做的很好。

这两种语言不具有很好的兼容性,这种情况是必然的,就是说,你不能把在AutoLISP 中写的东西放到VBA中随意使用,反之亦然。我并不是说这种情况不可能的,但却是很难以实现。最低限度是,一但你选择了一种语言来设计程序,你就不可能中途又用另一种语言来解决程序中的问题,你不得不继续使用你最初选择的语言。

那么,让我们从学术角度讨论一些两种语言间的不同之处。前面提到的AutoLISP是综合了逻辑结构与传统AutoLISP命令的一个完美工具,你能组合AutoCAD命令并放在一个有条件的逻辑脚本里,而产生强有力的自定义命令,这些命令能被用于自动操作通常的任务,也能解决计算问题而得到一个结果。基于命令种类的思想比目标角度的思想更简单,一个清楚直接指出不同点的例子:在一个多义线对象里打断编辑方法。如果你要打断一条多义线,你必须先计算并重新更新这个物体,Extend和Trim命令也一样。这些命令现在还并不包含在AutoCAD对象系统的实体对象编辑方法中。在不久它们会随时出现,这就是对象的好处。

在许多情况下,对象级的处理比命令方式更高级。当你执行一个命令时,你有可能可以也有可能不可以直接操作你所选取的对象。因为你必须依赖于AutoCAD的对象选择机制。对象不是模糊不清的。当你专门指定一个对象时,对你要操作的对象,它是很清楚的。

对象级别的处理在VisualLISP也可实现。使用VisualLISP中的(VL)扩展,你能改变对象的参数且在需要时调用对象的方法。你不得不使用对象引用,它可以从已有的实体名或直接产生的对象中生成,在大多数情况下,一个有经验的AutoLISP程序员不需要使用这些对象,但迟早它们会派上用场。/E!m(|"j!u"C4R

VisualLISP的另一优点是比VBA更接近AutoCAD系统。VBA不是由AutoCAD产生的,

它是在其它的环境下同样工作的一个附加的语言,象Microsoft的Word和Excel一样。它也类似于在AutoCAD中用VB(Visualbasic)语言编制程序的方法。VisualLISP仅在AutoCAD 里运行,它的优势是软件间有着密切的工作关系。当在命令行里提示用户时,你能发现一个不同点的例子。在VisualLISP里,你可以使用PROMPT或PRINT语句。在VBA里,你必须使用Prompt方法,这是优化对象的一部分,也是绘制对象的一部分,下面的几行代码将对AutoCAD命令行发出一个提示。第一行为VisualLISP语言;第二行用的是VBA。

有两件事显而易见,在VisualLISP里,在命令行窗口中,“\n”使光标跳到新的一行。VBA使用Chr$(10)功能,必需把它放在使用“&”操作符的提示字符串前才可以运行。其次是当类型数量相对实用对象的提示方法接近时,才会使用这个。三维网技术论坛+_. v$K;Q4p0Z9`6G

在AutoLISP中,可使用PRINT语句,在生成值前,“\n”使顺序转到新的一行开始。PRINT的另一个特点是可以输出任何数据类型,而PROMPT功能只能处理字符串。

在VBA里,对于优化对象的方法和AutoLISP里的“GET×××”函数一样,你必须一直使用字符串。AutoLISP包括几种不同的把你要使用的数据类型转化成字符串型的函数。RTOS把数值型转化成字符串型;ITOA把数值型转化成整数型。VBA提供两个数据转换函数:STR和FORMAT。当转化一个非负数时,STR函数返回一个精确的字符串,即在字符串前加上一个空格。这就是,str(-1.1)返回字符串“-1.1”,str(1.1)结果是“1.1”。FORMAT 允许你设立特别的转换格式。对正在学习VBA的人,可利用在线帮助查看有关该函数的帮助,它提供了大量的例子来演示数据是怎样被转化产生的。

对于AutoCAD的定制来说,由于AutoLISP语言是以命令的标准建立的,这促进了偏向于支持AutoLISP的尺度。你能使用AutoLISP中带“C:”作为新命令名称的头两个字符的方式来定义函数,该命令就像AutoCAD命令一样使用。“C:”函数被叫做“命令函数”。VBA有宏,你必须从程序管理器里运行宏。从命令提示(或普通的macro菜单)里运行不了宏,这就存在着一个重要问题。用户可以使用AutoLISP启动VBA程序管理,然后以相同的方式执行宏。使用命令行语句时,你应该确信在语句前加了“-”,格式如下:command“-VBALOAD”“mymacros”“-VBARUN”“mymacro”

如果你未用此负号,将会出现一个对话框,提示用户装载VBA和运行宏。在多数情况下用户并不想出现这个对话框。取而代之的是在命令行装载宏并用一个VBA模块来运行它,这样,首先出现的是在AutoLISP中很强列关注的东西,不再仅仅只是一个倾向。一但一个错误和漏洞发生,就会有其他相关问题出现,这在编程中并不寻常。

另外一点,VBA允许一个经由AutoLISP启动的过程,VBA还有一个反应绘图及同时处理多个图形的优良机制。在VisualLISP里,你能做这些工作,但在VBA里就不是如此容易了。其反应的事物与图形连系在一起,甚至嵌入图形模板中,有多种原因允许你所编程绘制图形。VisualLISP没有一些灵活的运行程序或操作菜单,因此它没有这些能力。VBA与VisualLISP争夺的另一领域为数据种类。VBA的数据种类多于VisualLISP,它包括了一些有用的如Date、Time的数据类型。在VisualLISP里日期和时间是用字符串或是数值存储的。在一张图形里,当你通过系统变量存取系统日期信息时,你会得到纯数字而不是日历天数。

在VBA中操作日期和时间是非常容易的,Format函数可以产生几乎任一种描述的格式,你可以用基本的数值来完成比较和区别。你能以某种自定义的格式存储或操作时间信息,方法简单。我听说顽固的AutoLISP程序员声称VBA不支持表处理而LISP支持,这是事实。但VBA不支持Variants类型,Variants与LISP库中的一些数据种类标志十分相似。Variants 允许VBA使用不同类型的数据和结构,但不如LISP中的表处理功能强大。表能存储许多种类型的数据且用几行基于MAPCAR、FOREACH、APPLY的代码就可以快速操作它们。

但是这些程序设计体系需要时间去掌握,许多程序设计的新手在使用VBA时,将不会遗漏结构的存取。

坦白的说,表处理进程并不像对象操作那样令人感兴趣。在VBA(和VisualLISP)中你能连接其它系统支持的对象。对程序员而言,ActiveX是面向Windows的一个面向对象的过程到过程的通信编程系统,它允许你的VBA程序运行在AutoCAD里,并且可借用Excel或其它一些支持自动操作的程序。因为Excel支持VBA,所以你能在一个Excel工作表中驱动AutoCAD。当你试着思考它时,多自动进程处理有着某些让人敬畏的潜力。

一个是在VBA(带有DVB扩展)里的,另一个在VisualLISP(带有LSP扩展)里,这些函数完成相同的事:他们提示用户输入一些定义一个铣槽的参数,并画出这个铣槽,这个铣槽可以放在任何角落且有一个90°的圆角或一个完整的半圆帽。这些例子表明了VBA与VisualLISP运行程序的风格的几个不同点,或许这就是最明显的产生lightweight多义线的的方法,在VBA里,该对象由一系列点确定,雏形产生后,拐点也相应产生了,VisualLISP 的例子简单使用PLINE命令去产生点和弧,因为他们可以从命令行提示中配置。从运行程序这一点而言,VisualLISP版本很容易产生,因为你不必知道任何拐点和他们怎样在多义线中使用,在VisualLISP我用EntMake语句,在一个实体列表中确定拐点,这个版本的基本命令很容易编译代码。如果你更深入地学习,你会发现VisualLISP和VBA是十分平衡的,这个的弱项正是另一个的强项。然而VBA支持一些新的理论,对于AutoLISP程序员而然,他的缺点是把一个简单问题复杂化。在大多数情况下,我倾向于VisualLISP,因为它提供了更多的自由度。对于AutoCAD的定制我有许多经验,但有些时候,根据客户需求,我会用VBA,因为对客户而言,其更容易维护。它提供了一些面向自动生成的模板。我的许多客户在定制AutoCAD时,并没有广博的经验,但他们有Basic语言基础,因为这点,他们使用我推荐的VBA。对于不久将需改变的元素的操作,他们感到很轻松。

上面所有的原因,就是我为什么推荐VisualLISP和VBA二者都学的缘故。话又说回来,这还要依据你所使用的工具而定,学会其一,已可以了,但你会错过向另一个方向发展的时间,这是必然的冲突。第一步,你可能从VBA中学习怎样运行LISP语句或者从VisualLISP 中学习运行传统VBA的方法。谁知道下一个将会是什么?

哪里开始

为了决定先学哪一个语言,让我们做一些自我评价:如果你很好地了解了AutoCAD的命令并希望自动使用它们,那么VisualLISP将是你的首选;如果你不懂AutoCAD,但你是一名知道对象是如何工作的计算机程序员,你可以学习VBA;如果你是一名C++程序员,你可以通过学习VBA而了解对象集是怎么结合在一起的,然后花一点时间学习ObjectARX (一个DLLs结构的C++库,运行于AutoCAD自身相同的内存映像),在这篇文章中没有讨论ObjectARX,是因为你必须使用外部的C++编译器,且必须从Autodesk公司获得开发工具包,而AutoCAD2000中直接配有VisualLISP和VBA编译器。2[.[/}-j!I#l t+?$n 给想学习AutoCAD的人最后一点建议:

寻找那些有范例的书和杂志。

上网查询这些内容,甚至是例子。VisualLISP和VBA的在线帮助常令初学者感到困惑,因为一些函数从VBA中引证,而另一些从VisualLISP中引证。无论你使用哪一个语言,你都有可能有从其它语言里偶然得到帮助的好机遇,因为它们是相关的。因此我强烈推荐看一本或两本书。你有大量选择的自由,多存些好书。

存在着许多选择,每一个都有其优点。无论你先学什么,在某一时间你应当学习所有的东西,为了去追寻更多的知识,这就意味着要不停的编制程序。BillCramer——有着二十多

年的运用CAD/CAM/CAE系统的经验,对于代码的更新,可到下载处下载。

AutoCAD VBA二次开发初级教程

AutoCAD VBA二次开发初级教程 第一课:入门 1.为什么要写这个教程 市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。 2.什么是Autocad VBA? VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。 3、VBA有多难? 相信大家都知道Basic是的含义。应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。 4、怎样学习VBA? 介绍大家一个学习公式:信心+恒心=开心。仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。 5、现在我们开始编写第一个程序:画一百个同心圆 第一步:复制下面的红色代码 第二步:在模型空间按快捷键Alt+F8,出现宏窗口 第三步:在宏名称中填写C100,点“创建”、“确定” 第四步:在Sub c100()和End Sub之间粘贴代码 第五步:回到模型空间,再次按Alt+F8,点击“运行” Sub c100() Dim cc(0 To 2) As Double '声明坐标变量 cc(0) = 1000 '定义圆心座标 cc(1) = 1000 cc(2) = 0 For i = 1 To 1000 Step 10 '开始循环 Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆 Next i End Sub 也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。

AUTO CAD二次开发

一、什么是AutoCAD二次开发:针对自己使用要求,优化,改善 软件使用功能、方式,用编程语言在CAD基础上写的程序二、应用背景:设计中一般都采用AutoCAD等设计软件,在复 杂CAD问题或特殊用途的设计设计中,依据原有软件的功能往往难以解决问题,在此情况下,只是会适用软件的基本功能是不够的,根据客户的特殊用途进行软件的客户化定制和二次开发,往往能够大大提高企业的生产效率和技术水平。

VBA即Mcrosoft office中的Visual Basic for Applications,它被集成到AutoCAD2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率 (5)面向对象,让用户能够根据自己的需要编写相关程序,进行二次开发。 五、AUTOCAD的历史: 六、AUTOCAD二次开发技术的应用领域:AUTOCAD二次开发技术广泛应用于机械、电子、建筑等领域、为标准件、常用件的参数化设计提供了强有力的支持。

AutoCAD二次开发教程复习总结

CAD复习题及答案1、AutoLISP 2、VisualLISP 3、VBA 4、ADS 5、ObjectARX

6、.NET 托管API 7、ActiveX Automation

8、Visual Java 1、 AutoCAD二次开发方式有哪些?各自优缺点? 2、 AutoCAD 中实现ObjectARX .NET API 的有哪些优点? 3、 AutoCAD .NET API 的三个主要的DLL文件是? 4、简述ObjectARX .NET API所对应的https://www.360docs.net/doc/d06823015.html,版本。 5、简述AutoCAD数据库的组成。 AutoCAD数据库是用来管理当前图形中的图元实体和其他非几何信息的容器对象,一个AutoCAD数据库包含一套固定的符号表和命名的对象词典,每一个符号表包含一个特定符号

表记录类的实例,例如层表(AcDbLayerTable)中包含层表的记录,块表(AcDbBlockTable)中包含块表记录,所有的AutoCAD实体均包含于块表记录中。词典提供了一种通用容器来存储对象,它可以保存AcDbObject对象以及其它对象,也可以创建新的对象词典,将新的数据库元素加入其中。 AutoCAD数据库的组成如图所示,从图中我们可以看出数据库主要由一下内容组成:1)层表AcDbLayerTable和层表记录AcDbLayerTableRecord,。 2)块表AcDbBlockTable和块表记录AcDbBlockTableRecord。AutoCAD中所有可见实体均存储在块表记录。块表中包含有两条特殊的记录*MODEL_SPACE(模型空间)和*PAPER_SPACE (图纸空间)。 3)其他符号表和符号表记录。 4)命名对象词典。缺省情况下当AutoCAD数据库被建立以后,词典中就包括了组词典以及MILINE样式词典。 5)符号表和命名对象词典都是存储数据库对象的容器,用于组织和管理数据库对象。AutoCAD数据库通常有9个固定类型的符号表,开发者不能向数据库中新增或者删除任何一种类型符号表,能实现的是向符号表中添加对应的符号表记录。 6、 Application 对象是AutoCAD .NET API 对象模型的根对象,它包括哪些部分? Application 对象是层次结构的根,而且它提供对AutoCAD 的主窗口的访问。

Autocad-VBA二次开发简易教程

第一课:入门 1.为什么要写这个教程 市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。 2.什么是Autocad VBA? VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。 3、VBA有多难? 相信大家都知道Basic是的含义。应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。 4、怎样学习VBA? 介绍大家一个学习公式:信心+恒心=开心。仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。本教程将陆续发布在CAD世界论坛上,您不需要付费就可以学习。本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。 5、现在我们开始编写第一个程序:画一百个同心圆 第一步:复制下面的红色代码 第二步:在模型空间按快捷键Alt+F8,出现宏窗口 第三步:在宏名称中填写C100,点“创建”、“确定” 第四步:在Sub c100()和End Sub之间粘贴代码 第五步:回到模型空间,再次按Alt+F8,点击“运行” Sub c100() Dim cc(0 To 2) As Double '声明坐标变量 cc(0) = 1000 '定义圆心座标 cc(1) = 1000 cc(2) = 0 For i = 1 To 1000 Step 10 '开始循环 Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆 Next i End Sub 也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。 第二课编程基础 本课主要任务是对上一课的例程进行详细分析 下面是源码: Sub c100() Dim cc(0 To 2) As Double '声明坐标变量 cc(0) = 1000 '定义圆心座标 cc(1) = 1000 cc(2) = 0 For i = 1 To 1000 Step 10 '开始循环 Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆

AutoCAD二次开发教程

第 1章 Hello World: 工程的创建 在这一章中,我们将不使用ObjectARX向导来创建一个新的工程。我们将使用Visual Studio .NET来创建一个新的类库工程。通过这个工程,你可以创建一个能被AutoCAD装载的.NET dll文件。这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。 1) 启动Visual https://www.360docs.net/doc/d06823015.html,,选择”文件>新建>工程”(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 https://www.360docs.net/doc/d06823015.html,的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。请展开“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.ApplicationServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Runtime 5) 接下来在类Class1中加入命令。要加入能在AutoCAD 中调用的命令,你必须使用“CommandMethod”属性。这个属性由Runtime命名空间提供。在类Class1中加入下列属性和子程序。注意续行符” _”的使用。 Public Class Class1 _ Public Sub HelloWorld() End Sub End Class 6) 当“HelloWorld”命令在AutoCAD中运行的时候,上面定义的HelloWorld子程序就会被调用。在这个子程序中,一个Editor类的实例将被创建。Editor类拥有访问AutoCAD命令行的相关方法,它还包括选择对象和其它一些重要的功能。AutoCAD当前活动文档的Editor 对象可以使用Application类来访问。当Editor对象被创建后,你可以使用它的

cad二次开发(块表的创建) (1)

实验三、块表的创建 一.实验目的: 通过本次掌握块表的基本创建方法 二.实验内容: 1、创建块表的定义及块表参照的插入 2、创建带有属性的块表及其带有属性块表的插入 3、在对话框中查看块定义的图标 4、在当前文件中插入外部文件的块 5、在当前文件中插入其他的DWG文件 三.实验步骤: 1、创建块表 代码: public class Block { public Document document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Transaction transaction; Database db; BlockTable blocktable; Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument. Editor; public void StartTransaction() { db = document.Database; transaction = db.TransactionManager.StartTransaction(); } [CommandMethod("createblock")] public void CreateBlock() {

StartTransaction(); try { blocktable = (BlockTable)transaction.GetObject(db.BlockTableId, OpenMode.ForWrite); BlockTableRecord blocktableRecord = new BlockTableRecord(); string blockName = "我的块表"; https://www.360docs.net/doc/d06823015.html, = blockName; blocktableRecord.Origin = new Point3d(0, 0, 0); Point3d center = new Point3d(0, 0, 0); DBPoint dbpoint = new DBPoint(center); Circle circle = new Circle(center, new Vector3d(0, 0, 1), 0.25); Polyline triangle = new Polyline(4); triangle.AddVertexAt(0, new Point2d(0, 1), 0, 0, 0); triangle.AddVertexAt(1, new Point2d(0.866, -0.5), 0, 0, 0); triangle.AddVertexAt(2, new Point2d(-0.866, -0.5), 0, 0, 0); triangle.AddVertexAt(3, new Point2d(0, 1), 0, 0, 0); blocktableRecord.Origin = new Point3d(0, 0, 0); blocktableRecord.AppendEntity(dbpoint); blocktableRecord.AppendEntity(circle); blocktableRecord.AppendEntity(triangle); blocktable.Add(blocktableRecord); transaction.AddNewlyCreatedDBObject(blocktableRecord, true); CreateBlockIcon createBlockIcon = new CreateBlockIcon(blockName); https://www.360docs.net/doc/d06823015.html,mit(); } 2、创建块表参照 代码: [CommandMethod("insertblk")] public void InsertBlock() { StartTransaction(); BlockTable blocktable = (BlockTable)transaction.GetObject(db.BlockTableId, OpenMode.ForWrite); BlockTableRecord blockTblRec =

CAD二次开发介绍

CAD二次开发技术介绍 摘要:本文对CAD技术中的二次开发所需的语言及工具介绍归纳,得出了一些有用的结论,对于了解CAD二次开发技术的发展及其如何适应具有一定的意义 关键词:CAD二次开发技术;AutoLISP 1.前言 AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前被大家广泛使用的,最新版本是AutoCAD2010,其二次开发语言及工具也在不断地涌现 由于大量的应用领域提供了特有的几何问题,对于这些问题必须建立有效的算法,画出更精确的图形,这就是孕育CAD的二次开发,AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。 2.CAD二次开发所涉及到的技术介绍 2.1AutoCAD二次开发的内容和工具 AutoCAD二次开发的主要目的是提高专业应用领域的工作效率,为专业绘图建立标准,并使常用的或重复的任务自动化等。内容如下: 开发具有专业特点的用户图形界面

cad二次开发基础教程和实例档

大家知道什么是宏吗? 说白它就是VBA过程。 看下面的代码: Public Sub MacroDemo() MsgBox "Hello,Welcome to AutoCAD VBA!" End Sub 这就是宏。 打开CAD输入命令vbaide回车会出现VBA的编辑界面,双击ThisDrawing在右侧的代码 区输入上面的代码。如下图: 然后按F5键会出现宏窗口,如下图: 点击运行,大家看到什么? 这就是一个最简单的一个用VBA对CAD进行二次开发的程序,也就是宏 那什么是VBA呢?VBA就是VB的一个子集它的全称是Visual Basic For Application,它具有VB的大部分功能。 既然我们选择了VBA,我们首先要知道VBA能操作CAD里的哪些对象呢? 打开VBAIDE窗口按下F2键会出现对象浏览器。如下图 库选择AutoCAD,这时下面显示的就是CAD为VBA提供的可操作的对象的类了。 这时有的人因没有基础,所以还是一头雾水,别怕,选中一个类图标后按F1,这时会弹出AutoCAD ActiveX and VBA Reference,选择最上面的一个子项Object Model(对象模型),这个 就是在CAD里那些对象的关系,如下图: 如果英文不好的话,可以安装CAD2000,它的这个部分是中文的。为想学好VBA二次开发这个是必需的,而且VBA对Office的二次开发也是这样的。 这个在编程界叫做Active X,包括Active X控件、Active X DLL、和Active X EXE 就好比一个程序为其它程序提供的一个后门一样 下面我就给大家讲一下菜单吧。 因为我们用到的其它公司做CAD二次开发的插件,从直观上首先接触的就是它的菜单,刚开始用的时候就是从它的菜单开始接触的。 我经常用到的做菜单的方法有两种,一种是用CAD的菜单文件,另一种就是用VBA代码直接长成菜单。

cad二次开发教程

CAD二次开发教程汇总 选择AutoLISP还是VBA ? 我听到许多关于这样的问题。AutoLISP与VBA有什么不同呢?我要学习怎样二次开发AutoCAD,但我不能确定先学哪一个工具。哪一个工具更好呢? 简洁的回答是他们都好,你应当两者都学。分析我的回答,你可以知道这不是最快的解 决办法,但在你做出一个完整的决定前,一个完整的回答需要时间和更多的问题。举个例子:你懂BASIC吗?如果你懂,那么VBA学起来会更快一些;如不懂BASIC,那么你学过其它的编程语言吗?如果你学的正好是FORTRAN或PASCAL的话,那也很好。因为如果你 已掌握了这两种语言,则VBA的学习将十分简单。如果你一点儿也不懂程序设计语言,那 么AutoLISP将会是适合你学习的语言。 如果你正好没有程序设计的知识和经验,那么在AutoCAD里你应当学习什么语言?这 个问题很难回答。这取决于你希望完成什么样的工作?每种语言都有其优点和缺点,AutoLISP擅长建立新命令和产生已有命令的连接。VBA擅长执行包括在其他应用程序中的 组件,如Microsoft的Excel和Access。AutoLISP是基于表处理的编程体系,它允许程序员随意地存储和操作传送信息,然而VBA部件包括数据和对复杂情况的各种有效操作,这就 是问题变得复杂的地方,除非你已真正懂得这些工具的好处,否则,很难回答你应该选择哪 一个,但你应当知道你想完成什么和允许完成什么,因为它将引导你向正确的解决方法前进。 稍后,你会发现这一简洁的回答是恰当的,你将会学习两种语言,你要做的一些事,可 以在AutoLISP中用十分简单的几行代码来解决。另一方面,你会发现VBA提供了一些最 简捷的应用程序解决方案。例如,建立一个复杂的包括许多对话框的应用,AutoLISP支持 对话框,但是不如VBA支持的程度强,同时,在AutoCAD中一个任务的情况下,VBA提供在对象级别上访问AutoCAD系统,但它对AutoCAD的一些基本命令的支持性并不是很好,而AutoLISP在这一点上却做的很好。 这两种语言不具有很好的兼容性,这种情况是必然的,就是说,你不能把在AutoLISP 中写的东西放到VBA中随意使用,反之亦然。我并不是说这种情况不可能的,但却是很难以实现。最低限度是,一但你选择了一种语言来设计程序,你就不可能中途又用另一种语言 来解决程序中的问题,你不得不继续使用你最初选择的语言。 那么,让我们从学术角度讨论一些两种语言间的不同之处。前面提到的AutoLISP是综 合了逻辑结构与传统AutoLISP命令的一个完美工具,你能组合AutoCAD命令并放在一个 有条件的逻辑脚本里,而产生强有力的自定义命令,这些命令能被用于自动操作通常的任务, 也能解决计算问题而得到一个结果。基于命令种类的思想比目标角度的思想更简单,一个清楚直接指出不同点的例子:在一个多义线对象里打断编辑方法。如果你要打断一条多义线,你必须先计算并重新更新这个物体,Extend和Trim命令也一样。这些命令现在还并不包含 在AutoCAD对象系统的实体对象编辑方法中。在不久它们会随时出现,这就是对象的好处。 在许多情况下,对象级的处理比命令方式更高级。当你执行一个命令时,你有可能可以 也有可能不可以直接操作你所选取的对象。因为你必须依赖于AutoCAD的对象选择机制。 对象不是模糊不清的。当你专门指定一个对象时,对你要操作的对象,它是很清楚的。 对象级别的处理在VisualLISP也可实现。使用VisualLISP中的(VL )扩展,你能改变对象的参数且在需要时调用对象的方法。你不得不使用对象引用,它可以从已有的实体名或 直接产生的对象中生成,在大多数情况下,一个有经验的AutoLISP程序员不需要使用这些 对象,但迟早它们会派上用场。/ E! m(门!『C4 R VisualLISP的另一优点是比VBA更接近AutoCAD系统。VBA不是由AutoCAD 产生的,

CAD二次开发源码

有三个CAD二次开发源码均能用: 源码1(lisp)程序: CAD文字提取到电子表格,(说明源码1.把文字提取到1个单元格的而且用n隔开,) 源码2(lisp)程序:提取标注到文本, 源码3(VBA).提取文字到文本 请老师组合成一个lisp程序: 要求把CAD的文字和标注都可以分别换行提取到excel中来或文本文档中 1.源码1(lisp)程序 (defun c:Q2() (setq ffn (getfiled "写出文件" "" "xls" 1)) (princ "n选取文字...") (setq ss (ssget)) (setq ff (open ffn "w")) (setq i 0) (repeat (sslength ss) (setq ssn (ssname ss i)) (setq ssdata (entget ssn)) (setq sstyp (cdr (assoc 0 ssdata))) (if (or (= sstyp "TEXT") (= sstyp "MTEXT")) (progn (setq txt (cdr (assoc 1 ssdata))) (princ txt ff) (princ "n" ff) ) ) (setq i (1+ i)) ? ? ? ) (close ff) (princ (strcat "n写出文件: " ffn)) (prin1)

源码2.提取标注到文本(defun c:txtout() (setq fln (getstring "\n输出文件名:")) (setq fln (strcat fln ".txt")) (setq f (open fln "w")) (setq a (ssget)) (setq n (sslength a)) (setq index 0) (repeat n (setq el (entget (ssname a index))) (setq index (+ index 1)) (setq e (assoc 0 el)) (if (= "DIMENSION" (cdr e)) (progn (setq txt (cdr (assoc 42 el))) (setq txt-1 (rtos txt)) (write-line txt-1 f) ) ) ) (close f) ) 源码3.提取文字到文本Sub mysel() Dim k, i As Integer Dim hjx() As String Dim sset As AcadSelectionSet '定义选择集对象 Dim element As AcadEntity '定义选择集中的元素对象 k = 0 'If Not IsNull(ThisDrawing.SelectionSets.Item("ss1")) Then 'Set sset = ThisDrawing.SelectionSets.Item("ss1") 'sset.Delete ' 如果选择集已存在,则删除 'End If

AutoCAD二次开发初级入门教程

1. Components of the AutoCAD .NET API Dll AcDbMgd.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 DLL In 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. 合适网站终于找到了 https://www.360docs.net/doc/d06823015.html,/ACD/2010/ENU/AutoCAD%https://www.360docs.net/doc/d06823015.html,%20Develo per's%20Guide/index.html .net帮助

相关主题
相关文档
最新文档