第1章 概要 1
1.1 ObjectARX编程环境 1
1.1.1 访问AutoCAD数据库 1
1.1.2 与AutoCAD编辑器交互作用 1
1.1.3 使用MFC创建用户界面 2
1.1.4 支持多文档界面(MDI) 2
1.1.5 创建自定义类 2
1.1.6 建立复杂的应用程序 2
1.1.7 与其它编程环境交互作用 2
1.2 ObjectARX类库 2
1.2.1 AcRx库 3
1.2.2 AcEd库 4
1.2.3 AcDb库 4
1.2.4 AcGi库 5
1.2.5 AcGe库 5
1.3 初步知识 7
1.3.1 系统要求 7
1.3.2 安装ObjectARX 7
第2章 数据库入门 8
2.1 AutoCAD数据库概述 8
2.1.2 Obtaining Object Ids 9
2.2 基本的数据库对象 9
2.1.1 多个数据库 9
2.3 在AutoCAD中创建对象 10
2.4 创建ObjectARX对象 12
2.4.1 创建实体 12
2.4.2 创建一个新层 13
2.4.3 打开与关闭ObjectARX对象 13
2.4.4 向组字典添加一个组 14
第3章 ObjectARX应用程序基础 16
3.1 创建一个ObjectARX应用程序 16
3.1.1 创建自定义类 16
3.1.2 响应AutoCAD消息 16
3.1.4 为AutoCAD执行一个入口点 20
3.1.3 ObjectARX应用程序的事件顺序 20
3.1.5 初始化一个ObjectARX应用程序 21
3.1.6 准备卸载 22
3.2 实例应用程序 22
3.3 注册新命令 23
3.3.1 命令堆栈 23
3.3.2 查找顺序 25
3.3.3 全局与本地化命令名比较 25
3.3.4 透明命令和模态命令 25
3.4 装载一个ObjectARX应用程序 25
3.5 卸载一个ObjectARX应用程序 26
3.4.1 库搜索路径 26
3.4.2 列出已装载的ObjectARX应用程序 26
3.6 请求装载 27
3.6.1 AutoCAD、Windows系统注册和ObjectARX应用程序 27
3.6.2 ARX应用程序安装时的注册修正 28
3.6.3 DEMANDLOAD系统变量 30
3.6.4 关于客户对象检测的请求装载 30
3.6.5 关于命令的请求装载 31
3.6.6 关于AutoCAD启动的请求装载 32
3.6.7 使用系统注册管理应用程序 32
3.7 ARX命令 33
3.8 从AutoLISP运行ObjectARX应用程序 34
3.9 错误处理 34
第4章 数据库操作 39
4.1 初始化数据库 39
4.2 创建和删除一个数据库 39
4.3 保存一个数据库 40
4.3.1 设定默认文件格式 40
4.3.2 全局保存函数 41
4.4 wblock操作 41
4.4.2 使用实体生成一个新数据库 42
4.5 插入一个数据库 42
4.4.1 从一个存在的数据库生成一个新的数据库 42
4.6 设定当前数据库的值 43
4.6.1 数据库颜色值 43
4.6.2 数据库线型值 43
4.6.3 数据库线型比例值 43
4.6.4 数据库层值 44
4.7 数据库操作实例 44
4.8 长事务处理 46
4.8.1 类和函数概要 46
4.8.2 长事务处理实例 48
4.9 外部引用 51
4.9.1 外部引用的前后处理 52
4.9.2 锁住文件及一致性检查 53
4.10 索引和过滤器 53
4.11 图形摘要信息 54
4.12 最近被Autodesk软件所保存 55
第5章 数据库对象 56
5.1 打开和关闭数据库对象 56
5.2 删除对象 58
5.3 对象的数据库所有权 59
5.4 添加特定对象的数据 59
5.4.1 扩展数据 59
5.4.2 扩展字典 62
5.5 擦除对象 68
5.6 对象归档 69
第6章 实体对象 70
6.1 实体的基本知识 70
6.1.1 实体说明 70
6.1.2 实体所有关系 71
6.1.3 AutoCAD R12实体 71
6.2 实体的公共特性 72
6.2.1 实体颜色 72
6.2.2 线型 73
6.2.3 实体线型比例 73
6.2.5 实体图层 74
6.2.4 实体的可见性 74
6.3 实体公共函数 75
6.3.1 对象捕捉点 75
6.3.2 几何变换函数 76
6.3.3 交点 77
6.3.4 GS标记和子实体 78
6.3.5 实体炸开 94
6.4 创建AutoCAD实体实例 95
6.4.1 创建一个简单实体 95
6.4.2 创建一个简单的块表记录 96
6.4.3 创建一个具有属性定义的块表记录 97
6.4.4 创建一个具有属性的块引用 99
6.4.5 浏览一个块表记录 103
6.5 创建AutoCAD实体实例 105
6.5.1 创建一个复杂实体 105
6.5.2 浏览一条多义线的顶点 106
6.6 坐标系统访问 107
6.6.1 实体坐标系统 107
6.6.2 AcDb2dPolylineVertex类 108
6.7 曲线函数 108
6.8 与实体实现超链接 109
6.8.1 AcDbHyperlink类 109
6.8.4 超链接实例 110
6.8.2 AcDbHyperlinkCollection类 110
6.8.3 AcDbEntityHyperlinkPE类 110
第7章 容器对象 113
7.1 符号表和字典的比较 113
7.2 符号表 115
7.2.1 块表 116
7.2.2 层表 116
7.2.3 迭代器 119
7.3 字典 120
7.3.1 组和组字典 120
7.3.3 布局字典 123
7.3.2 复合线样式字典 123
7.3.4 创建字典 124
7.3.5 列举字典条目 125
7.4 布局 126
7.5 扩展记录 127
7.5.1 扩展记录的DXF组码 128
7.5.2 示例 128
第8章 全局函数 131
8.1 ObjectARX中定义的变量、类型和值 131
8.1.1 一般类型及定义 131
8.1.2 有用的值 132
8.1.3 ObjectARX函数返回码 136
8.1.4 用户输入控制码 137
8.2 普通特征的ObjectARX库函数 137
8.2.1 ObjectARX全局函数调用与AutoLISP调用比较 137
8.2.2 函数返回值 138
8.2.3 外部函数 139
8.2.4 出错处理 140
8.2.5 应用程序间通讯 140
8.2.6 外部应用程序处理 144
8.3 表与其它动态分配的数据 145
8.4 结果缓冲区内存管理 147
8.4.1 链表的建立和删除 148
8.4.2 AutoLISP表 149
8.4.3 带DXF码的实体链表 151
8.4.4 命令和函数调用表 151
8.5 命令和查询函数 152
8.5.1 acedCommand()和acedCmd()函数 152
8.5.2 系统变量函数 154
8.5.3 AutoLISP符号函数 155
8.5.4 文件搜索函数 156
8.5.5 对象捕捉函数 157
8.5.6 视口描述符函数 157
8.5.7 几何功能函数 158
8.5.8 文本框功能函数 159
8.6 获取用户输入函数 161
8.6.1 用户输入函数 161
8.6.2 控制用户输入函数条件 162
8.6.3 选择集图形拖动函数 164
8.6.4 用户中断 164
8.6.5 返回值给AutoLISP函数 165
8.7 变换函数 166
8.7.1 字符串转换函数 166
8.7.2 单位转换函数 167
8.8 坐标系变换 168
8.7.3 字符类型处理函数 168
8.9 显示控制函数 169
8.9.1 交互输出Interactive Output 169
8.9.2 图形和文本屏幕控制 170
8.9.3 低层图形和用户输入控制 170
8.10 字符匹配 171
第9章 选择集、实体和符号表函数 172
9.1 选择集名和实体名 172
9.2 选择集的操作 172
9.2.1 选择集的过滤器列表 175
9.2.2 选择集操作 180
9.2.3 选择集变换 182
9.3 实体名和实体数据函数 185
9.3.1 实体名函数 185
9.3.2 实体数据函数 193
9.3.3 实体数据函数和图形屏幕 202
9.3.4 扩展数据的标记 203
9.4 访问符号表 209
第10章 派生自定义类 212
10.1 派生自定义类 212
10.2 运行时类识别 213
10.3 类声明宏 214
10.4 类执行宏 215
10.5 类初始化函数 216
11.1 对象的引用 217
第11章 派生AcDbObject类 217
11.2 所有关系引用 218
11.2.1 所有关系的使用 219
11.2.2 所有关系类型 219
11.2.3 建立所有关系体系 219
11.3 指针引用 229
11.3.1 紧密关联指针 229
11.3.2 松散关联指针 229
11.4 自定义类的长期处理问题 230
11.6.1 自动撤销操作 232
11.5 删除对象 232
11.6 撤消和重复操作 232
11.6.2 部分撤销操作 233
11.6.3 重复操作 235
11.7 subErase,subOpen,subClose和subCancel函数 235
11.8 编程实例 248
11.8.1 头文件 248
11.8.2 源文件 249
11.9 对象版本支持 255
11.9.1 类版本 255
11.9.3 类数据或扩展数据的版本号 258
11.9.2 类的重命名 258
第12章 派生AcDbEntity类 260
12.1 派生自定义实体 260
12.1.1 必须重载的AcDbEntity函数 260
12.1.2 通常需要重载的AcDbEntity函数 260
12.1.3 很少重载的AcDbEntity函数 262
12.2 重载实体的公共函数 262
12.2.1 重载worldDraw()和viewportDraw()函数 262
12.2.2 重载saveAs()函数 263
12.2.3 执行对象捕捉点函数 264
12.2.4 执行夹点函数 266
12.2.5 拉伸点函数 269
12.2.6 变换函数 270
12.2.7 与其它实体相交 271
12.2.8 与其它自定义实体相交 277
12.2.9 分解实体 277
12.3 扩展实体功能 278
12.4 使用AcEdJig类 278
12.4.1 由AcEdJig派生新类 278
12.4.2 使用AcEdJig类的一般步骤 278
12.4.3 设置拖动关联提示 279
12.4.4 拖动循环 279
12.4.5 sampler()、update()和entity()函数的实现 280
12.4.6 添加实体到数据库 282
12.4.7 实例 282
第13章 代理对象 289
13.1 定义代理对象 289
13.2 代理对象生命周期 289
13.3 处理代理对象 290
13.4 显示代理实体 290
13.5 编辑代理实体 290
13.6 卸载应用程序 291
14.1.1 响应类 292
14.1 通知概述 292
第14章 通知处理 292
14.1.2 响应对象类型 293
14.2 使用响应 293
14.2.1 AcDbObject和数据库通知事件 294
14.2.2 自定义通知 294
14.2.3 使用编辑响应 295
14.2.4 使用数据库响应 295
14.2.5 使用对象响应 299
14.3 通知使用原则 310
15.2 事务管理器 312
15.1 事务管理概述 312
第15章 事务管理 312
15.3 事务嵌套 313
15.4 事务边界 313
15.5 在事务中获取对象指针 314
15.6 事务与新建对象 314
15.7 提交时间原则 315
15.8 事务与取消 315
15.9 事务模型与打开和关闭机制的混合使用 315
15.10 事务与图形生成 315
15.12 事务管理实例 316
15.11 事务响应 316
第16章 协议扩展 333
16.1 定义协议扩展 333
16.2 实现协议扩展 333
16.2.1 声明并定义协议扩展类 333
16.2.2 注册协议扩展类 334
16.2.3 协议扩展缺省类 335
16.2.4 卸载应用程序 335
16.2.5 使用协议扩展函数 335
16.3 MATCH命令的协议扩展 336
16.4 协议扩展实例 336
17.1.1 创建并注册一个自定义对象捕捉模式 342
第17章 输入点处理 342
17.1 自定义对象捕捉模式 342
17.1.2 创建协议扩展类 343
17.1.3 创建自定义符号 344
17.1.4 实例 344
17.2 输入点管理 353
17.2.1 输入点管理器 353
17.2.2 输入上下文事件 354
17.2.3 输入点过滤器和监控器 360
18.2 在ObjectARX应用程序中使用动态链接MFC库 374
18.2.1 VC++工程中动态链接MFC库的设置 374
18.1 在ObjectARX应用程序中使用MFC 374
第18章 使用MFC类库 374
18.2.2 调试应用程序 375
18.2.3 资源管理 375
18.3 建立MFC用户界面支持 376
18.3.1 类层次结构 377
18.3.2 AdUi消息 377
18.3.3 AdUi提示窗口 377
18.3.4 AdUi对话框类 378
18.3.6 可扩充标签类 379
18.3.7 AdUi和AcUi编辑控件 379
18.3.5 AcUi Dialog类 379
18.3.8 AdUi和AcUi组合框控件 380
18.3.9 AcUi MRU组合框 381
18.3.10 AdUi按钮类 381
18.3.11 AcUi按钮类 381
18.3.12 对话框数据驻留 382
18.3.13 使用并扩充AdUi标签对话框系统 382
18.3.14 创建可扩充的自定义标签对话框 382
18.3.15 扩充AutoCAD内部标签对话框 383
18.4.1 创建ObjectARX MFC应用程序框架 385
18.4 在VC++AppWizard中使用AdUi和AcUi 385
18.4.2 使用App Studio创建MFC对话框 387
18.4.3 创建类和控件 387
18.4.4 创建对话框处理 388
18.4.5 为处理函数增加代码 389
第19章 多文档界面 398
19.1 简介 398
19.1.1 文档执行上下文 398
19.1.2 数据实例 398
19.1.3 文档锁定 398
19.1.4 文档处理类 399
19.2 术语 399
19.3 SDI系统变量 401
19.4.1 SDI-Only级别 402
19.4.2 MDI-Aware级别 402
19.4 兼容级别 402
19.4.3 MDI-Capable级别 404
19.4.4 MDI-Enhanced级别 405
19.5 与多文档交互作用 405
19.5.1 访问当前文档及其相关对象 405
19.5.2 访问与非重入文档关联的数据库 405
19.5.3 设置未激活的当前文档 406
19.6 文档事件通知 406
19.7 应用程序特殊文档对象 406
19.8.2 非重入的AutoCAD命令 407
19.8 非重入命令 407
19.8.1 生成非重入命令 407
19.9 多文档命令 408
19.10 关闭文档切换 409
19.11 应用程序执行上下文 409
19.11.1 应用程序执行上下文中的代码调用 409
19.11.2 代码区别 410
19.11.3 其它应用程序执行上下文 410
19.12 数据库的Undo和事务管理功能 411
19.13 独立的文档数据库 411
19.14 一个MDI-Aware型例程 412