ObjectARX实训讲义二自定义实体ppt课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1000)
#ifndef WM_ACAD_KEEPFOCUS #define WM_ACAD_KEEPFOCUS (WM_ACAD_MFC_BASE + 1) #endif
onAcadKeepFocus
35
AdUi和AcUi的介绍和使用
用来建立与AutoCAD界面风格一致的控件库 CAdUi类可用于任何应用程序于任何 Autodesk产品的交互作用 CAcUi类派生于CAdUi类,并专用于AutoCAD
ObjectARX Trainer’Training
1
自定义实体的思路
什么是自定义实体
如何创建自定义实体
AcDbEntity虚函数的功能和使用
现场创建一个自定义实体 Tips and Tricks
2
•
自定义实体 操作自定义实体Smiley
什么是自定义实体
自定义一个图形对象、控制它图形显示,存储的数据,对 拖拽的响应,对捕捉的响应,平移、旋转等操作的响应
36
如何使用AcUi库-例题说明
class AsdkAcUiDialogSample : public CAcUiDialog
//{{AFX_DATA(AsdkAcUiDialogSample) enum { IDD = IDD_DIALOG1 }; CAcUiSymbolComboBox m_ctrlRegAppComboBox; CAcUiListBox m_ctrlBlockListBox; CAcUiPickButton m_ctrlPickButton; CAcUiPickButton m_ctrlAngleButton; CAcUiAngleEdit m_ctrlAngleEdit; CAcUiNumericEdit m_ctrlXPtEdit; CAcUiNumericEdit m_ctrlYPtEdit;
10
Macros 揭开研究
ACDB_REGISTER_OBJECT_ENTRY_AUTO ACRX_DECLARE_MEMBERS ACRX_NO_CONS_DEFINE_MEMBERS ACRX_CONS_DEFINE_MEMBERS ACRX_DXF_DEFINE_MEMBERS ACRX_DEFINE_MEMBERS
21
Tips and tricks
不要在worldDraw和viewPortDraw中以写的 方式打开实体进行修改自定义实体的数据 Few other classes should be avoided (eg., AcDb2dPolyline, AcDbVertex, Ref: OARX Help) 避免访问AutoCAD特殊功能,如 环境和系统 变量
13
夹点操作函数
设置对象夹点
getGripPoints()
拖动夹点,自定义实体的行为
moveGripPoints()
14
两个重要函数 assertWriteEnabled( Adesk::Boolean autoUndo = Adesk::kTrue, Adesk::Boolean recordModified = Adesk::kTrue); ) 自定义类中任何修改函数都必须调用函数 assertWriteEnabled(),用于检查对象是否是用 写的模式打开,当该函数被调用时,首先检查参数 recordModified,如果recordModified的值为 Adesk::kFalse,则不执行任何撤销操作,如果 recordModified的值为Adesk::kTrue,则检查 15 autoUndo参数,如果参数autoUndo为
其它重要重载函数
设置自定义实体的捕捉函数
getOsnapPoints() transformBy()
对平移,复制,镜像等操作的响应函数
生成代理实体的图形形状函数
saveAs()
interSectWith()
16
相交函数
炸开函数
次常用重载函数
深度克隆
DeepClone wblockClone
5
AcRxODrawable AcDbObject AcDbEntity AcDbCurve AcDbDictionary AcDbLine
AcDbSymbolTable
AcDbBlockTable AcDbSymbolTableRecord Database resident objects Drawable objects 6
11
图形显示函数
worldDraw viewportDraw 调用关系如下 if(!entity->worldDraw(pWd)) for(每一个相关视口) entity->viewportDraw(void);
12
数据保存函数
dwgInFields dwgOutFields dxfInFields dxfOutFields
19
自动加载和按需加载
Acad.rx, Acad.lsp, acad.dvb Registry Startup Proxy Detection Appload dialog /Ld switch
20
用其它开发语言访问自定义实体
在VBA程序中访问自定义对象
Make sure COM wrapper is registered Call AddCustomObject method
如何实现自定义实体
创建一个新类 从合适的类派生 实现AcRxObject的协议 添加到运行时类层次图中
7
运行时类型识别(RTTI)
Runtime Type Identification (RTTI) 协议扩充 AcRxClass Class 来描述每一个自定义类
appName comparedTo dxfName isDerivedFrom myParent name proxyFlags
在.Net编程方式中访问自定义实体
mixed-managed .NET Wrapper Use the .NET wrapper class to instantiate and manage ADN Whitepaper: Tutorial to create managed wrappers for custom ARX functions and objects
22
自定义实体的局限
实现和维护稍复杂些 End-User 不喜欢弹出代理实体对话框
23
实际创建一个自定义实体
仍选其一
一个三角形 一个矩形 宽度不变的圆环
24
自定义实体总结
全方面用户自定义的对象
25
几何类
26
几何类 (AcGe库)
AcGe库是一个纯数学的库,提供几何运算功 能,与AcDbDatabase无关,但也被AcDb和 AcGi库中函数使用 包括点、直线、曲线、表面等相关的类。 常用的二维几何类有AcGePoint2d、 AcGeVector2d、AcGeEntity2d、 AcGeLinearEnt2d; 常用的三维几何类有AcGePoint3d、 AcGeVector3d、AcGeEntity3d; 27
30
用户界面
31
内容
ObjectARX应用程序中资源管理以及使用 MFC。 模态对话框和非模态对话框的创建方法。 AcUi和AdUi的介绍和使用方法。
32
资源问题
什么是资源?
.rc文件中的内容, 包括 菜单, 对话框, 工具条, …
为什么需要资源管理?
AutoCAD有自己的资源 ARX程序中也有资源
8
建立运行时类层次
rxInit (static) gpDesc (static variable) newAcRxClass acrxBuildClassHierarchy
9
类别判断函数
最基础的类AcRxObject提供了类型识别函数
virtual AcRxClass* isA() const; static AcRxClass* gpDesc; static AcRxClass* desc(); static CMyClass * cast(const AcRxObject* inPtr)
17
设计良好的程序架构
自定义实体代码集中在DBX工程中 用户交互操作UI (user interface)代码放在 ARX工程中 DBX 独立存在. ARX 依赖于 DBX ARX 加载 DBX
18
代理对象
当自定义实体的定义模块没有加载时,用 代理实体来管理用户自定义实体。 两类代理对象 (AcDbProxyObject) and Custom Entities (AcDbProxyEntity) 被 “PROXYSHOW” 和“PROXYGRAPHICS” 两 个系统变量控制。
28
AcGe库的功能
点和向量
求矢量间的夹角,判断是否同向、是否平行、是否垂 直,矩阵变换,加减乘除等运算,通过angle()函数可 以得到矢量的角度线: 求交点、是否平行、求垂线、点是否在线上
线
面 公差
浮点型数据的比较的需要
29
转换矩阵
一个应用几何类进行计算的实例
ARXAcGe
37
在AcUi的模式对话框中与AutoCAD的交互操作
BeginEditorCommand(); CancelEditorCommand(); CompleteEditorCommand();
38
程序的默认资源从哪里加载?
33
资源管理
管理资源的切换类 CAcModuleResourceOverride AutoCAD
资源
ARX命令
Arx中定 义的资源
构造对 话框
34
非模态对话框
让对话框能让用户输入操作 响应AutoCAD定义的一个消息
#ifndef WM_ACAD_MFC_BASE #define WM_ACAD_MFC_BASE #endif
需要扩充自定义实体的哪些功能?
结合操作,说明需要扩展的方面
3
为什么需要自定义实体?
存储自定义数据 扩展实体的功能
连动操作 拖拽 捕捉 拉伸 ……
4
自定义对象
两类自定义对象
从AcDbObject派生 从AcDbEntity派生
AcDbEntity从AcDbObject派生,包括了 AcDbObject的所有功能。因此这里以讲解 从AcDbEntity派生的实体为主,