ImageVerifierCode 换一换
格式:PPT , 页数:87 ,大小:251.45KB ,
文档编号:4033000      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-4033000.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(ObjectArx开发培训教程课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

ObjectArx开发培训教程课件.ppt

1、ObjectARX Training华中科技大学CAD中心武汉天喻软件有限责任公司2010年2月Object ARX1ObjectARX应用的介绍 ObjectARX是一个仅在AutoCAD上进行二次开发的一套开发环境,通俗点讲就是一系列的API ObjectARX的应用举例:扩展AutoCAD功能 为各种工程设计开发便利的工具Object ARX2ObjectARX概述 ARXAutoCAD Runtime eXtension DBX DataBase eXtension ARX=.DLL+2 exported functions acrxEntryPoint&acrxGetApiVersi

2、on AutoCAD.EXEARX AppsARX AppsObjectARX APIsObject ARX3ObjectARX开发特点 不同的ACAD版本用不同的开发包及开发环境 ACAD2000ACAD2002:VC+6.0 ACAD2004ACAD2006:VS.NET 2002 ACAD2007ACAD2009:VS.NET 2005 ACAD2010 :VS.NET 2008 ACAD2007开始字符串采用UNICODE编码 ARX之间不能连续依赖 A.arx依赖B.arx,B.arx依赖C.dbx,则A.arx不能加载 与ACAD已有功能地位一致Object ARX4ObjectA

3、RX类库构成 AcRx:用于帮定一个应用程序以及运行类的注册和识别。AcEd:用于注册自定义命令和AutoCAD事件通告。AcDb:AutoCAD图形数据库。AcGi:用于AutoCAD 的图形类。AcGe:用于AutoCAD 的线型和几何对象通用类。ADS:AutoCAD 的早期版本C语言函数库。Object ARX5ObjectARX类结构 类图classmap.dwg 位置:ObjectARX 2006classmapObject ARX6用ObjectARX能做些什么?访问、编辑和扩展AutoCAD图形数据库 和AutoCAD系统相互通信 使用MFC创建用户接口 支持多文档应用 创建自

4、定义类和自定义实体 可以开发复杂的应用 和其他开发环境进行协作Object ARX7培训安排-1 一、基础 AUTOCAD数据库结构及操作,ads_name-句柄-ID及转换,aced常用函数,WCS/UCS及转换,菜单/工具条/对话框制作 二、自定义对象 显示/存储/夹点/移动/拷贝/范围/list/捕捉点/炸开/相交点/sub事件 三、自定义对象生成与编缉 双击修改/Jig/属性页Object ARX8培训安排-2 四、一些重要对象 字典/层/线型/字体样式 五、扩展数据 六、反应器 八、总结Object ARX9所需基础 ACAD基本操作 C+VC MFC(界面)COM(属性页等)STL

5、(提高效率)Object ARX10AutoCAD图形数据库概述 AutoCAD图形实际上是一系列存放在一个AcDbDatabase类型的对象中的AcDb对象。一个dwg就是一个数据库 具备数据库的基本组织结构。包括九个符号表和一个命名对象词典Object ARX11AutoCAD图形数据库结构AcDbDatabase数据库|-AcDb符号表|-块表(AcDbBlockTable)|-尺寸标注样式表(AcDbDimStyleTable)|-层表(AcDbLayerTable)|-线型表(AcDbLinetypeTable)|-已注册应用程序表(AcDbRegAppTable)|-字体样式表(A

6、cDbTextStyleTable)|-用户坐标系表(AcDbUCSTable)|-视口表(AcDbViewportTable)|-视图表(AcDbViewTable)|-命名对象词典访问:AcDbDatabase:getSymbolTableObject ARX12向数据库中添加实体Acad:ErrorStatus addEntityToModelSpace(AcDbEntity*pEnt,AcDbObjectId&EntId)Acad:ErrorStatus eRet;AcDbDatabase*pDb=acdbHostApplicationServices()-workingDatabas

7、e();AcDbBlockTable*pBlockTable;eRet=pDb-getBlockTable(pBlockTable,AcDb:kForRead);if(eRet!=Acad:eOk)return eRet;AcDbBlockTableRecord*pBlockTableRecord;eRet=pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);if(eRet!=Acad:eOk)pBlockTable-close();return eRet;pBlockTable-close();eRet=p

