ObjectArx开发培训教程课件.ppt
《ObjectArx开发培训教程课件.ppt》由会员分享,可在线阅读,更多相关《ObjectArx开发培训教程课件.ppt(87页珍藏版)》请在三一办公上搜索。
1、ObjectARX Training,华中科技大学CAD中心武汉天喻软件有限责任公司2010年2月,Object ARX,1,T i a n y u S o f t,ObjectARX Training华中科技大学CAD中心O,ObjectARX应用的介绍,ObjectARX是一个仅在AutoCAD上进行二次开发的一套开发环境,通俗点讲就是一系列的APIObjectARX的应用举例:扩展AutoCAD功能为各种工程设计开发便利的工具,Object ARX,2,T i a n y u S o f t,ObjectARX应用的介绍ObjectARX是一个仅在Au,ObjectARX概述,ARXAu
2、toCAD Runtime eXtensionDBX DataBase eXtensionARX = .DLL + 2 exported functions acrxEntryPoint & acrxGetApiVersion ,AutoCAD.EXE,ARX Apps,ARX Apps,ObjectARX APIs,Object ARX,3,T i a n y u S o f t,ObjectARX概述ARXAutoCAD Runtim,ObjectARX开发特点,不同的ACAD版本用不同的开发包及开发环境ACAD2000ACAD2002 : VC+ 6.0ACAD2004ACAD2006
3、: VS.NET 2002ACAD2007ACAD2009 : VS.NET 2005ACAD2010 : VS.NET 2008ACAD2007开始字符串采用UNICODE编码ARX之间不能连续依赖A.arx依赖B.arx, B.arx依赖C.dbx,则A.arx不能加载与ACAD已有功能地位一致,Object ARX,4,T i a n y u S o f t,ObjectARX开发特点不同的ACAD版本用不同的开发包及,ObjectARX类库构成,AcRx:用于帮定一个应用程序以及运行类的注册和识别。AcEd:用于注册自定义命令和AutoCAD事件通告。AcDb:AutoCAD图形数据库
4、。AcGi: 用于AutoCAD 的图形类。AcGe:用于AutoCAD 的线型和几何对象通用类。ADS: AutoCAD 的早期版本C语言函数库。,Object ARX,5,T i a n y u S o f t,ObjectARX类库构成AcRx:用于帮定一个应用程序以及,ObjectARX类结构,类图classmap.dwg位置:ObjectARX 2006classmap,Object ARX,6,T i a n y u S o f t,ObjectARX类结构类图classmap.dwgObje,用ObjectARX能做些什么?,访问、编辑和扩展AutoCAD图形数据库和AutoCA
5、D系统相互通信使用MFC创建用户接口支持多文档应用创建自定义类和自定义实体可以开发复杂的应用和其他开发环境进行协作,Object ARX,7,T i a n y u S o f t,用ObjectARX能做些什么?访问、编辑和扩展AutoCA,培训安排-1,一、基础AUTOCAD数据库结构及操作,ads_name-句柄-ID及转换,aced常用函数,WCS/UCS及转换,菜单/工具条/对话框制作二、自定义对象显示/存储/夹点/移动/拷贝/范围/list/捕捉点/炸开/相交点/sub事件三、自定义对象生成与编缉双击修改/Jig/属性页,Object ARX,8,T i a n y u S o f
6、 t,培训安排-1一、基础Object ARX8T i a n y,培训安排-2,四、一些重要对象字典/层/线型/字体样式五、扩展数据六、反应器八、总结,Object ARX,9,T i a n y u S o f t,培训安排-2四、一些重要对象Object ARX9T i a,所需基础,ACAD基本操作C+VCMFC(界面)COM(属性页等)STL(提高效率),Object ARX,10,T i a n y u S o f t,所需基础ACAD基本操作Object ARX10T i a,AutoCAD图形数据库概述,AutoCAD图形实际上是一系列存放在一个AcDbDatabase类型的对
7、象中的AcDb对象。一个dwg就是一个数据库具备数据库的基本组织结构。包括九个符号表和一个命名对象词典,Object ARX,11,T i a n y u S o f t,AutoCAD图形数据库概述AutoCAD图形实际上是一系列,AutoCAD图形数据库结构,AcDbDatabase数据库 |-AcDb符号表 | |-块表(AcDbBlockTable) | |-尺寸标注样式表(AcDbDimStyleTable) | |-层表(AcDbLayerTable) | |-线型表(AcDbLinetypeTable) | |-已注册应用程序表(AcDbRegAppTable) | |-字体样式
8、表(AcDbTextStyleTable) | |-用户坐标系表(AcDbUCSTable) | |-视口表(AcDbViewportTable) | |-视图表(AcDbViewTable) |-命名对象词典访问:AcDbDatabase:getSymbolTable,Object ARX,12,T i a n y u S o f t,AutoCAD图形数据库结构AcDbDatabase数据库O,向数据库中添加实体,Acad:ErrorStatus addEntityToModelSpace(AcDbEntity * pEnt, AcDbObjectId ,Object ARX,13,T i
9、 a n y u S o f t,向数据库中添加实体Acad:ErrorStatus ad,怎样遍历AutoCAD图形数据库?,void FindObjectId(AcDbObjectId ,Object ARX,14,T i a n y u S o f t,怎样遍历AutoCAD图形数据库?void FindObje,怎样创建和使用已有的AutoCAD图形数据库?,要使用AcDbDatabase数据库,与使用其它数据库一样,首先要声明一个数据库对象。AcDbDatabase类的声明,调用类的构造函数:AcDbDatabase :AcDbDatabase(bool buildDefaultDr
10、awing = true, bool noDocument = false);其中,buildDefaultDrawing参数控制是否创建一个包括所有默认数据记录的数据库。该参数的默认值为true,这样在AcDbDatabase数据库创建时,将在新建的数据库中包含一个AutoCAD图形数据库必须包含的基本数据要素,这些要素包括九个符号表及其初始记录(比如0层、STANDARD文字样式等),命名对象词典(组词典和多线样式词典)以及必要的系统变量设置。这样就可以向新建的数据库中添加各种实体和对象。如:AcDbDatabase *pDb= new AcDbDatabase(true);若指定该参数为
11、false,AutoCAD将创建一个完全空的AcDbDatabase数据库。这样的AcDbDatabase数据库不能直接向其中添加实体或对象,需读入一个图形文件来拓展该图形数据库,然后再逐步添加或修改数据库中的实体或对象。读入图形数据库使用函数:AcadErrorStatus AcDbDatabase:readDwgFile(const char* fileName );若要使用已有的图形,比如“test.dwg”文件,则使用下列代码:AcDbDatabase *pDb= new AcDbDatabase(false);pDb-readDwgFile(“test.dwg”);AcDbDatab
12、ase构造函数的noDocument参数控制打开的数据库是否与当前文档关联,此参数用于“多文档处理”中。注意:在这种情况下,AcDbdatabase()的参数必须指定为false(当然,0或者Adesk:kFalse都可以)。因为使用pDb-readDwgFile()函数时,pDb必须是一个完全空白的数据库,也就是说,哪怕使用了AcDbDatabase(false);新建数据库后,只要对数据库进行了操作,就不能再使用readDwgFile()函数,否则会导致严重的内存错误。,Object ARX,15,T i a n y u S o f t,怎样创建和使用已有的AutoCAD图形数据库?要使用
13、AcDb,数据库对象AcDbObject概述,每一个数据库对象具有以下三种表示方法:句柄AcDbHandle对象idAcDbObjectId指针AcDbObect *,Object ARX,16,T i a n y u S o f t,数据库对象AcDbObject概述每一个数据库对象具有以下三,三者之间的相互关系,注意: Handle不变 ,ObjectId变化,Object ARX,17,T i a n y u S o f t,三者之间的相互关系 注意: Handle不变 ,Object,之间相互关系和转换,1. AcDbHandle - AcDbObjectIdAcDbDatabase
14、:getAcDbObjectId(,Object ARX,18,T i a n y u S o f t,之间相互关系和转换1. AcDbHandle - AcDb,怎样访问数据库对象?,打开对象的方法:acdbOpenObject()该函数为模板函数,能打开任意对象acdbOpenAcDbObject()acdbOpenAcDbEntity()打开对象的模式:AcDb:kForRead /只读AcDb:kForWrite /可写AcDb:kForNotify /通知升级和降级访问:AcDbObject:upgradeOpen(); /升级为写AcDbObject:downgradeOpen()
15、; /降级为读删除对象AcDbObject:erase(),Object ARX,19,T i a n y u S o f t,怎样访问数据库对象?打开对象的方法:Object ARX19,用事务方式访问,事务AcTransaction * AcTransactionManager:startTransaction AcTransactionManager:endTransaction() AcTransactionManager:abortTransaction(),virtual Acad:ErrorStatus getObject(AcDbObject*& obj, AcDbObject
16、Id objectId, AcDb:OpenMode mode, bool openErasedObject = false),Object ARX,20,T i a n y u S o f t,用事务方式访问事务Object ARX20T i a n y,对象访问限制,如果一个对象被写打开,则在关闭前不能再被读打开或写打开如果一个对象被读打开,则在关闭前不能再被写打开,但可被读打开(一个对象最多可同时被打开128次),Object ARX,21,T i a n y u S o f t,对象访问限制如果一个对象被写打开,则在关闭前不能再被读打开或,对象类型识别,desc():a static
17、member function that returns the class descriptor object of a particular (known) class.cast(): a static member function that returns an object of the specified type, or NULL if the object is not of the required class (or a derived class). isKindOf():returns whether an object belongs to the specified
18、 class (or a derived class). isA(): returns the class descriptor object of an object whose class is unknown.AcRxClass例如:AcDbEntity* curEntity = somehowGetAndOpenAnEntity();if (curEntity-isKindOf(AcDbEllipse:desc() If(curEntity-isA() = AcDbEllipse:desc() AcDbLine * pLine = AcDbLine :cast(curEntity ),
19、Object ARX,22,T i a n y u S o f t,对象类型识别desc():Object ARX22T i,AutoCAD里的交互,AcEd 全局函数String, number acquisitionacedGetInt used to get an integer valueacedGetReal used to get a real valueacedGetString used to get a stringacedGetDist used to get the distance between two pointsPoint, angle acquisitionac
20、edGetAngle used to get a angle valueacedGetPoint used to pick a pointacedGetCornerEntity selectionacedEntSel used to select a single entityacedNEntSel used to select a single, nested entityacedNEntSelP used to select a single, nested entityacedSSGet used to select multiple entitiesOthersacedGetKword
21、 used to get a key wordacedInitGet used to initialize acedGetXXXX functionsacedGetFileD used to retrieve file selection from a file dialog,Object ARX,23,T i a n y u S o f t,AutoCAD里的交互AcEd 全局函数Object ARX,向ACAD发送命令,acedCommand:立即执行acedCommand(RTSTR, zoom, RTSTR, e, 0);sendStringToExecute:作为下一个命令执行CSt
22、ring strCmd;strCmd.Format(_HNBMReservedAreaModified %d %d , (long)ReservedAreaHandle, nType);acDocManager-sendStringToExecute(acDocManager-curDocument(), strCmd, false, true, false);共同点:都不能执行有用户交互的命令,Object ARX,24,T i a n y u S o f t,向ACAD发送命令acedCommand:立即执行Objec,WCS,UCS,OCS(ECS),规则:数据库中对象保存的点坐标是WC
23、S坐标(建议);而一些acedXX函数(如acedGetPoint,acedEntSel等)、list命令一般是UCS坐标。WCS与UCS相互转换/UCS坐标系fromrb.restype = RTSHORT;fromrb.resval.rint = 1;/WCS坐标系torb.restype = RTSHORT;torb.resval.rint = 0;acedTrans(pt_ucs,acdbUcs2Wcs acdbWcs2Ucs AcDbEntity:getEcs,Object ARX,25,T i a n y u S o f t,WCS,UCS,OCS(ECS)规则:数据库中对象保存的
24、点坐,UCS常用函数及类,函数:Acad:ErrorStatus acedGetCurrentUCS(AcGeMatrix3d类:AcDbUCSTable 类:AcDbUCSTableRecord,Object ARX,26,T i a n y u S o f t,UCS常用函数及类函数:Acad:ErrorStatus,ARX应用向导,应用向导:ObjectARX 2006的在ObjectARX 2006utilsObjARXWiz目录下。功能:与MFC应用向导类似产生工程产生特定类及函数,Object ARX,27,T i a n y u S o f t,ARX应用向导应用向导:Objec
25、tARX 2006的在O,ARX,DBX加载/卸载,加载ap(appload)arx其它方式(lisp文件,注册表等)卸载aparx,Object ARX,28,T i a n y u S o f t,ARX,DBX加载/卸载加载Object ARX28T i,ARX软件结构,加载:On_kInitAppMsg卸载:On_kUnloadAppMsg命令映射(arx2006或以上):static void INTECAD_INTESelect(void)ACED_ARXCOMMAND_ENTRY_AUTO(CINTECADApp, INTECAD, _INTESelect, INTESelect
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ObjectArx 开发 培训 教程 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1286760.html