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 的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。
AutoCAD软件的二次开发

6. 实体名:为图形对象指定的16进制的数字标识。通过该标识,可找到实体在 图形数据库中的位置,并可进一步对其进行编辑。
例:_$(entlast) 说明:返回最后一个加入图形文件的对象的实体名
第110页/共54页
7. 2 AutoLISP程序设计语言
表的长度:表中的元素个数。
例:(1.0 1.0 0.0) (“this” “that” “the other”) (1 “ONE”) ((a b) c (c d))
长度: 3
3
2
3
长度:(+ 142 3)
(sin (*20.5 pi))
用表可以方便地构造出复杂的数据结构。
5. 选择集:一个或多个图形对象的集合,用户可通过AutoLISP程序向选择集添 加或者从选择集中删除图形对象。
第65页/共54页
7. 1 VisualLISP简介
五、VisualLISP: Autodesk公司为增强AutoLISP程序开发能力而设 计的软件工具。
Visual LISP集成开发环境的组成部分:
语法检查器:可识别错误的AutoLISP结构和内部函数调用中不合适的参数。 文件编译器:可改善程序的执行速度并提供一个有效的开发平台。
Heap:25000 bytes Stack(栈区域):存储函数的变量和局部结构。标准表中嵌套的表越多,函数执行的 递归次数越多,该区域所占的空间越大。
Stack:20000 byets
注意:AutoCAD平台上运行AutoLISP时,用户不能扩展系统的堆或栈空间
2. 内存出错提示信息
堆空间用光:Insufficient node space。 没有足够的内存装载AutoLISP:Insufficient memory-AutoLISP disabled。
第4章 AutoCAD的二次开发

第1节 AutoLisp编程
一、工厂使用AutoLisp开发的优点
二、 AutoLisp的主要的基础 1。表 表是用“()”括起来的一组数,是AutoLisp的基本 语法单元。 2。符号 代表函数名、常量或变量 如(Setq Pt (list 2 6))
3。加载AutoLisp程序 步骤: 打开记事本,书写AutoLisp程序 保存文件,注意文件类型一定要选为所有 文件,保存文件名,文件后缀为.lsp 运行AutoCAD 在命令栏里加载Lisp文件,格式为 (Load”C:/lisp/ibox.lsp”) 执行命令
Autolisp是一种在Auto CAD内使用的语言,
是LISP语言的一个子集。用AutoLisp编辑 的程序可以定义变量,对数据进行处理和 作图,并可自定义函数。 Autolisp是目前研 究和开发的主要工具。它的主要特点是实 现参数化绘图 ADS的编程界面可以使用户用C语言来实现 Auto CAD的用户化,可以编制下拉菜单、 对话框等。
(Command "RECTANG" "f" ir ip (List (+ ix iw)(+ iy ih)))
(PrinC ”\n”) )
2。三角形 (Defun c:TRIANG() (Setq p1 (Getpoint "\nEnter first point of triangles:")) (Setq p2 (Getpoint "\nEnter second point of triangles:")) (Setq p3 (Getpoint "\nEnter third point of triangles:")) (Command "LINE" P1 P2 P3 "C") )
AutoCAD高级绘图员培训——二次开发基础