8、BlockTableRecord-appendAcDbEntity(EntId,pEnt);if(eRet!=Acad:eOk)pBlockTableRecord-close();return eRet;pBlockTableRecord-close();return Acad:eOk;Object ARX13怎样遍历AutoCAD图形数据库?void FindObjectId(AcDbObjectId&objId)AcDbDatabase*pDb=acdbHostApplicationServices()-workingDatabase();AcDbBlockTable*pBlockTabl

9、e;pDb-getBlockTable(pBlockTable,AcDb:kForRead);AcDbBlockTableRecord*pBlockTableRecord;pBlockTable-getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForRead);pBlockTable-close();AcDbBlockTableRecordIterator*pIter;pBlockTableRecord-newIterator(pIter);/Create an iteratorfor(pIter-start();!pIter-done();pIt

10、er-step().AcDbEntity*pEntity;if(pIter-getEntity(pEntity,AcDb:kForRead)!=Acad:eOk)continue;If(pEntity-isKindOf(AcDbCircle:desc()objId=pEntity-ObjectId();pBlockTableRecord-close();Object ARX14怎样创建和使用已有的AutoCAD图形数据库?要使用AcDbDatabase数据库,与使用其它数据库一样,首先要声明一个数据库对象。AcDbDatabase类的声明,调用类的构造函数:AcDbDatabase:AcDbD

11、atabase(bool buildDefaultDrawing=true,bool noDocument=false);其中,buildDefaultDrawing参数控制是否创建一个包括所有默认数据记录的数据库。该参数的默认值为该参数的默认值为true,这样在AcDbDatabase数据库创建时,将在新建的数据库中包含一个AutoCAD图形数据库必须包含的基本数据要素,这些要素包括九个符号表及其初始记录(比如0层、STANDARD文字样式等),命名对象词典(组词典和多线样式词典)以及必要的系统变量设置。这样就可以向新建的数据库中添加各种实体和对象。如:AcDbDatabase*pDb=ne

12、w AcDbDatabase(true);若指定该参数为若指定该参数为false,AutoCAD将创建一个完全空的AcDbDatabase数据库。这样的AcDbDatabase数据库不能直接向其中添加实体或对象,需读入一个图形文件来拓展该图形数据库,然后再逐步添加或修改数据库中的实体或对象。读入图形数据库使用函数:AcadErrorStatus AcDbDatabase:readDwgFile(const char*fileName);若要使用已有的图形,比如“test.dwg”文件,则使用下列代码:AcDbDatabase*pDb=new AcDbDatabase(false);pDb-re

13、adDwgFile(“test.dwg”);AcDbDatabase构造函数的noDocument参数控制打开的数据库是否与当前文档关联,此参数用于“多文档处理”中。注意:在这种情况下,AcDbdatabase()的参数必须指定为false(当然,0或者Adesk:kFalse都可以)。因为使用pDb-readDwgFile()函数时,pDb必须是一个完全空白的数据库,也就是说,哪怕使用了AcDbDatabase(false);新建数据库后,只要对数据库进行了操作,就不能再使用readDwgFile()函数,否则会导致严重的内存错误。Object ARX15数据库对象AcDbObject概述

14、每一个数据库对象具有以下三种表示方法:句柄AcDbHandle 对象idAcDbObjectId 指针AcDbObect*Object ARX16三者之间的相互关系 注意:Handle不变,ObjectId变化Object ARX17之间相互关系和转换1.AcDbHandle-AcDbObjectIdAcDbDatabase:getAcDbObjectId(&AcDbObjectId,FALSE,AcDbHandle);2.AcDbObjectId-AcDbHandleAcDbHandle =AcDbObjectId:handle();3.AcDbObjectId-AcDbObject*acd

15、bOpenObject(AcDbObject*&,AcDbObjectId,AcDb:OpenMode);4.AcDbObject*-AcDbHandle AcDbHandle =AcDbObject:getAcDbHandle();5.ads_name 和 AcDbObjcetId一个ads_name 是 一个包含两个long型元素的数组这个数组的第一个元素就是AcDbObjcetId6.ads_name 和 AcDbObjcetId相互转换acdbGetAdsName(ads_name,objId);acdbGetObjectId(objId,ads_name);Object ARX18怎

16、样访问数据库对象?打开对象的方法:acdbOpenObject()该函数为模板函数,能打开任意对象acdbOpenAcDbObject()acdbOpenAcDbEntity()打开对象的模式:AcDb:kForRead/只读AcDb:kForWrite/可写AcDb:kForNotify/通知升级和降级访问:AcDbObject:upgradeOpen();/升级为写AcDbObject:downgradeOpen();/降级为读删除对象AcDbObject:erase()Object ARX19用事务方式访问 事务 AcTransaction*AcTransactionManager:st

17、artTransaction AcTransactionManager:endTransaction()AcTransactionManager:abortTransaction(),virtual Acad:ErrorStatus getObject(AcDbObject*&obj,AcDbObjectId objectId,AcDb:OpenMode mode,bool openErasedObject=false)Object ARX20对象访问限制 如果一个对象被写打开,则在关闭前不能再被读打开或写打开 如果一个对象被读打开,则在关闭前不能再被写打开,但可被读打开(一个对象最多可同时被

18、打开128次)Object ARX21对象类型识别desc():a static 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

19、 an object belongs to the specified 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 =AcDbLi

20、ne:cast(curEntity)Object ARX22AutoCAD里的交互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 points Point,angle acquisitionacedGetAngle used to get a angle val

21、ueacedGetPoint used to pick a pointacedGetCorner Entity selection acedEntSel used to select a single entityacedNEntSel used to select a single,nested entityacedNEntSelP used to select a single,nested entityacedSSGet used to select multiple entities Others acedGetKword used to get a key wordacedInitG

22、et used to initialize acedGetXXXX functionsacedGetFileD used to retrieve file selection from a file dialogObject ARX23向ACAD发送命令 acedCommand:立即执行 acedCommand(RTSTR,zoom,RTSTR,e,0);sendStringToExecute:作为下一个命令执行CString strCmd;strCmd.Format(_HNBMReservedAreaModified%d%d,(long)ReservedAreaHandle,nType);a

23、cDocManager-sendStringToExecute(acDocManager-curDocument(),strCmd,false,true,false);共同点:都不能执行有用户交互的命令Object ARX24WCS,UCS,OCS(ECS)规则:数据库中对象保存的点坐标是WCS坐标(建议);而一些acedXX函数(如acedGetPoint,acedEntSel等)、list命令一般是UCS坐标。WCS与UCS相互转换/UCS坐标系fromrb.restype=RTSHORT;fromrb.resval.rint=1;/WCS坐标系torb.restype=RTSHORT;t

24、orb.resval.rint=0;acedTrans(pt_ucs,&fromrb,&torb,FALSE,resultPt);acdbUcs2Wcs acdbWcs2Ucs AcDbEntity:getEcsObject ARX25UCS常用函数及类函数:Acad:ErrorStatus acedGetCurrentUCS(AcGeMatrix3d&mat);(以下函数和类可看作符号表的操作模式)函数:Acad:ErrorStatus getSymbolTable(AcDbUCSTable*&pTable,AcDb:OpenMode mode);类:AcDbUCSTable 类:AcDbU

25、CSTableRecord Object ARX26ARX应用向导 应用向导:ObjectARX 2006的在ObjectARX 2006utilsObjARXWiz目录下。功能:与MFC应用向导类似 产生工程 产生特定类及函数Object ARX27ARX,DBX加载/卸载 加载 ap(appload)arx 其它方式(lisp文件,注册表等)卸载 ap arxObject ARX28ARX软件结构 加载:On_kInitAppMsg 卸载:On_kUnloadAppMsg 命令映射(arx2006或以上):static void INTECAD_INTESelect(void)ACED_A

26、RXCOMMAND_ENTRY_AUTO(CINTECADApp,INTECAD,_INTESelect,INTESelect,ACRX_CMD_TRANSPARENT,NULL)Object ARX29ARX&MFCObjectARX 完全支持MFC。两个MFC基类 AdUi and AcUi。注意:在调用资源时加上这句话 CAcModuleResourceOverride resOverride;Object ARX30对话框资源转换,多个ARX时可能需要CAcModuleResourceOverride resOverride;或 AfxSetResourceHandle(_hdllIn

27、stance);AfxSetResourceHandle(acedGetAcadResourceInstance();Object ARX31菜单与工具条 通过菜单文件 COM方式添加Object ARX32例1:基本操作 建立应用程序 建立命令 实现功能:选中一实体,然后输出其信息Object ARX33例2:重复产生同半径的圆 对话框输入半径 用鼠标指定圆心Object ARX34数据库结构查看工具 ARXDBG工具的使用 位置:ObjectARX 2006samplesdatabaseARXDBG 文档:ArxDbg.docObject ARX35本节结束 下节将介绍自定义实体的内容Ob

28、ject ARX36自定义对象类 一般从 AcDbObject 或AcDbEntity派生 AcDbObject:不须显示,如字典对象 AcDbEntity:可显示/操作的实体 从其他(如AcDbLine等实体类)派生:根据需要 自定义类可继续从另一个自定义继承,从而继承体系成树状结构 编写时遵守一定的规则 放在DBX工程中Object ARX37自定义类特点 头文件 ACRX_DECLARE_MEMBERS ACDB_REGISTER_OBJECT_ENTRY_AUTO 版本 CPP文件 ACRX_DXF_DEFINE_MEMBERS AcDbProxyEntity:kNoOperation

29、 assertReadEnabled()与assertWriteEnabled();读写控制 显示刷新 UNO/REDOObject ARX38DBX加载/卸载 在ARX中调用 acrxLoadModule/acrxUnloadModule ARX在使用DBX的LIB库时,可能会出现诸如:acrxGetApiVersion找不到或ARX加载失败的问题.解决方法:在ARX和DBX工程中都增加def文件,文件内容如下:EXPORTSacrxEntryPointPRIVATEacrxGetApiVersion PRIVATEObject ARX39自定义对象-读入/写出 作用 文件(DWG,DXF)

30、读写 UNDO/REDO CLONE 函数 virtual Acad:ErrorStatus dwgInFields(AcDbDwgFiler*filer);virtual Acad:ErrorStatus dwgOutFields(AcDbDwgFiler*filer)const;virtual Acad:ErrorStatus dxfInFields(AcDbDxfFiler*filer);virtual Acad:ErrorStatus dxfOutFields(AcDbDxfFiler*filer)const;Object ARX40AcDbDwgFiler类中常用函数 virtual

31、 Acad:ErrorStatus readInt32(Adesk:Int32*)virtual Acad:ErrorStatus writeInt32(Adesk:Int32)virtual Acad:ErrorStatus readString(char*)virtual Acad:ErrorStatus writeString(const char*)virtual Acad:ErrorStatus readPoint3d(AcGePoint3d*)virtual Acad:ErrorStatus writePoint3d(const AcGePoint3d&)virtual Acad:

32、ErrorStatus readAcDbHandle(AcDbHandle*)virtual Acad:ErrorStatus writeAcDbHandle(const AcDbHandle&)virtual Acad:ErrorStatus readBytes(void*,Adesk:UInt32)virtual Acad:ErrorStatus writeBytes(const void*,Adesk:UInt32)读字符串char*str=NULL;pFiler-readString(&str);m_strPanelType=str;acutDelString(str);Object

33、ARX41自定义对象-显示函数:virtual Adesk:Boolean worldDraw(AcGiWorldDraw*mode);virtual void viewportDraw(AcGiViewportDraw*mode);区别 worldDraw函数用来生成跟视图无关的几何图形,它只生成一组几何图形,其他的因为视图的变化而导致的几何图形变化都由AutoCAD来自动调整,举个例子,你生成一个立方体,这个立方体从不同的角度看所看到的外形是不一样的,但是worldDraw只生成一个角度的几何图形,其他的都由AutoCAD来自动的调整了。viewportDraw则不同,它可以根据不同的视图

34、生成不同的几何图形,当你的视图改变的时候,它自动将几何图形调整到正确的状态。有时候这两个函数需要配合使用,例如,如果你画圆,那就可以用worldDraw,因为无论你怎么变换视图圆还是圆。但是如果你生成一些表示立体的几何图形有时候就需要借助于viewportDraw了,因为对于立体图形来说不同的视图看到的是不一样的。举个例子来说明其区别就是worldDraw画出来的立体图形,你改变了角度(也算viewport改变)后看到的有可能就不是立体图形了,但是你用viewportDraw画出来的就不会出现这样的问题。Object ARX42AcGiWorldDraw与AcGiViewportDraw 类似

35、,但AcGiViewportDraw有视口相关的矩阵和方向函数 通过geometry得到绘图类AcGiWorldGeometry 的对象 通过subEntityTraits得到环境设置类AcGiSubEntityTraits 对象Object ARX43AcGiWorldGeometry与AcGiGeometry circle circularArc Polyline(多段线)polygon text pline(多义线,类似于AcDbPolyline)Object ARX44AcGiSubEntityTraits 常用函数 virtual void setColor(const Adesk:

36、UInt16 color)=0;virtual void setTrueColor(const AcCmEntityColor&color)=0;virtual void setLayer(const AcDbObjectId layerId)=0;virtual void setLineType(const AcDbObjectId linetypeId)=0;virtual void setFillType(const AcGiFillType)=0;virtual void setLineWeight(const AcDb:LineWeight lw)=0;virtual void se

37、tLineTypeScale(double dScale=1.0)=0;注意 一个自定义对象的不同部分可分属不同层 是否填充只针对circle,polygon等封闭图形Object ARX45例1 自定义实体-读写/显示 生成一等边三角形的自定义实体 中心 外接圆半径 方位角Object ARX46自定义对象-夹点 virtual Acad:ErrorStatus getGripPoints(AcGePoint3dArray&gripPoints,AcDbIntArray&osnapModes,AcDbIntArray&geomIds)const;virtual Acad:ErrorStatu

38、s moveGripPointsAt(const AcDbIntArray&indices,const AcGeVector3d&offset);Object ARX47自定义对象-移动 virtual Acad:ErrorStatus transformBy(const AcGeMatrix3d&xform);Object ARX48自定义对象-拷贝 virtual Acad:ErrorStatus deepClone(AcDbObject*pOwnerObject,AcDbObject*&pClonedObject,AcDbIdMapping&idMap,Adesk:Boolean isP

39、rimary=true)const;virtual Acad:ErrorStatus wblockClone(AcRxObject*pOwnerObject,AcDbObject*&pClonedObject,AcDbIdMapping&idMap,Adesk:Boolean isPrimary=true)const;Object ARX49自定义对象-炸开 virtual Acad:ErrorStatus explode(AcDbVoidPtrArray&entitySet)const;Object ARX50自定义对象-捕捉点 virtual Acad:ErrorStatus getOsn

40、apPoints(AcDb:OsnapMode osnapMode,int gsSelectionMark,const AcGePoint3d&pickPoint,const AcGePoint3d&lastPoint,const AcGeMatrix3d&viewXform,AcGePoint3dArray&snapPoints,AcDbIntArray&geomIds)const;Object ARX51自定义对象-范围virtual Acad:ErrorStatus getGeomExtents(AcDbExtents&extents)const;Object ARX52自定义对象-li

41、st 作用:调试检查用.virtual void list()const;Object ARX53自定义对象-相交点 virtual Acad:ErrorStatus intersectWith(const AcDbEntity*pEnt,AcDb:Intersect intType,AcGePoint3dArray&points,int thisGsMarker=0,int otherGsMarker=0)const;Object ARX54自定义对象-sub事件virtual Acad:ErrorStatus subErase(Adesk:Boolean erasing);virtual

42、Acad:ErrorStatus subOpen(AcDb:OpenMode mode);virtual Acad:ErrorStatus subClose();Object ARX55理解拖动夹点与平移实体的工作方式 在拖动夹点时,ACAD调用自定义对象重载的moveGripPointsAt函数。但这时你要注意:此时的this指针指向的自定义对象A并非数据库中待修改的对象B,A只是ACAD复制的一个用于操作的临时对象,它的所有持久性(即保存到文件中的)参数与B相同,非持久性参数保持构造函数时的值。A并没有被加入到数据库中,所以在moveGripPointsAt不能通过database()函数

43、获取数据库指针;A中的参数没有累积性,即在moveGripPointsAt中更改了一个类成员变量m的值,下一次调用moveGripPointsAt时,m的值与B中m值相同,而不是修改过的值。transformBy与moveGripPointsAt类似。Object ARX56本节结束 下节将介绍自定义对象生成与编缉 双击修改 动态生成(Jig)属性页Object ARX57实体的双击修改在ARX工程中:从AcDbDoubleClickEdit派生并重载函数:virtual void startEdit(AcDbEntity*pEnt,AcGePoint3d pt);virtual void f

44、inishEdit(void);在On_kInitAppMsg中:if(!acrxDynamicLinker-loadModule(/*MSG0*/ACDBLCLKEDITPE.ARX,Adesk:kFalse)AfxMessageBox(ACDBLCLKEDITPE.ARX Load Failed);/Initialize Double Click EditingAcDbDoubleClickEdit:rxInit();acrxBuildClassHierarchy();TYTriangleDoubleClickEdit*pTriangleDoubleClickEdit=new TYTria

45、ngleDoubleClickEdit;TYTriangle:desc()-addX(AcDbDoubleClickEdit:desc(),pTriangleDoubleClickEdit);Object ARX58实体的双击修改 On_kUnloadAppMsg函数中:TYTriangle:desc()-delX(AcDbDoubleClickEdit:desc();startEdit函数 文档加锁 设置资源 显示对话框 修改实体 文档解锁Object ARX59例1:自定义实体的双击修改 可改:外接圆半径 填充Object ARX60动态创建 AcEdJig virtual DragSta

46、tus sampler();virtual Adesk:Boolean update();virtual AcDbEntity*entity()const;DragStatus drag();Object ARX61Object ARX62AcEdJIg中的用户输入函数 DragStatus acquireString(char*str);DragStatus acquireAngle(double&ang);DragStatus acquireAngle(double&ang,const AcGePoint3d&basePnt);DragStatus acquireDist(double&d

47、ist);DragStatus acquireDist(double&dist,const AcGePoint3d&basePnt);DragStatus acquirePoint(AcGePoint3d&);DragStatus acquirePoint(AcGePoint3d&,const AcGePoint3d&basePnt);注意:不能使用acedXXX函数Object ARX63AcEdJig:其它函数 const char*keywordList();void setKeywordList(const char*);const char*dispPrompt();void set

48、DispPrompt(const char*,.);AcEdJig:CursorType specialCursorType();void setSpecialCursorType(CursorType);AcEdJig:UserInputControls userInputControls();void setUserInputControls(AcEdJig:UserInputControls);Object ARX64例2:动态生成自定义实体 用向导生成或手工书写 向导生成的AcEdJig派生类有错:头文件中除去ACRX_DECLARE_MEMBERS CPP文件中除去ACRX_CONS

49、_DEFINE_MEMBERSObject ARX65练习 自定义实体 具有N条边的多边形 画出多边形及外接圆 可输入边数N和外接圆半径 动态创建 在创建过程中显示图形 在创建过程中显示并可修改尺寸(选作)双击修改Object ARX66属性页 优点:可批量修改多个实体的属性 操作步骤少 与ACAD的已有操作更加一致 缺点:实现有点复杂 用户操作习惯问题Object ARX67生成工程 标准ATL工程Object ARX68生成ATL类 派生 接口 IDL DBX中实体类中:头文件:static bool s_bHasClsid;static CLSID s_clsid;实现:initCLSI

50、D()getClassIDObject ARX69属性名称及分组 GetDisplayName GetCategoryName ShowPropertyObject ARX70预定义值 GetPredefinedStrings GetPredefinedValueObject ARX71显示对话框 MapPropertyToPage IOPMPropertyDialogObject ARX72字典 字典内可保存多个从AcDbObject派生的对象 可用于保存全局变量,选项设置Object ARX73AcDbDictionary*pNameDict;AcDbDictionary*pNameLis

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|