ObjectARX(培训讲义二)-叶雄进_第1页
ObjectARX(培训讲义二)-叶雄进_第2页
ObjectARX(培训讲义二)-叶雄进_第3页
ObjectARX(培训讲义二)-叶雄进_第4页
ObjectARX(培训讲义二)-叶雄进_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2007 Autodesk 1 2007 AutodeskObjectARX TrainerTraining 叶雄进 2007-8-29 北京 2007 Autodesk2自定义实体的思路 什么是自定义实体 如何创建自定义实体AcDbEntity虚函数的功能和使用 现场创建一个自定义实体 Tips and Tricks 2007 Autodesk3自定义实体 操作自定义实体Smiley 什么是自定义实体自定义一个图形对象、控制它图形显示,存储的数据,对拖拽的响应,对捕捉的响应,平移、旋转等操作的响应 需要扩充自定义实体的哪些功能?结合操作,说明需要扩展的方面 2007 Autodesk4为什

2、么需要自定义实体?存储自定义数据扩展实体的功能连动操作拖拽捕捉拉伸 2007 Autodesk5自定义对象 两类自定义对象从AcDbObject派生从AcDbEntity派生AcDbEntity从AcDbObject派生,包括了AcDbObject的所有功能。因此这里以讲解从AcDbEntity派生的实体为主, 2007 Autodesk6重要的类继承关系AcRxObjectAcDbObjectAcDbEntityAcDbDictionaryAcDbSymbolTableAcDbSymbolTableRecordAcGiDrawableDatabase resident objectsDraw

3、able objectsAcDbCurveAcDbLineAcDbBlockTable 2007 Autodesk7如何实现自定义实体 创建一个新类 从合适的类派生 实现AcRxObject的协议 添加到运行时类层次图中 2007 Autodesk8运行时类型识别(RTTI) Runtime Type Identification (RTTI) 协议扩充 AcRxClass Class 来描述每一个自定义类 appName comparedTo dxfName isDerivedFrom myParent name proxyFlags 2007 Autodesk9建立运行时类层次 rxIni

4、t (static) gpDesc (static variable) newAcRxClass acrxBuildClassHierarchy 2007 Autodesk10类别判断函数 最基础的类AcRxObject提供了类型识别函数virtual AcRxClass* isA() const;static AcRxClass* gpDesc;static AcRxClass* desc();static CMyClass * cast(const AcRxObject* inPtr) 2007 Autodesk11Macros 揭开研究 ACDB_REGISTER_OBJECT_ENTR

5、Y_AUTO ACRX_DECLARE_MEMBERS ACRX_NO_CONS_DEFINE_MEMBERS ACRX_CONS_DEFINE_MEMBERS ACRX_DXF_DEFINE_MEMBERS ACRX_DEFINE_MEMBERS 2007 Autodesk12图形显示函数 worldDraw viewportDraw 调用关系如下 if(!entity-worldDraw(pWd) for(每一个相关视口) entity-viewportDraw(void); 2007 Autodesk13数据保存函数 dwgInFields dwgOutFields dxfInField

6、s dxfOutFields 2007 Autodesk14夹点操作函数 设置对象夹点getGripPoints() 拖动夹点,自定义实体的行为moveGripPoints() 2007 Autodesk15两个重要函数assertWriteEnabled(Adesk:BooleanautoUndo=Adesk:kTrue,Adesk:BooleanrecordModified=Adesk:kTrue);)自定义类中任何修改函数都必须调用函数assertWriteEnabled(),用于检查对象是否是用写的模式打开,当该函数被调用时,首先检查参数recordModified,如果recordM

7、odified的值为Adesk:kFalse,则不执行任何撤销操作,如果recordModified的值为Adesk:kTrue,则检查autoUndo参数,参数,如果参数autoUndo为Adesk:kTrue,则AutoCAD 将记录对象的状态以便执行撤销操作,当对象的修改操作完成并关闭对象,操作对象的全部状态将被保存到一个撤销操作文件中,如果这时的用UNDO命令,AutoCAD 调用对象的dwgInFields()函数把这个撤销操作文件的内容读入到数据库中。assertReadEnabled() 判断是否可读状态 2007 Autodesk16其它重要重载函数 设置自定义实体的捕捉函数g

8、etOsnapPoints() 对平移,复制,镜像等操作的响应函数transformBy() 生成代理实体的图形形状函数saveAs() 相交函数interSectWith() 炸开函数Explode() 2007 Autodesk17次常用重载函数 深度克隆DeepClonewblockClone 2007 Autodesk18设计良好的程序架构 自定义实体代码集中在DBX工程中 用户交互操作UI (user interface)代码放在 ARX工程中 DBX 独立存在. ARX 依赖于 DBX ARX 加载 DBX 2007 Autodesk19代理对象 当自定义实体的定义模块没有加载时,