图 2-3
“user.lin”文件
5
AutoCAD 高级绘图员培训——二次开发基础
2012 年 5 月
*Arrow,Arrow -->-->--> A,.25,-.05,[">",STANDARD,S=.1,R=0.0,X=-.1,Y=-.05],-.1 (3) 进入 AutoCAD, 载入线型文件 “user.lin” , 即可使用该文件中定义的 “INTERVAL” 和“ARROW”线型,图 2-4 显示了使用这两种线型的例子。
3
AutoCAD 高级绘图员培训——二次开发基础
2012 年 5 月
2.2.2 简单线型的定义
简单线型是由短划线(Dash) 、点(Dot)和空格(Space)组合而成。在简单线型的规 格说明中,正数表示其值为长度的短划线,负数表示其绝对值为长度的空格,0 表示点。例 如在 BORDER 的规格说明“A,.5,-.25,.5,-.25,0,-.25”中,.5 表示 0.5 个单位长的短 划线,-.25 表示 0.25 个单位长的空格,0 表示一个点。
图 2-4
两种自定义线型
说明 使用“-linetype”命令,如果该线型己在库文件中存在,则系统会提示用户该线 型已经在库文件中定义, 并询问用户是否重新定义。 用户可对其重新定义来实现对已有线型 的修改。
2.3 2.3.1
填 充 图 案 简介
使用“bhatch”命令绘制填充图案,同线型一样,AutoCAD 中的填充图案也是以图案文 件(也称为图案库)的形式保存的,其类型是以“.pat”为扩展名的 ASCII 文件。可以在 AutoCAD 中加载已有的图案文件,并从中选择所需的填充图案;也可以修改图案文件或创 建一个新的图案文件。 同线型文件一样,在 AutoCAD 版本中也提供了两个图案文件,即 AutoCAD 主文件夹 的“SUPPORT”子文件夹中的“acad.pat”和“acadiso.pat” ,这两个文件分别包含有 69 种 填充图案(包括 8 种 ANSI 图案,14 种 ISO 图案和 47 种其它预定义图案) 。以“acad.pat” 文件为例来介绍填充图案的定义和定制。
5AutoCAD高级培训第五讲——AutoCAD二次开发基础

AutoCAD高级培训第五讲——AutoCAD二次开发基础(AutoLISP 语言编程概述)二次开发:采用编程的方法扩充AutoCAD的功能,如增加新的绘图命令、新的修改命令等。
例如,AutoCAD中本来没有绘制正弦曲线(函数形式为Y=Asin(X+ω))命令,通过编程开发一个AutoCAD的新命令,使用户可以使用该命令实现绘制正弦曲线,在命令的交互过程中,系统提示用户依次输入所需要的参数:坐标原点、振幅、周期数、初相角等。
常用二次开发工具:AutoLISP语言(运行于VisualLISP集成开发环境)、ActiveX、VBA、JAVA、C、ObjectARX等需要掌握:AutoLISP语言(高级证书所必需)一、AutoLISP 语言简介1.LISP——List Processing Language2.AutoLISP:嵌套于AutoCAD内部,将LISP与AutoCAD有机结合,是AutoCAD开发的重要工具。
3.AutoLISP的功能:♦可直接调用AutoCAD的几乎全部命令♦具备一般高级语言的结构和功能:顺序、条件分支、循环等结构;I/O、数值计算、逻辑判断、数据类型转换等功能♦具备一般高级语言所没有的强大的图形处理功能4.AutoLISP的特点♦仅能以解释方式运行于AutoCAD内部(解释性程序设计语言)♦程序的全部内容均以函数形式给出,没有语句的概念,也没有其他语法结构,执行程序就是执行一系列的函数调用,也称“函数语言”♦把数据和程序统一表达为表结构,程序即数据,数据即程序,故也称为“表语言”♦运行程序就是对函数求值的过程,在此过程中实现函数的功能例如,下面的内容就是一个完整的AutoLISP程序:(defun math()(setq x 10)(setq y 20)(+ x y)(* x y))该程序运行的结果是:200二、AutoLISP的数据类型♦整型数♦实型数♦符号(SYM)♦字符串(STR)♦表(LIST)♦文件描述符(FILE)♦AutoLISP的内部函数(SUBR)♦AutoCAD的选择集(PICKSET)♦AutoCAD的实体名(ENAME)♦函数分页表(PAGETB)基本应用:涉及用蓝色显示的6种,前4种称为“原子”。
第三章 AutoCAD二次开发

