第一章 最简单的ARX程序——HelloARX 1
1.1目标及结果 1
1.2知识要点及思路分析 1
1.2.1建立ARX程序的基本步骤 1
1.2.2AutoCAD与ARX程序之间的消息传递 2
1.3实现步骤 3
1.4源程序清单 7
1.4.1清单1-1源文件HelloARX.cpp 7
1.4.2清单1-2 HelloARX.def源定义文件 9
1.5补充说明 9
1.5.1ARX应用程序的加载方式 9
1.5.2 ARX应用程序的卸载方式 9
1.6小结 9
第二章AutoCAD数据库概述 11
2.1目标及结果 11
2.2知识要点及思路分析 12
2.2.1 AutoCAD数据库的结构 12
2.2.2对象的ID 13
2.2.3基本数据库对象 14
2.2.4创建对象 14
2.3实现步骤 16
2.3.1创建实体 16
2.3.2创建新层 18
2.3.3打开和关闭ObjectARX对象 19
2.3.4创建新组 20
2.4源程序清单 22
2.4.1清单2-1源文件Entities.cpp 22
2.4.2清单2-2模块定义文件Entities.def 26
2.5补充说明 26
2.5.1清单2-3 加入了容错处理代码的源文件ErrorText.cpp 26
2.5.2清单2-4 模块定义文件ErrorTestdef 31
2.5.3说明 32
2.6小结 32
第三章AutoCAD数据库操作 33
3.1目标及结果 33
3.2知识要点及思路分析 35
3.2.1初始化数据库 35
3.2.2创建数据库 35
3.2.3保存数据库 36
3.2.4创建块操作 37
3.2.5插入块操作 38
3.2.6设置当前数据库属性值 38
3.2.7数据库长事务(LongTransaction)操作 39
3.3实现步骤 40
3.3.1创建数据库 41
3.3.2读取数据库内容 42
3.3.3数据库长事务操作 43
3.4源程序清单 46
3.4.1清单3-1 源文件OperateDb.cpp 46
3.4.2清单3-2 模块定义文件OperateDb.def 51
3.5补充说明 51
3.5.1外部参照 51
3.5.2图形统计信息 52
3.6小结 54
第四章 数据库对象的操作 55
4.1目标及结果 55
4.2知识要点及思路分析 56
4.2.1打开和关闭对象 56
4.2.2删除对象 59
4.2.3数据库对象的从属关系 59
4.2.4对象的特殊附加数据 59
4.2.5删除数据库对象 62
4.3实现步骤 63
4.3.1对象的选择 64
4.3.2结果缓冲区链表内容打印 65
4.3.3对象扩展数据的添加和打印 68
4.3.4对象扩展词典的添加和打印 69
4.4源程序清单 71
4.4.1清单4-1源文件operateObj.cpp 71
4.4.2清单4-2模块定义文件operateObj.def 79
4.5补充说明 79
4.5.1DXF(Drawing Exchange Format)组码模式 79
4.5.2对象归档操作 80
4.6小结 81
第五章 实体对象的操作 82
5.1目标及结果 82
5.2知识要点及思路分析 83
5.2.1实体的定义 83
5.2.2实体的从属关系 83
5.2.3AutoCAD R12版实体 84
5.2.4实体的公用属性 85
5.2.5坐标系统 87
5.2.6曲线函数 89
5.3实现步骤 90
5.3.1创建一个带有属性的块表记录 90
5.3.2创建一个带有属性的块引用 91
5.3.3遍历块表记录 93
5.3.4复杂实体的操作 93
5.3.5曲线函数的使用 94
5.4源程序清单 94
5.4.1清单5-1源文件complexEnt.cpp 94
5.4.2清单5-2模块定义文件complexEnt.def 105
5.5补充说明 105
5.5.1实体名操作函数 106
5.5.2用户输入函数 106
5.5.3系统变量查询和设置函数 108
5.6小结 108
第六章 高亮度显示实体对象 109
6.1目标及结果 109
6.2知识要点及思路分析 110
6.2.1实体的公共函数 110
6.2.2实体分解函数 114
6.2.3GS标志和子实体路径 115
6.2.4高亮度显示子实体的步骤 116
6.3实现步骤 118
6.3.1高亮度显示长方体的子实体 119
6.3.2高亮度显示嵌套块中的实体 119
6.4源程序清单 120
6.4.1清单6-1源文件entHilight.cpp 120
6.4.2清单6-2模块定义文件entHilight.def 130
6.5补充说明 130
6.5.1选择集的操作函数 130
6.6小结 136
第七章 容器对象的操作 137
7.1目标及结果 137
7.2知识要点及思路分析 137
7.2.1符号表 138
7.2.2符号表迭代器 141
7.2.3词典 141
7.2.4符号表与词典的区别 143
7.2.5扩展实体记录(Xrecord) 144
7.3实现步骤 145
7.3.1添加一个层表记录 146
7.3.2遍历层表 146
7.3.3创建组并添加到组词典中 146
7.3.4创建词典和扩展实体记录 146
7.3.5浏览词典条目 147
7.4源程序清单 147
7.4.1清单7-1主源文件containerObi.cpp 147
7.4.2清单7-2源文件layer.cpp 148
7.4.3清单7-3头文件layer.h 150
7.4.4清单7-4源文件group.cpp 150
7.4.5清单7-5头文件group.h 152
7.4.6清单7-6源文件xrecord.cpp 152
7.4.7清单7-7头文件xrecord.h 157
7.4.8清单7-8模块定义文件containerObj.def 157
7.5小结 158
第八章 派生AcDbObject自定义类 159
8.1目标及结果 159
8.2知识要点及思路分析 159
8.2.1使用ObjectARX宏 159
8.2.2重载基类AcDbObject的虚函数 161
8.2.3实现成员函数 163
8.2.4文件操作函数 164
8.2.5重载DWG文件操作函数 165
8.2.6重载DXF文件操作函数 166
8.2.7对象的引用 167
8.2.8撤销和重做 168
8.2.9 subErase、subOpen、subClose和subCancel函数 170
8.3实现步骤 171
8.3.1从基类AcDbObject中派生自定义类 171
8.3.2创建所有关系(ownership)体系 172
8.3.3重载基类AcDbObject的文件操作函数 173
8.3.4自定义类的初始化和卸载 173
8.3.5编写命令调用函数 174
8.4源程序清单 174
8.4.1清单8-1源文件customObject.cpp 174
8.4.2清单8-2模块定义文件customObject.def 182
8.5补充说明 182
8.5.1派生自定义ARX类的其它说明 182
8.5.2清除操作(Purge) 183
8.5.3自定义对象的版本信息 183
8.6小结 184
第九章 派生AcDbEntity自定义类 185
9.1目标及结果 185
9.2知识要点及思路分析 185
9.2.1重载类AcDbEntity的函数 186
9.2.2重载实体类公用函数 187
9.2.3扩展实体功能 192
9.3实现步骤 192
9.3.1派生自定义实体类 192
9.3.2重载基类AcDbEntity的成员函数 193
9.3.3重载基类AcDbObject的成员函数 194
9.3.4编写命令执行函数 194
9.4源程序清单 194
9.4.1清单9-1头文件customEntity.h 194
9.4.2清单9-2源文件customEntity.cpp 198
9.4.3清单9-3模块定义文件customEntity.def 222
9.5补充说明 222
9.5.1图形界面类库(AcGi)简介 222
9.5.2协议扩展机制 224
9.6小结 225
第十章 使用AcEdJig基类 226
10.1目标及结果 226
10.2知识要点及思路分析 226
10.2.1从基类AcEdJig中派生新类 226
10.2.2使用类AcEdJig的一般步骤 227
10.2.3拖动循环 227
10.2.4函数sampler()、update()和entity()的实现方法 228
10.2.5添加实体到数据库中 231
10.3实现步骤 231
10.3.1定义类CRectItfo 231
10.3.2由基类AcEdJig派生自定义类 232
10.3.3实现拖动循环 232
10.3.4实现命令“RECT”的执行函数createRect() 233
10.4源程序清单 234
10.4.1清单10-1源文件rectJig.cpp 234
10.4.2清单10-2模块定义文件rectJig.def: 245
10.5小结 245
第十一章 在ObjectARX中使用MFC类库 246
11.1目标及结果 246
11.2知识要点及思路分析 247
11.2.1在ObjectARX应用程序中使用MFC 247
11.2.2在ObjectARX应用程序中使用动态链接的MFC库 247
11.2.3使用与AutoCAD相同版本的MFC动态链接库 249
11.3实现步骤 250
11.3.1创建ObjectARX MFC应用程序框架 251
11.3.2创建模式对话框 251
11.3.3创建非模式对话框 252
11.4源程序清单 253
11.4.1清单11-1源文件dialogTest.cpp 253
11.4.2清单11-2类CModalDlg定义文件modalDlg.h 255
11.4.3清单11-3类CmodalDlg实现文件modalDlg.cpp 256
11.4.4清单11-4类CModelessDlg定义文件modelessDlg.h 257
11.4.5清单11-5类CModelessDlg实现文件modelessDlg.cpp 258
11.4.6清单11-6预定义头文件stdafx.h 259
11.4.7清单11-7资源定义头文件Resource.h 260
11.4.8清单11-8模块定义文件dialogTest.def 260
11.5补充说明 260
11.6小结 261
第十二章 使用ObjectARX的MFC用户界面类 262
12.1目标及结果 262
12.2知识要点及思路分析 262
12.2.1类的层次 263
12.2.2AdUi消息 263
12.2.3AdUi提示窗口 263
12.2.4AdUi对话框类 264
12.2.5 AcUi对话框类 265
12.2.6支持可扩充标签的AdUi类 265
12.2.7 AdUi和AcUi的编辑控件 265
12.2.8 AdUi和AcUi组合框控件 266
12.2.9 AcUi和MRU组合框 266
12.2.10 AdUi按钮类 267
12.2.11 AcUi按钮类 267
12.2.12对话框数据驻留 267
12.3实现步骤 268
12.3.1创建ObjectARX MFC应用程序框架 268
12.3.2使用AppStudio创建MFC对话框 268
12.3.3创建对话框类和控件变量 269
12.3.4使用AcUi类库 270
12.3.5创建对话框处理函数 270
12.4源程序清单 271
12.4.1清单12-1源文件AcUiSample.cpp 271
12.4.2清单12-2对话框定义文件AcUiDialogSample.h 273
12.4.3清单12-3对话框实现文件AcUiDialogSample.cpp 274
12.4.4清单12-4资源定义文件Resource.h 280
12.4.5清单12-5模块定义文件AcUiSample.ref 281
12.5补充说明 281
12.5.1使用并扩展AdUi标签对话框系统 281
12.5.2创建可扩展的自定义标签对话框 281
12.5.3扩展AutoCAD内建的标签对话框 282
12.6小结 283
第十三章 通知 284
13.1目标及结果 284
13.2知识要点及思路分析 285
12.5.1通知概述 285
12.5.2反应器类 285
12.5.3使用反应器 287
12.5.4类AcDbObject和数据库通知事件 288
12.5.5通知使用原则 288
13.3实现步骤 288
13.3.1创建数据库反应器 289
13.3.2创建永久对象反应器 290
13.4源程序清单 291
13.4.1清单13-1主源文件NotifySample.cpp 291
13.4.2清单13-2头文件dbreactor.h 292
13.4.3清单13-3源文件dbreactor.cpp 293
13.4.4清单13-4头文件persreactor.h 295
13.4.5清单13-5主源文件persreactor.cpp 296
13.4.6清单13-6模块定义文件NotifySample.def 300
13.5补充说明 300
13.5.1获取对象反应器的ID值 300
13.5.2立即事件和提交时事件 301
13.6小结 303
第十四章 多文档界面 304
14.1目标及结果 304
14.2知识要点及思路分析 304
14.2.1 MDI简介 304
14.2.2专用术语 306
14.2.3兼容级别 308
14.2.4 MDI唤醒级 310
14.2.5与多文档的交互方式 311
14.2.6文档事件通知 313
14.2.7专用文档对象 313
14.2.8非重入命令 313
14.2.9多文档命令 314
14.2.10禁止文档切换 315
14.2.11应用程序执行上下文 316
14.3实现步骤 317
14.3.1创建自定义的数据库反应器类CDbReactor 318
14.3.2创建自定义的文档管理反应器类CDocReactor 318
14.3.3创建自定义的文档信息类CPerDocData 318
14.3.4创建自定义的文档全局数据类CAppDocGlobals 319
14.3.5其它函数 319
14.4源程序清单 319
14.4.1清单14-1主源文件MDISample.cpp 319
14.4.2清单14-2模块定义文件MDISample.def 327
14.5补充说明 327
14.5.1SDI系统变量 327
14.5.2数据库撤销和事务处理功能 328
14.5.3与文档无关的数据库 328
14.6小结 329