9、用代理实体来管理用户自定义实体。 两类代理对象 (AcDbProxyObject) and Custom Entities (AcDbProxyEntity) 被 “PROXYSHOW” 和“PROXYGRAPHICS” 两个系统变量控制。 2007 Autodesk20自动加载和按需加载 Acad.rx, Acad.lsp, acad.dvb RegistryStartupProxy Detection Appload dialog /Ld switch 2007 Autodesk21用其它开发语言访问自定义实体 在VBA程序中访问自定义对象Make sure COM wrapper is

10、registeredCall AddCustomObject method 在.Net编程方式中访问自定义实体mixed-managed .NET WrapperUse the .NET wrapper class to instantiate and manageADN Whitepaper: Tutorial to create managed wrappers for custom ARX functions and objects 2007 Autodesk22Tips and tricks 不要在worldDraw和viewPortDraw中以写的方式打开实体进行修改自定义实体的数据

11、 Few other classes should be avoided (eg., AcDb2dPolyline, AcDbVertex, Ref: OARX Help) 避免访问AutoCAD特殊功能,如 环境和系统变量 2007 Autodesk23自定义实体的局限 实现和维护稍复杂些 End-User 不喜欢弹出代理实体对话框 2007 Autodesk24实际创建一个自定义实体 仍选其一一个三角形一个矩形宽度不变的圆环 2007 Autodesk25自定义实体总结 全方面用户自定义的对象 2007 Autodesk26几何类几何类 2007 Autodesk27几何类 (AcGe库)

12、 AcGe库是一个纯数学纯数学的库,提供几何运算功能,与AcDbDatabase无关,但也被AcDb和AcGi库中函数使用 包括点、直线、曲线、表面等相关的类。 常用的二维几何类有AcGePoint2d、AcGeVector2d、AcGeEntity2d、AcGeLinearEnt2d; 常用的三维几何类有AcGePoint3d、AcGeVector3d、AcGeEntity3d; 表示公差类AcGeTol 2007 Autodesk28 2007 Autodesk29AcGe库的功能 点和向量求矢量间的夹角,判断是否同向、是否平行、是否垂直,矩阵变换,加减乘除等运算,通过angle()函数可

13、以得到矢量的角度线: 线求交点、是否平行、求垂线、点是否在线上 面 公差浮点型数据的比较的需要 转换矩阵坐标转换和空间变换时需要 2007 Autodesk30一个应用几何类进行计算的实例 ARXAcGe 2007 Autodesk31用户界面用户界面 2007 Autodesk32内容 ObjectARX应用程序中资源管理以及使用MFC。 模态对话框和非模态对话框的创建方法。 AcUi和AdUi的介绍和使用方法。 2007 Autodesk33资源问题 什么是资源?.rc文件中的内容, 包括 菜单, 对话框, 工具条, 为什么需要资源管理?AutoCAD有自己的资源ARX程序中也有资源 程序

14、的默认资源从哪里加载? 2007 Autodesk34资源管理 管理资源的切换类 CAcModuleResourceOverrideAutoCAD资源Arx中定义的资源构造对话框ARX命令 2007 Autodesk35非模态对话框 让对话框能让用户输入操作 响应AutoCAD定义的一个消息#ifndef WM_ACAD_MFC_BASE#define WM_ACAD_MFC_BASE (1000)#endif#ifndef WM_ACAD_KEEPFOCUS#define WM_ACAD_KEEPFOCUS (WM_ACAD_MFC_BASE + 1)#endifonAcadKeepFocu

15、s 2007 Autodesk36AdUi和AcUi的介绍和使用 用来建立与AutoCAD界面风格一致的控件库 CAdUi类可用于任何应用程序于任何Autodesk产品的交互作用 CAcUi类派生于CAdUi类,并专用于AutoCAD 2007 Autodesk37如何使用AcUi库-例题说明 class AsdkAcUiDialogSample : public CAcUiDialog/AFX_DATA(AsdkAcUiDialogSample) enum IDD = IDD_DIALOG1 ; CAcUiSymbolComboBox m_ctrlRegAppComboBox; CAcUiListBox m_ctrlBlockListBox; CAcUiPickButton m_ctrlPickButton; CAcUiPickButton m_ctrlAngleButton; CAcUiA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论