第三章 创建和编辑二维图形对象 一、VBA
Hale Waihona Puke 3.1 直线 Public Sub MacroDemo() Dim doc As AcadDocument Set doc = ThisDrawing.Application.Documents.Add() MsgBox "Hello,Welcome to Autocad VBA" Set doc = ThisDrawing.Application.Documents.Add() Dim ptstart(0 To 2) As Double Dim ptend(0 To 2) As Double ptstart(0) = 1: ptstart(1) = 1: ptstart(2) = 0 ptend(0) = 100: ptend(1) = 100: ptend(2) = 0 ThisDrawing.ModelSpace.AddLine ptstart, ptend End Sub
数据库程序
• Private Sub CommandButton1_Click() • Dim cn As ADODB.Connection • Dim Constr As String • Set cn = New ADODB.Connection • • cn.CursorLocation = adUseClient • cn.Provider = "Microdoft.Jet.OLEDB.4.0;" • Constr = "Data source=c:\db1.mdb" • • cn.Open • End Sub
3.2 圆 Dim ptCen(0 To 2) As Double ptCen(0) = 50: ptCen(1) = 50: ptCen(2) = 0 Set acaddoc = acadapp.ActiveDocument.ModelSpace.Ad dCircle(ptCen, 32)
AutoCAD二次开发_官方PPT文档

梁晓冬
培训目标
AutoCAD
培训内容主要是
Raptor
ObjectARX基础知识 如何使用 ObjectARX 如何在以后的实际工作中独立的获取相关资源和帮助
不是
如何使用 C++ 对所有的ObjectARX API做完整的讲述
© 2008 Autodesk
4
Autodesk 系列产品开发培训教程
如何得到ObjectARX
AutoCAD
Raptor
SDK(
Software Development Kits)
免费下载
Autodesk 网站
/objectarx
ADN 网站,检索ObjectARX
13
AutoCAD 的API和IDE
AutoCAD
API
ObjectARX
COM
Raptor
Automation (VB, Java, Delphi, etc.)
AutoLISP
.NET
托管 API
IDE
Visual
Visual
LISP
Basic, Applications Edition (VBA)
16
AutoCAD API 性能比较
S.0.58 API Performance
100.00 90.00 80.00 70.00
Seconds
60.00 50.00 40.00 30.00 20.00 10.00 0.00
Total Create 1000 2dPolylines Add XData to 1000 Entities Update 1000 Circles Create 1000 lines
二次开发培训大纲

