ObjectARX实训讲义二自定义实体ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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派生的实体为主,
相关文档
最新文档