AutoCAD二次开发培训_讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 用户调用命令
5. 查找命令对象 6. 调用回调函数
24
.ARX 回调函数
addCommand
© 2008 Autodesk
25
演示
▪ 手动创建ARX程序 ▪ 通过ObjectARX向导创建工程
© 2008 Autodesk
26
新的数据库框架
从 AutoCAD 2000开始
© 2008 Autodesk
© 2008 Autodesk
10
ObjectARX基本知识
© 2008 Autodesk
11
什么是 ObjectARX? AutoCAD 运行扩展(AutoCAD Runtime eXtension)
▪ 一系列面向对象的C++库 ▪ 一个框架 ▪ 一个DLL插件模块 (.ARX)
▪ 不单单是个工具包 ▪ 运行在AutoCAD进程中 ▪ 可访问AutoCAD同一块内存空间 ▪ 系统中包含特定的对象
▪ AcDb 类
▪ AutoCAD 数据库类 ▪表 ▪ 字典 ▪ 实体属性 ▪ AutoCAD图形实体类 ▪ 系统变量 ▪…………
▪ AcGi 类 ▪ 图形接口类
▪ 自定义实体显示协议
▪ AcGe 类
▪ 几何类
© 2008 Autodesk
21
加载 ObjectARX 程序 I
用户加载
▪ ARX & APPLOAD 命令 ▪ Drag & Drop
ObjectARX 入门培训材料--Labs
▪ ObjectARX/arxlabs/ObjectARXLabs.chm
ObjectARX
© 2008 Autodesk
16
ARXDBG ! (ARX Debug)
© 2008 Autodesk
17
.ARX = .DLL + 2 输出函数
acrxEntryPoint acrxGetApiVersion
acad.lib acedapi.lib acui17.lib adui17.lib oleaprot.lib AcTc.lib AcTcUI.lib …
© 2008 Autodesk
Shared
29
用户交互和选择集
© 2008 Autodesk
30
何为用户交互?
▪ 命令等待用户输入所需要的数据或参数 ▪ AutoCAD根据参数返回相应的状态,输出相应的结果
AutoCAD.NET ▪ 编译为IL
快
编译代码
▪ 编译器指令代码-ObjectARX
© 2008 Autodesk
4
AutoCAD API 实现 II
.NET
acdbmgd.dll acmgd.dll
VisualLISP
vl.arx
COM VBA (进程内)
acvba.arx
axdb.dll
ObjectARX API
34
用户交互API acedInitGet
▪ 控制其后的一个acedGetXXX()函数的用户输入 ▪ int acedInitGet (int val, constLeabharlann BaiduACHAR *kwl) ▪ val设定输入数据的范围和方式, 控制位组合只控制紧随其后的一个
acedGetXXX()函数的输入,之后立即失效
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 …
▪ Registry
实时
acrxLoadModule 参见SDK例子PolySamp
© 2008 Autodesk
22
加载 ObjectARX 程序 II
3.
Rxapi.lib
5.
AutoCAD
6. 1.
.ARX
4. 2.
Operating System
1. LoadLibrary 2. _DllMainCRTStartup (C/C++ 运行库的入口函数) 3. CRT_INIT (初始化C/C++运行库和静态全局变量) 4. DllMain (参考MSDN )
▪ 自定义实体 ▪ 反应器 ▪ ...
© 2008 Autodesk
12
ObjectARX能做什么?
编辑和扩展图形数据库 ▪ 创建/编辑/删除对象 ▪ 创建新的对象类型
编辑 AutoCAD 用户接口 ▪ 命令 ▪ 工具条/对话框 ▪ 属性面板 ▪ 设计中心 ▪ 显示系统
监控/修改 AutoCAD 标准行为
.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)
按需加载
▪ 启动
▪ acad.rx 文件 每行列出一个ARX名。AUTOCAD每次启动时都会在搜索路径下查找这个文 件,如果有,则顺序加载列表中的ARX程序
▪ Registry ▪ (arxload) in acad.lsp
▪ 命令调用
▪ Registry:通过注册表
▪ 按请求
▪ 从其他程序
▪ 代理检测
35
用户交互API acedInitGet
▪ Kwl: 选项关键字列表
▪ 每个选项以空格分开 ▪ 只能是字母,数字和下划线 ▪ 可以随意设置简写,但不能矛盾
位 位0 位1 位2 位3 位4 位5 位6 位7 位8 位9 位10
© 2008 Autodesk
位值 1 2 4 8 16 32 64 128 256 512 1024
控制位的设置选项
代码 RSG_NONULL RSG_NOZERO RSG_NONEG RSG_NOLIM
RSG_DASH RSG_2D RSG_OTHER RSG_DDISTFIRST RSG_TRACKUCS RSG_NOORTHOZ
© 2008 Autodesk
15
实用文档
ObjectARX/docs
▪ ObjectARX 帮助文档(arxdoc.chm) ▪ ObjectARX 开发指导 (arxdev.hlp/chm) ▪ 参考手册 (arxref.hlp/chm) ▪ 移植帮助 (arxmigr.hlp) ▪ ObjectARX Readme (readarx.hlp/chm)
▪ 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
在AutoCAD中存储数据
不同API方式的比较
Time in seconds
数据容器存储性能比较
5000 4000 3000 2000 1000
0 Xrecord
Custom Object
© 2008 Autodesk
9
ObjectARX .NET VBA LISP
ObjectARX的优势
效率高 功能强 计算精度高 适用开发复杂的大型程序 调试方便
© 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
19
主要的类 I
▪ AcRx类
▪ 对象运行类识别 ▪ 类协议扩展 ▪ 对象比较 ▪ 对象拷贝
▪ AcEd类
▪ 定义和注册AutoCAD新命令
▪ AcEdCommandStack
▪ AcEditorReactor 等监控相关事件
© 2008 Autodesk
20
主要的类 II
5. acrxGetApiVersion 6. acrxEntryPoint
© 2008 Autodesk
23
命令机制 I
1.
AcEdCommandStack
4.
5. 2,3.
6.
AcEdCommand
AutoCAD
© 2008 Autodesk
1. 添加命令
2. 创建一个命令对象 3. 参数化对象
© 2008 Autodesk
31
何为选择集
图形实体集合
© 2008 Autodesk
32
交互API (一般参数)
▪ 形如acedGetXXX()的全局函数
▪ 获取整数 ▪ 获取实数 ▪ 获取字串 ▪ 获取角度 ▪ 获取距离 ▪ 获取点 ▪ 获取关键字
acedGetInt() acedGetReal() acedGetString() acedGetAngle() acedGetDis() acedGetPoint() acedGetKword()
© 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
33
acedGetXXX常用状态返回值
▪ RTNORM 成功
▪ RTCAN
取消
▪ RTKWORD 输入关键字
▪ RTERROR 其它错误
▪ RTNONE 用户只输入Enter
▪ RTREJ
AutoCAD认为无效的输入
▪ 头文件:adscodes .h
© 2008 Autodesk
ObjectARX 2007
© 2008 Autodesk
1
培训目标
▪ 培训内容主要是
▪ ObjectARX基础知识 ▪ 如何使用 ObjectARX ▪ 如何在以后的实际工作中独立的获取相关资源和帮助
▪ 不是
▪ 如何使用 C++ ▪ 对所有的ObjectARX API做完整的讲述
© 2008 Autodesk
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
说明 不允许空输入 不允许输入0 不允许输入负数 不检查图形边界(即使LIMCHECK为1) 未使用 用虚线表示橡皮筋线或矩形框 不考虑3D点的Z坐标(只用于acedGetDist()函数) 允许任意输入(无论什么用户类型) 使直接距离输入优先于任意输入 对于面域允许UCS追踪 在Z坐标轴上,关闭极轴追踪/对象追踪/正交模式
2
课程安排
▪ 时间
API 概览 ObjectARX基本知识 用户交互和选择集 数据库操作 实体对象操作
扩展数据 反应器 用户界面 多文档环境
自定义对象 几何类
Jig-Drag 测试
© 2008 Autodesk
3
客户端代码形式
慢
解释代码
▪ 代码脚本-AutoLISP
封装代码
▪ 预处理, 半解释代码-编译后的 Visual LISP
AutoCAD
© 2008 Autodesk
5
COM 客户端 (进程外)
COM
AutoCAD API 性能比较
S.0.58 API Performance
Seconds
100.00 90.00 80.00 70.00 60.00 50.00 40.00 30.00 20.00 10.00 0.00
▪ 事件通知
▪ 输入点获取
© 2008 Autodesk
13
开发环境
操作系统和机器配置参见帮助 ( arxdoc.chm) Software Development Environment and System Requirements
AutoCAD 2007
Microsoft Visual Studio 2005® + Service Pack 1
5. 查找命令对象 6. 调用回调函数
24
.ARX 回调函数
addCommand
© 2008 Autodesk
25
演示
▪ 手动创建ARX程序 ▪ 通过ObjectARX向导创建工程
© 2008 Autodesk
26
新的数据库框架
从 AutoCAD 2000开始
© 2008 Autodesk
© 2008 Autodesk
10
ObjectARX基本知识
© 2008 Autodesk
11
什么是 ObjectARX? AutoCAD 运行扩展(AutoCAD Runtime eXtension)
▪ 一系列面向对象的C++库 ▪ 一个框架 ▪ 一个DLL插件模块 (.ARX)
▪ 不单单是个工具包 ▪ 运行在AutoCAD进程中 ▪ 可访问AutoCAD同一块内存空间 ▪ 系统中包含特定的对象
▪ AcDb 类
▪ AutoCAD 数据库类 ▪表 ▪ 字典 ▪ 实体属性 ▪ AutoCAD图形实体类 ▪ 系统变量 ▪…………
▪ AcGi 类 ▪ 图形接口类
▪ 自定义实体显示协议
▪ AcGe 类
▪ 几何类
© 2008 Autodesk
21
加载 ObjectARX 程序 I
用户加载
▪ ARX & APPLOAD 命令 ▪ Drag & Drop
ObjectARX 入门培训材料--Labs
▪ ObjectARX/arxlabs/ObjectARXLabs.chm
ObjectARX
© 2008 Autodesk
16
ARXDBG ! (ARX Debug)
© 2008 Autodesk
17
.ARX = .DLL + 2 输出函数
acrxEntryPoint acrxGetApiVersion
acad.lib acedapi.lib acui17.lib adui17.lib oleaprot.lib AcTc.lib AcTcUI.lib …
© 2008 Autodesk
Shared
29
用户交互和选择集
© 2008 Autodesk
30
何为用户交互?
▪ 命令等待用户输入所需要的数据或参数 ▪ AutoCAD根据参数返回相应的状态,输出相应的结果
AutoCAD.NET ▪ 编译为IL
快
编译代码
▪ 编译器指令代码-ObjectARX
© 2008 Autodesk
4
AutoCAD API 实现 II
.NET
acdbmgd.dll acmgd.dll
VisualLISP
vl.arx
COM VBA (进程内)
acvba.arx
axdb.dll
ObjectARX API
34
用户交互API acedInitGet
▪ 控制其后的一个acedGetXXX()函数的用户输入 ▪ int acedInitGet (int val, constLeabharlann BaiduACHAR *kwl) ▪ val设定输入数据的范围和方式, 控制位组合只控制紧随其后的一个
acedGetXXX()函数的输入,之后立即失效
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 …
▪ Registry
实时
acrxLoadModule 参见SDK例子PolySamp
© 2008 Autodesk
22
加载 ObjectARX 程序 II
3.
Rxapi.lib
5.
AutoCAD
6. 1.
.ARX
4. 2.
Operating System
1. LoadLibrary 2. _DllMainCRTStartup (C/C++ 运行库的入口函数) 3. CRT_INIT (初始化C/C++运行库和静态全局变量) 4. DllMain (参考MSDN )
▪ 自定义实体 ▪ 反应器 ▪ ...
© 2008 Autodesk
12
ObjectARX能做什么?
编辑和扩展图形数据库 ▪ 创建/编辑/删除对象 ▪ 创建新的对象类型
编辑 AutoCAD 用户接口 ▪ 命令 ▪ 工具条/对话框 ▪ 属性面板 ▪ 设计中心 ▪ 显示系统
监控/修改 AutoCAD 标准行为
.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)
按需加载
▪ 启动
▪ acad.rx 文件 每行列出一个ARX名。AUTOCAD每次启动时都会在搜索路径下查找这个文 件,如果有,则顺序加载列表中的ARX程序
▪ Registry ▪ (arxload) in acad.lsp
▪ 命令调用
▪ Registry:通过注册表
▪ 按请求
▪ 从其他程序
▪ 代理检测
35
用户交互API acedInitGet
▪ Kwl: 选项关键字列表
▪ 每个选项以空格分开 ▪ 只能是字母,数字和下划线 ▪ 可以随意设置简写,但不能矛盾
位 位0 位1 位2 位3 位4 位5 位6 位7 位8 位9 位10
© 2008 Autodesk
位值 1 2 4 8 16 32 64 128 256 512 1024
控制位的设置选项
代码 RSG_NONULL RSG_NOZERO RSG_NONEG RSG_NOLIM
RSG_DASH RSG_2D RSG_OTHER RSG_DDISTFIRST RSG_TRACKUCS RSG_NOORTHOZ
© 2008 Autodesk
15
实用文档
ObjectARX/docs
▪ ObjectARX 帮助文档(arxdoc.chm) ▪ ObjectARX 开发指导 (arxdev.hlp/chm) ▪ 参考手册 (arxref.hlp/chm) ▪ 移植帮助 (arxmigr.hlp) ▪ ObjectARX Readme (readarx.hlp/chm)
▪ 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
在AutoCAD中存储数据
不同API方式的比较
Time in seconds
数据容器存储性能比较
5000 4000 3000 2000 1000
0 Xrecord
Custom Object
© 2008 Autodesk
9
ObjectARX .NET VBA LISP
ObjectARX的优势
效率高 功能强 计算精度高 适用开发复杂的大型程序 调试方便
© 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
19
主要的类 I
▪ AcRx类
▪ 对象运行类识别 ▪ 类协议扩展 ▪ 对象比较 ▪ 对象拷贝
▪ AcEd类
▪ 定义和注册AutoCAD新命令
▪ AcEdCommandStack
▪ AcEditorReactor 等监控相关事件
© 2008 Autodesk
20
主要的类 II
5. acrxGetApiVersion 6. acrxEntryPoint
© 2008 Autodesk
23
命令机制 I
1.
AcEdCommandStack
4.
5. 2,3.
6.
AcEdCommand
AutoCAD
© 2008 Autodesk
1. 添加命令
2. 创建一个命令对象 3. 参数化对象
© 2008 Autodesk
31
何为选择集
图形实体集合
© 2008 Autodesk
32
交互API (一般参数)
▪ 形如acedGetXXX()的全局函数
▪ 获取整数 ▪ 获取实数 ▪ 获取字串 ▪ 获取角度 ▪ 获取距离 ▪ 获取点 ▪ 获取关键字
acedGetInt() acedGetReal() acedGetString() acedGetAngle() acedGetDis() acedGetPoint() acedGetKword()
© 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
33
acedGetXXX常用状态返回值
▪ RTNORM 成功
▪ RTCAN
取消
▪ RTKWORD 输入关键字
▪ RTERROR 其它错误
▪ RTNONE 用户只输入Enter
▪ RTREJ
AutoCAD认为无效的输入
▪ 头文件:adscodes .h
© 2008 Autodesk
ObjectARX 2007
© 2008 Autodesk
1
培训目标
▪ 培训内容主要是
▪ ObjectARX基础知识 ▪ 如何使用 ObjectARX ▪ 如何在以后的实际工作中独立的获取相关资源和帮助
▪ 不是
▪ 如何使用 C++ ▪ 对所有的ObjectARX API做完整的讲述
© 2008 Autodesk
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
说明 不允许空输入 不允许输入0 不允许输入负数 不检查图形边界(即使LIMCHECK为1) 未使用 用虚线表示橡皮筋线或矩形框 不考虑3D点的Z坐标(只用于acedGetDist()函数) 允许任意输入(无论什么用户类型) 使直接距离输入优先于任意输入 对于面域允许UCS追踪 在Z坐标轴上,关闭极轴追踪/对象追踪/正交模式
2
课程安排
▪ 时间
API 概览 ObjectARX基本知识 用户交互和选择集 数据库操作 实体对象操作
扩展数据 反应器 用户界面 多文档环境
自定义对象 几何类
Jig-Drag 测试
© 2008 Autodesk
3
客户端代码形式
慢
解释代码
▪ 代码脚本-AutoLISP
封装代码
▪ 预处理, 半解释代码-编译后的 Visual LISP
AutoCAD
© 2008 Autodesk
5
COM 客户端 (进程外)
COM
AutoCAD API 性能比较
S.0.58 API Performance
Seconds
100.00 90.00 80.00 70.00 60.00 50.00 40.00 30.00 20.00 10.00 0.00
▪ 事件通知
▪ 输入点获取
© 2008 Autodesk
13
开发环境
操作系统和机器配置参见帮助 ( arxdoc.chm) Software Development Environment and System Requirements
AutoCAD 2007
Microsoft Visual Studio 2005® + Service Pack 1