AUTOCAD二次开发培训大纲一、熟悉Visual C++编程。
(该项不进行培训)。
二、简单学习AutoCAD环境、绘图。
如熟悉AutoCAD可跳过此环节。
三、学习AutoLispAutoLisp 表达式AutoLisp 数据类型AutoLisp 词法结构及函数规则AutoLisp 程序文件AutoLisp 变量AutoLisp 字符串处理AutoLisp 表处理AutoLisp 函数处理AutoLisp 出错处理AutoLisp 选择集处理AutoLisp 实体处理四、学习ObjectArxObjectArx基础知识1. ObjectArx定义的数据类型2. 结果缓冲区和结果类型码3. ObjectArx公共函数(全局函数)的返回值4. ObjectArx定义的其它代码(一些宏定义)5. 定义外部函数,acedDefun、addCommand6. 调用AutoCAD命令7. 如何调用外部函数(命令) acedInvoke acedCommond()8. 向外部函数传递参数9. 链表的使用与管理10. 在程序中加载其它应用程序11. 程序运行出错时的处理使用AutoCAD资源1. 全局函数2. 使用AutoCAD系统变量3. 查询或改变AutoLisp变量的值4. 查找文件5. 使用对象捕捉6. 使用图形几何信息7. 确定文本外框尺寸8. 数据类型转换与单位转换9. 使用字符管理函数10. 坐标系变换11. 使用通配符对实体、选择集和符号表的操作。
(用全局函数)1. 实体名称与实体表示2. 获取实体的定义数据3. 修改实体4. 创建实体5. 扩展数据的处理6. 构造选择集的方法7. 使用过滤器构造选择集8. 操作选择集如何创建一个ARX应用程序1. AutoCAD接口函数介绍2. 注册AutoCAD新命令数据库和数据库对象1. 数据库初始化2. 创建和组织数据库3. 保存数据库4. 插入一个数据库5. 设置当前数据库值6. 打开和关闭数据库对象实体对象1. 实体简介2. 实体的共同属性3. 实体的共同函数4. 简单复杂实体容器对象1. 符号表2. 字典3. 扩展记录从AcDbObject 派生新类《高级》从AcDbEntity 派生新类《高级》反应器《高级》使用AcGi 库《高级》使用AcGe库1. AcGe层简介2. 基本几何类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cre
Cre
Upd
AutoCAD's APIs
Add
Cre
Tota
6
在AutoCAD中存储数据
不同API方式的比较
Time in seconds
数据容器存储性能比较
400 350 300 250 200 150 100
50 0 Xrecord Custom Object
Xdata
ObjectARX .NET LISP
ObjectARX 入门培训材料--Labs
▪ ObjectARX/arxlabs/ObjectARXLabs.chm
ObjectARX
© 2008 Autodesk
16
ARXDBG ! (ARX Debug)
© 2008 Autodesk
17
.ARX = .DLL + 2 输出函数
acrxEntryPoint acrxGetApiVersion
按需加载
▪ 启动
▪ acad.rx 文件 每行列出一个ARX名。AUTOCAD每次启动时都会在搜索路径下查找这个文 件,如果有,则顺序加载列表中的ARX程序
▪ Registry ▪ (arxload) in acad.lsp
▪ 命令调用
▪ Registry:通过注册表
▪ 按请求
▪ 从其他程序
▪ 代理检测
34
用户交互API acedInitGet
▪ 控制其后的一个acedGetXXX()函数的用户输入 ▪ int acedInitGet (int val, const ACHAR *kwl) ▪ val设定输入数据的范围和方式, 控制位组合只控制紧随其后的一个
acedGetXXX()函数的输入,之后立即失效
.A.RDXLL
ObjectARXAPAI PIs
Au.tEoXCEAD
.A.RDXLL
© 2008 Autodesk
18
主要的库 - I
AcRx 对象和类管理库 (rxapi.lib) AcEd AutoCAD 编辑器工具库 (acedapi.lib) AcDb AutoCAD 数据库对象库 (acdb18.lib) AcGi AutoCAD 图形接口库 (acgiapi.lib) AcGe AutoCAD 几何库 (acge18.lib)
© 2008 Autodesk
33
acedGetXXX常用状态返回值
▪ RTNORM 成功
▪ RTCAN
取消
▪ RTKWORD 输入关键字
▪ RTERROR 其它错误
▪ RTNONE 用户只输入Enter
▪ RTREJ
AutoCAD认为无效的输入
▪ 头文件:adscodes .h
© 2008 Autodesk
2
课程安排
▪ 时间
API 概览 ObjectARX基本知识 用户交互和选择集 数据库操作 实体对象操作
扩展数据 反应器 用户界面 多文档环境
自定义对象 几何类
Jig-Drag 测试
© 2008 Autodesk
3
客户端代码形式
慢
解释代码
▪ 代码脚本-AutoLISP
封装代码
▪ 预处理, 半解释代码-编译后的 Visual LISP
▪ 编译为IL
快
编译代码
▪ 编译器指令代码-ObjectARX
© 2008 Autodesk
4
AutoCAD API 实现 II
.NET
acdbmgd.dll acmgd.dll
VisualLISP
vl.arx
COM VBA (进程内)
acvba.arx
axdb.dll
ObjectARX API
▪ VS 2005 SP1 – only for AutoCAD 2007 ▪ VS 2005 RTM – for AutoCAD 2007
ObjectARX 工具包
© 2008 Autodesk
14
SDK Sample
ObjectARX\Samples目录下(按照功能类别组织 )
▪ COM ▪ EDITOR ▪ DATABASE ▪ ENTITY ▪ GRAPHICS ▪ MISC ▪ 两个很好的例子:PolySamp 和 ArxDbg
© 2008 Autodesk
7
在AutoCAD中存储数据
不同API方式的比较
Time in seconds
数据容器存储性能比较
140000 120000 100000
80000 60000 40000 20000
0
Xrecord
Xdata
© 2008 Autodesk
8
ObjectARX .NET LISP VBA VB
▪ 事件通知
▪ 输入点获取
© 2008 Autodesk
13
开发环境
操作系统和机器配置参见帮助 ( arxdoc.chm) Software Development Environment and System Requirements
AutoCAD 2007
Microsoft Visual Studio 2005® + Service Pack 1
© 2008 Autodesk
COM (VB) COM (VBA)
LISP ObjectARX
Total Create 1000 2dPolylines Add XData to 1000 Entities Update 1000 Circles Create 1000 lines
Create 1000 Circles
© 2008 Autodesk
19
主要的类 I
▪ AcRx类
▪ 对象运行类识别 ▪ 类协议扩展 ▪ 对象比较 ▪ 对象拷贝
▪ AcEd类
▪ 定义和注册AutoCAD新命令
▪ AcEdCommandStack
▪ AcEditorReactor 等监控相关事件
© 2008 Autodesk
20
主要的类 II
27
识别自定义对象
© 2008 Autodesk
28
ObjectARX & ObjectDBX
ObjectDBX
ObjectARX SDK
rcexelib.obj
acdb17.lib acge17.lib acgiapi.lib axdb.lib achapi17.lib rxapi.lib acismobj17.lib rxheap.lib …
▪ 自定义实体 ▪ 反应器 ▪ ...
© 2008 Autodesk
12
ObjectARX能做什么?
编辑和扩展图形数据库 ▪ 创建/编辑/删除对象 ▪ 创建新的对象类型
编辑 AutoCAD 用户接口 ▪ 命令 ▪ 工具条/对话框 ▪ 属性面板 ▪ 设计中心 ▪ 显示系统
监控/修改 AutoCAD 标准行为
4. 用户调用命令
5. 查找命令对象 6. 调用回调函数
24
.ARX 回调函数
addCommand
© 2008 Autodesk
25
演示
▪ 手动创建ARX程序 ▪ 通过ObjectARX向导创建工程
© 2008 Autodesk
26
新的数据库框架
从 AutoCAD 2000开始
© 2008 Autodesk
35
用户交互API acedInitGet
▪ Kwl: 选项关键字列表
▪ 每个选项以空格分开 ▪ 只能是字母,数字和下划线 ▪ 可以随意设置简写,但不能矛盾
在AutoCAD中存储数据
不同API方式的比较
Time in seconds
数据容器存储性能比较
5000 4000 3000 2000 1000
0 Xrecord
Custom Object
© 2008 Autodesk
9
ObjectARX .NET VBA LISP
ObjectARX的优势
效率高 功能强 计算精度高 适用开发复杂的大型程序 调试方便
ObjectARX 2007
© 2008 Autodesk
1
培训目标
▪ 培训内容主要是
▪ ObjectARX基础知识 ▪ 如何使用 ObjectARX ▪ 如何在以后的实际工作中独立的获取相关资源和帮助
▪ 不是
▪ 如何使用 C++ ▪ 对所有的ObjectARX API做完整的讲述
© 2008 Autodesk
5. acrxGetApiVersion 6. acrxEntryPoint
© 2008 Autodesk
23
命令机制 I
1.
AcEdCommandStack
4.
5. 2,3.
6.
AcEdCommand
AutoCAD
© 2008 Autodesk
1. 添加命令
2. 创建一个命令对象 3. 参数化对象
© 2008 Autodesk
10
ObjectARX基本知识
© 2008 Autodesk
11
什么是 ObjectARX? AutoCAD 运行扩展(AutoCAD Runtime eXtension)
▪ 一系列面向对象的C++库 ▪ 一个框架 ▪ 一个DLL插件模块 (.ARX)
▪ 不单单是个工具包 ▪ 运行在AutoCAD进程中 ▪ 可访问AutoCAD同一块内存空间 ▪ 系统中包含特定的对象
▪ Registry
实时
acrxLoadModule 参见SDK例子PolySamp