最新更新最新专题

您的位置:首页 > ppt下载 > PPT课件 > 培训教程PPT > objectarx视频教程培训PPT

objectarx视频教程培训PPT下载

素材大小:
229.5 KB
素材授权:
免费下载
素材格式:
.ppt
素材上传:
ppt
上传时间:
2016-04-02
素材编号:
51858
素材类别:
培训教程PPT

素材预览

objectarx视频教程培训PPT objectarx视频教程培训PPT

这是一个关于objectarx视频教程培训PPT(部分ppt内容已做更新升级),主要介绍了ObjectARX应用、ObjectARX概述、ObjectARX开发特点、ObjectARX类库构成等内容。培训是给新员工或现有员工传授其完成本职工作所必需的正确思维认知、基本知识和技能的过程。是一种有组织的知识传递、技能传递、标准传递、信息传递、管理训诫行为。其中以技能传递为主,侧重上岗前进行。为了达到统一的科学技术规范、标准化作业,通过目标规划设定知识和信息传递、技能熟练演练、作业达成评测、结果交流公告等现代信息化的流程,让员工通过一定的教育训练技术手段,达到预期的水平,提高目标。目前国内培训以技能传递为主,时间在侧重上岗前。

objectarx视频教程培训PPT是由红软PPT免费下载网推荐的一款培训教程PPT类型的PowerPoint.

ObjectARX TrainingqQn红软基地
华中科技大学CAD中心qQn红软基地
武汉天喻软件有限责任公司qQn红软基地
2010年2月qQn红软基地
ObjectARX应用的介绍qQn红软基地
ObjectARX是一个仅在AutoCAD上进行二次开发的一套开发环境,通俗点讲就是一系列的APIqQn红软基地
ObjectARX的应用举例:qQn红软基地
扩展AutoCAD功能qQn红软基地
为各种工程设计开发便利的工具qQn红软基地
ObjectARX概述qQn红软基地
ARX——AutoCAD Runtime eXtensionqQn红软基地
DBX ——DataBase eXtensionqQn红软基地
ARX = .DLL + 2 exported functionsqQn红软基地
{ acrxEntryPoint & acrxGetApiVersion }qQn红软基地
ObjectARX开发特点qQn红软基地
不同的ACAD版本用不同的开发包及开发环境qQn红软基地
ACAD2000~ACAD2002 : VC++ 6.0qQn红软基地
ACAD2004~ACAD2006 : VS.NET 2002qQn红软基地
ACAD2007~ACAD2009 : VS.NET 2005qQn红软基地
ACAD2010~       :  VS.NET 2008qQn红软基地
ACAD2007开始字符串采用UNICODE编码qQn红软基地
ARX之间不能连续依赖qQn红软基地
A.arx依赖B.arx, B.arx依赖C.dbx,则A.arx不能加载qQn红软基地
与ACAD已有功能地位一致qQn红软基地
ObjectARX类库构成qQn红软基地
AcRx:用于帮定一个应用程序以及运行类的注册和识别。qQn红软基地
AcEd:用于注册自定义命令和AutoCAD事件通告。qQn红软基地
AcDb:AutoCAD图形数据库。qQn红软基地
AcGi: 用于AutoCAD 的图形类。qQn红软基地
AcGe:用于AutoCAD 的线型和几何对象通用类。qQn红软基地
ADS: AutoCAD 的早期版本C语言函数库。qQn红软基地
ObjectARX类结构qQn红软基地
类图classmap.dwgqQn红软基地
位置:\ObjectARX 2006\classmapqQn红软基地
用ObjectARX能做些什么?qQn红软基地
访问、编辑和扩展AutoCAD图形数据库qQn红软基地
和AutoCAD系统相互通信qQn红软基地
使用MFC创建用户接口qQn红软基地
支持多文档应用qQn红软基地
创建自定义类和自定义实体qQn红软基地
可以开发复杂的应用qQn红软基地
和其他开发环境进行协作qQn红软基地
培训安排-1qQn红软基地
一、基础qQn红软基地
AUTOCAD数据库结构及操作,ads_name-句柄-ID及转换,aced常用函数,WCS/UCS及转换,菜单/工具条/对话框制作qQn红软基地
二、自定义对象qQn红软基地
显示/存储/夹点/移动/拷贝/范围/list/捕捉点/炸开/相交点/sub事件qQn红软基地
三、自定义对象生成与编缉qQn红软基地
双击修改/Jig/属性页qQn红软基地
培训安排-2qQn红软基地
四、一些重要对象qQn红软基地
字典/层/线型/字体样式qQn红软基地
五、扩展数据qQn红软基地
六、反应器qQn红软基地
八、总结qQn红软基地
所需基础qQn红软基地
ACAD基本操作qQn红软基地
C++qQn红软基地
VCqQn红软基地
MFC(界面)qQn红软基地
COM(属性页等)qQn红软基地
STL(提高效率)qQn红软基地
AutoCAD图形数据库概述qQn红软基地
AutoCAD图形实际上是一系列存放在一个AcDbDatabase类型的对象中的AcDb对象。qQn红软基地
一个dwg就是一个数据库qQn红软基地
具备数据库的基本组织结构。qQn红软基地
包括九个符号表和一个命名对象词典qQn红软基地
AutoCAD图形数据库结构qQn红软基地
AcDbDatabase数据库qQn红软基地
       |------AcDb符号表qQn红软基地
       |        |------块表(AcDbBlockTable)qQn红软基地
       |        |------尺寸标注样式表(AcDbDimStyleTable)qQn红软基地
       |        |------层表(AcDbLayerTable)qQn红软基地
       |        |------线型表(AcDbLinetypeTable)qQn红软基地
       |        |------已注册应用程序表(AcDbRegAppTable)qQn红软基地
       |        |------字体样式表(AcDbTextStyleTable)qQn红软基地
       |        |------用户坐标系表(AcDbUCSTable)qQn红软基地
       |        |------视口表(AcDbViewportTable)qQn红软基地
       |        |------视图表(AcDbViewTable)qQn红软基地
       |-------命名对象词典qQn红软基地
访问:AcDbDatabase::getSymbolTableqQn红软基地
向数据库中添加实体 qQn红软基地
Acad::ErrorStatus addEntityToModelSpace(AcDbEntity * pEnt, AcDbObjectId & EntId)qQn红软基地
{qQn红软基地
 Acad::ErrorStatus eRet;qQn红软基地
AcDbDatabase * pDb = acdbHostApplicationServices()->workingDatabase();qQn红软基地
 AcDbBlockTable *pBlockTable;qQn红软基地
 eRet = pDb->getBlockTable(pBlockTable, AcDb::kForRead);qQn红软基地
 if ( eRet != Acad::eOk)qQn红软基地
 {qQn红软基地
  return eRet;qQn红软基地
 }qQn红软基地
 AcDbBlockTableRecord *pBlockTableRecord;qQn红软基地
 eRet = pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);qQn红软基地
 if ( eRet != Acad::eOk)qQn红软基地
 {qQn红软基地
  pBlockTable->close();qQn红软基地
  return eRet;qQn红软基地
 }qQn红软基地
 pBlockTable->close();qQn红软基地
 eRet = pBlockTableRecord->appendAcDbEntity(EntId, pEnt);qQn红软基地
 if ( eRet != Acad::eOk)qQn红软基地
 {qQn红软基地
  pBlockTableRecord->close();qQn红软基地
  return eRet;qQn红软基地
 }qQn红软基地
 pBlockTableRecord->close();qQn红软基地
 return Acad::eOk;qQn红软基地
}qQn红软基地
怎样遍历AutoCAD图形数据库?qQn红软基地
void FindObjectId(AcDbObjectId & objId)qQn红软基地
{qQn红软基地
AcDbDatabase * pDb = acdbHostApplicationServices()->workingDatabase();qQn红软基地
 AcDbBlockTable *pBlockTable;qQn红软基地
 pDb->getBlockTable(pBlockTable, AcDb::kForRead);qQn红软基地
 AcDbBlockTableRecord *pBlockTableRecord;qQn红软基地
 pBlockTable->getAt(ACDB_MODEL_SPACE,  pBlockTableRecord, AcDb:: kForRead);qQn红软基地
 pBlockTable->close();qQn红软基地
 AcDbBlockTableRecordIterator *pIter;qQn红软基地
  pBlockTableRecord- >newIterator(pIter); // Create an iteratorqQn红软基地
 for (pIter->start(); !pIter->done(); pIter->step())qQn红软基地
            {qQn红软基地
               ….........qQn红软基地
               AcDbEntity *pEntity;qQn红软基地
     if (pIter->getEntity(pEntity, AcDb::kForRead) != Acad::eOk)   continue;qQn红软基地
               If(pEntity->isKindOf(AcDbCircle::desc())   objId = pEntity->ObjectId();qQn红软基地
           }qQn红软基地
 pBlockTableRecord- >close();qQn红软基地
}qQn红软基地
怎样创建和使用已有的AutoCAD图形数据库?qQn红软基地
要使用AcDbDatabase数据库,与使用其它数据库一样,首先要声明一个数据库对象。AcDbDatabase类的声明,调用类的构造函数:qQn红软基地
AcDbDatabase ::AcDbDatabase(bool buildDefaultDrawing = true, bool noDocument = false);qQn红软基地
其中,buildDefaultDrawing参数控制是否创建一个包括所有默认数据记录的数据库。qQn红软基地
该参数的默认值为true,这样在AcDbDatabase数据库创建时,将在新建的数据库中包含一个AutoCAD图形数据库必须包含的基本数据要素,这些要素包括九个符号表及其初始记录(比如0层、STANDARD文字样式等),命名对象词典(组词典和多线样式词典)以及必要的系统变量设置。这样就可以向新建的数据库中添加各种实体和对象。如:AcDbDatabase *pDb= new AcDbDatabase(true);qQn红软基地
若指定该参数为false,AutoCAD将创建一个完全空的AcDbDatabase数据库。这样的AcDbDatabase数据库不能直接向其中添加实体或对象,需读入一个图形文件来拓展该图形数据库,然后再逐步添加或修改数据库中的实体或对象。qQn红软基地
读入图形数据库使用函数:AcadErrorStatus AcDbDatabase::readDwgFile(const char* fileName );qQn红软基地
若要使用已有的图形,比如“test.dwg”文件,则使用下列代码:qQn红软基地
AcDbDatabase *pDb= new AcDbDatabase(false);qQn红软基地
pDb->readDwgFile(“test.dwg”);qQn红软基地
AcDbDatabase构造函数的noDocument参数控制打开的数据库是否与当前文档关联,此参数用于“多文档处理”中。qQn红软基地
注意:在这种情况下,AcDbdatabase()的参数必须指定为false(当然,0或者Adesk::kFalse都可以)。因为使用pDb->readDwgFile()函数时,pDb必须是一个完全空白的数据库,也就是说,哪怕使用了AcDbDatabase(false);新建数据库后,只要对数据库进行了操作,就不能再使用readDwgFile()函数,否则会导致严重的内存错误。qQn红软基地
数据库对象AcDbObject概述qQn红软基地
每一个数据库对象具有以下三种表示方法:qQn红软基地
句柄 ——  AcDbHandleqQn红软基地
对象id ——  AcDbObjectIdqQn红软基地
指针 ——  AcDbObect *qQn红软基地
三者之间的相互关系qQn红软基地
之间相互关系和转换qQn红软基地
1. AcDbHandle -> AcDbObjectIdqQn红软基地
AcDbDatabase ::getAcDbObjectId(&AcDbObjectId ,FALSE, AcDbHandle );qQn红软基地
2. AcDbObjectId -> AcDbHandleqQn红软基地
AcDbHandle  = AcDbObjectId::handle ();qQn红软基地
3.AcDbObjectId -> AcDbObject *qQn红软基地
acdbOpenObject(AcDbObject *&,AcDbObjectId,AcDb::OpenMode);qQn红软基地
4.AcDbObject * -> AcDbHandle qQn红软基地
AcDbHandle  = AcDbObject::getAcDbHandle();qQn红软基地
5.ads_name 和 AcDbObjcetIdqQn红软基地
一个ads_name 是 一个包含两个long型元素的数组qQn红软基地
这个数组的第一个元素就是AcDbObjcetIdqQn红软基地
6. ads_name 和 AcDbObjcetId相互转换qQn红软基地
acdbGetAdsName(ads_name, objId);qQn红软基地
acdbGetObjectId(objId, ads_name);qQn红软基地
怎样访问数据库对象?qQn红软基地
打开对象的方法:qQn红软基地
acdbOpenObject() 该函数为模板函数,能打开任意对象qQn红软基地
acdbOpenAcDbObject()qQn红软基地
acdbOpenAcDbEntity()qQn红软基地
打开对象的模式:qQn红软基地
AcDb::kForRead //只读qQn红软基地
AcDb::kForWrite //可写qQn红软基地
AcDb::kForNotify //通知qQn红软基地
升级和降级访问:qQn红软基地
AcDbObject::upgradeOpen();  //升级为写qQn红软基地
AcDbObject::downgradeOpen(); //降级为读qQn红软基地
删除对象qQn红软基地
AcDbObject::erase()qQn红软基地
用事务方式访问qQn红软基地
事务qQn红软基地
AcTransaction * AcTransactionManager::startTransaction qQn红软基地
AcTransactionManager::endTransaction() qQn红软基地
AcTransactionManager::abortTransaction(),qQn红软基地
virtual Acad::ErrorStatus getObject(AcDbObject*& obj, AcDbObjectId objectId, AcDb::OpenMode mode, bool openErasedObject = false)qQn红软基地
对象访问限制qQn红软基地
如果一个对象被写打开,则在关闭前不能再被读打开或写打开qQn红软基地
如果一个对象被读打开,则在关闭前不能再被写打开,但可被读打开(一个对象最多可同时被打开128次)qQn红软基地
对象类型识别 qQn红软基地
desc():qQn红软基地
a static member function that returns the class descriptor object of a particular (known) class.qQn红软基地
cast():qQn红软基地
 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). qQn红软基地
isKindOf():qQn红软基地
returns whether an object belongs to the specified class (or a derived class). qQn红软基地
isA():qQn红软基地
 returns the class descriptor object of an object whose class is unknown.qQn红软基地
AcRxClassqQn红软基地
例如:qQn红软基地
AcDbEntity* curEntity = somehowGetAndOpenAnEntity();qQn红软基地
if (curEntity->isKindOf(AcDbEllipse::desc())) { }qQn红软基地
If(curEntity->isA() == AcDbEllipse::desc()){ } qQn红软基地
AcDbLine * pLine  = AcDbLine ::cast(curEntity )qQn红软基地
AutoCAD里的交互qQn红软基地
AcEd 全局函数qQn红软基地
String, number acquisitionqQn红软基地
 acedGetInt        used to get an integer value acedGetReal       used to get a real value acedGetString     used to get a string acedGetDist       used to get the distance between two pointsqQn红软基地
Point, angle acquisitionqQn红软基地
 acedGetAngle      used to get a angle value acedGetPoint      used to pick a point acedGetCornerqQn红软基地
Entity selectionqQn红软基地
acedEntSel       used to select a single entity acedNEntSel      used to select a single, nested entity acedNEntSelP     used to select a single, nested entity acedSSGet        used to select multiple entitiesqQn红软基地
OthersqQn红软基地
acedGetKword      used to get a key word acedInitGet       used to initialize acedGetXXXX functions acedGetFileD      used to retrieve file selection from a file dialogqQn红软基地
向ACAD发送命令qQn红软基地
acedCommand:立即执行qQn红软基地
acedCommand(RTSTR, "zoom", RTSTR, "e", 0);qQn红软基地
sendStringToExecute:作为下一个命令执行qQn红软基地
 CString strCmd;qQn红软基地
 strCmd.Format("_HNBMReservedAreaModified %d %d ", (long)ReservedAreaHandle, nType);qQn红软基地
 acDocManager->sendStringToExecute(acDocManager->curDocument(), strCmd, false, true, false);qQn红软基地
共同点:都不能执行有用户交互的命令qQn红软基地
WCS,UCS,OCS(ECS)qQn红软基地
规则:数据库中对象保存的点坐标是WCS坐标(建议);而一些acedXX函数(如acedGetPoint,acedEntSel等)、list命令一般是UCS坐标。qQn红软基地
WCS与UCS相互转换qQn红软基地
 //UCS坐标系qQn红软基地
 fromrb.restype = RTSHORT;qQn红软基地
 fromrb.resval.rint = 1;qQn红软基地
 //WCS坐标系qQn红软基地
 torb.restype = RTSHORT;qQn红软基地
 torb.resval.rint = 0;qQn红软基地
 acedTrans(pt_ucs,&fromrb,&torb,FALSE,resultPt);qQn红软基地
acdbUcs2Wcs qQn红软基地
acdbWcs2Ucs qQn红软基地
AcDbEntity::getEcsqQn红软基地
UCS常用函数及类qQn红软基地
函数:Acad::ErrorStatus acedGetCurrentUCS(AcGeMatrix3d& mat);qQn红软基地
(以下函数和类可看作符号表的操作模式)qQn红软基地
函数:Acad::ErrorStatus getSymbolTable(AcDbUCSTable*& pTable,AcDb::OpenMode mode);qQn红软基地
类:AcDbUCSTableqQn红软基地
类:AcDbUCSTableRecordqQn红软基地
ARX应用向导qQn红软基地
应用向导:ObjectARX 2006的在\ObjectARX 2006\utils\ObjARXWiz目录下。qQn红软基地
功能:与MFC应用向导类似qQn红软基地
产生工程qQn红软基地
产生特定类及函数qQn红软基地
ARX,DBX加载/卸载qQn红软基地
加载qQn红软基地
ap(appload)qQn红软基地
arxqQn红软基地
其它方式(lisp文件,注册表等)qQn红软基地
卸载qQn红软基地
apqQn红软基地
arxqQn红软基地
ARX软件结构qQn红软基地
加载:On_kInitAppMsgqQn红软基地
卸载:On_kUnloadAppMsgqQn红软基地
命令映射(arx2006或以上):qQn红软基地
 static void INTECAD_INTESelect(void)qQn红软基地
 {qQn红软基地
 }qQn红软基地
ACED_ARXCOMMAND_ENTRY_AUTO(CINTECADApp, INTECAD, _INTESelect, INTESelect, ACRX_CMD_TRANSPARENT, NULL)qQn红软基地
ARX & MFCqQn红软基地
ObjectARX 完全支持MFC。qQn红软基地
两个MFC基类 AdUi and AcUi。qQn红软基地
注意:在调用资源时加上这句话 CAcModuleResourceOverride resOverride;qQn红软基地
对话框qQn红软基地
资源转换,多个ARX时可能需要qQn红软基地
CAcModuleResourceOverride resOverride;qQn红软基地
qQn红软基地
AfxSetResourceHandle (_hdllInstance) ;qQn红软基地
AfxSetResourceHandle (acedGetAcadResourceInstance ()) ;qQn红软基地
菜单与工具条qQn红软基地
通过菜单文件qQn红软基地
COM方式添加qQn红软基地
例1:基本操作qQn红软基地
建立应用程序qQn红软基地
建立命令qQn红软基地
实现功能:选中一实体,然后输出其信息qQn红软基地
例2:重复产生同半径的圆qQn红软基地
对话框输入半径qQn红软基地
用鼠标指定圆心qQn红软基地
数据库结构查看工具qQn红软基地
ARXDBG工具的使用qQn红软基地
位置:\ObjectARX 2006\samples\database\ARXDBGqQn红软基地
文档:ArxDbg.docqQn红软基地
本节结束qQn红软基地
下节将介绍自定义实体的内容qQn红软基地
自定义对象类qQn红软基地
一般从 AcDbObject 或AcDbEntity派生qQn红软基地
AcDbObject:不须显示,如字典对象qQn红软基地
AcDbEntity:可显示/操作的实体qQn红软基地
从其他(如AcDbLine等实体类)派生:根据需要qQn红软基地
自定义类可继续从另一个自定义继承,从而继承体系成树状结构qQn红软基地
编写时遵守一定的规则qQn红软基地
放在DBX工程中qQn红软基地
自定义类特点qQn红软基地
头文件qQn红软基地
ACRX_DECLARE_MEMBERSqQn红软基地
ACDB_REGISTER_OBJECT_ENTRY_AUTOqQn红软基地
版本qQn红软基地
CPP文件qQn红软基地
ACRX_DXF_DEFINE_MEMBERSqQn红软基地
AcDbProxyEntity::kNoOperationqQn红软基地
assertReadEnabled ()与assertWriteEnabled () ;qQn红软基地
读写控制qQn红软基地
显示刷新qQn红软基地
UNO/REDOqQn红软基地
DBX加载/卸载qQn红软基地
在ARX中调用qQn红软基地
acrxLoadModule/acrxUnloadModuleqQn红软基地
ARX在使用DBX的LIB库时,可能会出现诸如:acrxGetApiVersion找不到或ARX加载失败的问题.解决方法:qQn红软基地
在ARX和DBX工程中都增加def文件,文件内容如下:qQn红软基地
EXPORTSqQn红软基地
 acrxEntryPoint  PRIVATEqQn红软基地
 acrxGetApiVersion PRIVATEqQn红软基地
自定义对象-读入/写出qQn红软基地
作用qQn红软基地
文件(DWG,DXF)读写qQn红软基地
UNDO/REDOqQn红软基地
CLONEqQn红软基地
函数qQn红软基地
virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer);qQn红软基地
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* filer) const;qQn红软基地
virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* filer);qQn红软基地
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;qQn红软基地
AcDbDwgFilerqQn红软基地
类中常用函数qQn红软基地
 virtual Acad::ErrorStatus   readInt32(Adesk::Int32*) qQn红软基地
    virtual Acad::ErrorStatus   writeInt32(Adesk::Int32)qQn红软基地
 virtual Acad::ErrorStatus   readString(char**) qQn红软基地
virtual Acad::ErrorStatus   writeString(const char*)qQn红软基地
 virtual Acad::ErrorStatus   readPoint3d(AcGePoint3d*)qQn红软基地
    virtual Acad::ErrorStatus   writePoint3d(const AcGePoint3d&)qQn红软基地
 virtual Acad::ErrorStatus   readAcDbHandle(AcDbHandle*)qQn红软基地
    virtual Acad::ErrorStatus   writeAcDbHandle(const AcDbHandle&)qQn红软基地
 virtual Acad::ErrorStatus   readBytes(void *, Adesk::UInt32)qQn红软基地
    virtual Acad::ErrorStatus   writeBytes(const void *, Adesk::UInt32)qQn红软基地
读字符串qQn红软基地
 char *str=NULL;qQn红软基地
 pFiler->readString(&str);qQn红软基地
 m_strPanelType=str;qQn红软基地
 acutDelString(str);qQn红软基地
自定义对象-显示qQn红软基地
函数:qQn红软基地
virtual Adesk::Boolean worldDraw( AcGiWorldDraw* mode);qQn红软基地
virtual void viewportDraw(AcGiViewportDraw* mode);qQn红软基地
区别qQn红软基地
worldDraw函数用来生成跟视图无关的几何图形,它只生成一组几何图形,其他的因为视图的变化而导致的几何图形变化都由AutoCAD来自动调整,举个例子,你生成一个立方体,这个立方体从不同的角度看所看到的外形是不一样的,但是worldDraw只生成一个角度的几何图形,其他的都由AutoCAD来自动的调整了。qQn红软基地
viewportDraw则不同,它可以根据不同的视图生成不同的几何图形,当你的视图改变的时候,它自动将几何图形调整到正确的状态。有时候这两个函数需要配合使用,例如,如果你画圆,那就可以用worldDraw,因为无论你怎么变换视图圆还是圆。但是如果你生成一些表示立体的几何图形有时候就需要借助于viewportDraw了,因为对于立体图形来说不同的视图看到的是不一样的。 举个例子来说明其区别就是worldDraw画出来的立体图形,你改变了角度(也算viewport改变)后看到的有可能就不是立体图形了,但是你用viewportDraw画出来的就不会出现这样的问题。qQn红软基地
AcGiWorldDraw与AcGiViewportDrawqQn红软基地
类似,但AcGiViewportDraw有视口相关的矩阵和方向函数qQn红软基地
通过geometry得到绘图类AcGiWorldGeometry 的对象qQn红软基地
通过subEntityTraits得到环境设置类AcGiSubEntityTraits 对象qQn红软基地
AcGiWorldGeometry与AcGiGeometryqQn红软基地
circleqQn红软基地
circularArcqQn红软基地
Polyline(多段线)qQn红软基地
polygonqQn红软基地
textqQn红软基地
pline(多义线,类似于AcDbPolyline)qQn红软基地
AcGiSubEntityTraitsqQn红软基地
常用函数qQn红软基地
 virtual void setColor(const Adesk::UInt16 color) = 0;qQn红软基地
 virtual void setTrueColor(const AcCmEntityColor& color) = 0;qQn红软基地
 virtual void setLayer(const AcDbObjectId layerId) = 0;qQn红软基地
 virtual void setLineType(const AcDbObjectId linetypeId) = 0;qQn红软基地
virtual void setFillType(const AcGiFillType) = 0;qQn红软基地
virtual void setLineWeight(const AcDb::LineWeight lw) = 0;qQn红软基地
virtual void setLineTypeScale(double dScale = 1.0) = 0;qQn红软基地
注意qQn红软基地
一个自定义对象的不同部分可分属不同层qQn红软基地
是否填充只针对circle,polygon等封闭图形qQn红软基地
例1 自定义实体-读写/显示qQn红软基地
生成一等边三角形的自定义实体qQn红软基地
中心qQn红软基地
外接圆半径qQn红软基地
方位角qQn红软基地
自定义对象-夹点qQn红软基地
virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const;qQn红软基地
virtual Acad::ErrorStatus moveGripPointsAt( const AcDbIntArray& indices, const AcGeVector3d& offset);qQn红软基地
自定义对象-移动qQn红软基地
virtual Acad::ErrorStatus transformBy( const AcGeMatrix3d& xform);qQn红软基地
自定义对象-拷贝qQn红软基地
virtual Acad::ErrorStatus deepClone(AcDbObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true) const;qQn红软基地
virtual Acad::ErrorStatus wblockClone(AcRxObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true) const;qQn红软基地
自定义对象-炸开qQn红软基地
virtual Acad::ErrorStatus explode(AcDbVoidPtrArray& entitySet) const;qQn红软基地
自定义对象-捕捉点qQn红软基地
virtual Acad::ErrorStatus getOsnapPoints( AcDb::OsnapMode osnapMode, int gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const;qQn红软基地
自定义对象-范围qQn红软基地
 virtual Acad::ErrorStatus getGeomExtents(AcDbExtents& extents) const;qQn红软基地
自定义对象-listqQn红软基地
作用:调试检查用.qQn红软基地
virtual void list() const;qQn红软基地
自定义对象-相交点qQn红软基地
virtual Acad::ErrorStatus intersectWith(const AcDbEntity* pEnt,AcDb::Intersect intType,AcGePoint3dArray& points,int thisGsMarker = 0,int otherGsMarker = 0) const;qQn红软基地
自定义对象- sub事件qQn红软基地
 virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing);qQn红软基地
 virtual Acad::ErrorStatus subOpen(AcDb::OpenMode mode);qQn红软基地
 virtual Acad::ErrorStatus subClose();qQn红软基地
理解拖动夹点与平移实体的工作方式qQn红软基地
在拖动夹点时,ACAD调用自定义对象重载的moveGripPointsAt函数。但这时你要注意:此时的this指针指向的自定义对象A并非数据库中待修改的对象B,A只是ACAD复制的一个用于操作的临时对象,它的所有持久性(即保存到文件中的)参数与B相同,非持久性参数保持构造函数时的值。A并没有被加入到数据库中,所以在moveGripPointsAt不能通过database()函数获取数据库指针;A中的参数没有累积性,即在moveGripPointsAt中更改了一个类成员变量m的值,下一次调用moveGripPointsAt时,m的值与B中m值相同,而不是修改过的值。qQn红软基地
transformBy与moveGripPointsAt类似。qQn红软基地
本节结束qQn红软基地
下节将介绍自定义对象生成与编缉qQn红软基地
双击修改qQn红软基地
动态生成(Jig)qQn红软基地
属性页qQn红软基地
实体的双击修改qQn红软基地
在ARX工程中:从AcDbDoubleClickEdit派生并重载函数:qQn红软基地
 virtual void startEdit(AcDbEntity *pEnt, AcGePoint3d pt); qQn红软基地
 virtual void finishEdit(void);qQn红软基地
在On_kInitAppMsg中:qQn红软基地
if(!acrxDynamicLinker->loadModule(/*MSG0*/"ACDBLCLKEDITPE.ARX",Adesk::kFalse)) qQn红软基地
 {qQn红软基地
    AfxMessageBox("'ACDBLCLKEDITPE.ARX' Load Failed");qQn红软基地
 }qQn红软基地
 // Initialize Double Click EditingqQn红软基地
 AcDbDoubleClickEdit::rxInit();qQn红软基地
 acrxBuildClassHierarchy();qQn红软基地
 TYTriangleDoubleClickEdit *pTriangleDoubleClickEdit=new TYTriangleDoubleClickEdit;qQn红软基地
 TYTriangle::desc()->addX(AcDbDoubleClickEdit::desc(),pTriangleDoubleClickEdit);qQn红软基地
实体的双击修改qQn红软基地
On_kUnloadAppMsg函数中:qQn红软基地
TYTriangle::desc()->delX(AcDbDoubleClickEdit::desc());qQn红软基地
startEdit函数qQn红软基地
文档加锁qQn红软基地
设置资源qQn红软基地
显示对话框qQn红软基地
修改实体qQn红软基地
文档解锁qQn红软基地
例1:自定义实体的双击修改qQn红软基地
可改:qQn红软基地
外接圆半径qQn红软基地
填充qQn红软基地
动态创建qQn红软基地
AcEdJigqQn红软基地
 virtual DragStatus sampler () ;qQn红软基地
 virtual Adesk::Boolean update () ;qQn红软基地
 virtual AcDbEntity *entity () const ;qQn红软基地
DragStatus drag();qQn红软基地
AcEdJIg中的用户输入函数qQn红软基地
 DragStatus acquireString(char *str);qQn红软基地
    DragStatus acquireAngle(double &ang);qQn红软基地
    DragStatus acquireAngle(double &ang, const AcGePoint3d& basePnt);qQn红软基地
    DragStatus acquireDist(double &dist);qQn红软基地
    DragStatus acquireDist(double &dist, const AcGePoint3d& basePnt);qQn红软基地
    DragStatus acquirePoint(AcGePoint3d&);qQn红软基地
    DragStatus acquirePoint(AcGePoint3d&, const AcGePoint3d&basePnt);qQn红软基地
注意:不能使用acedXXX函数qQn红软基地
AcEdJig:其它函数qQn红软基地
const char* keywordList();qQn红软基地
void  setKeywordList(const char*);qQn红软基地
const char* dispPrompt();qQn红软基地
void setDispPrompt(const char*, ...);qQn红软基地
AcEdJig::CursorType specialCursorType();qQn红软基地
void  setSpecialCursorType(CursorType);qQn红软基地
AcEdJig::UserInputControls userInputControls();qQn红软基地
void setUserInputControls(AcEdJig::UserInputControls);qQn红软基地
例2:动态生成自定义实体qQn红软基地
用向导生成或手工书写qQn红软基地
向导生成的AcEdJig派生类有错:qQn红软基地
头文件中除去ACRX_DECLARE_MEMBERSqQn红软基地
CPP文件中除去ACRX_CONS_DEFINE_MEMBERSqQn红软基地
练习qQn红软基地
自定义实体qQn红软基地
具有N条边的多边形qQn红软基地
画出多边形及外接圆qQn红软基地
可输入边数N和外接圆半径qQn红软基地
动态创建qQn红软基地
在创建过程中显示图形qQn红软基地
在创建过程中显示并可修改尺寸(选作)qQn红软基地
双击修改qQn红软基地
属性页qQn红软基地
优点:qQn红软基地
可批量修改多个实体的属性qQn红软基地
操作步骤少qQn红软基地
与ACAD的已有操作更加一致qQn红软基地
缺点:qQn红软基地
实现有点复杂qQn红软基地
用户操作习惯问题qQn红软基地
生成工程qQn红软基地
标准ATL工程qQn红软基地
生成ATL类qQn红软基地
派生qQn红软基地
接口qQn红软基地
IDLqQn红软基地
DBX中实体类中:qQn红软基地
头文件: qQn红软基地
static bool   s_bHasClsid;qQn红软基地
static CLSID  s_clsid;qQn红软基地
实现:qQn红软基地
initCLSID()qQn红软基地
getClassIDqQn红软基地
属性名称及分组qQn红软基地
GetDisplayNameqQn红软基地
GetCategoryNameqQn红软基地
ShowPropertyqQn红软基地
预定义值qQn红软基地
GetPredefinedStringsqQn红软基地
GetPredefinedValueqQn红软基地
显示对话框qQn红软基地
MapPropertyToPageqQn红软基地
IOPMPropertyDialogqQn红软基地
字典qQn红软基地
字典内可保存多个从AcDbObject派生的对象qQn红软基地
可用于保存全局变量,选项设置qQn红软基地
AcDbDictionary *pNameDict;qQn红软基地
 AcDbDictionary *pNameList;qQn红软基地
 pDb->getNamedObjectsDictionary(pNameDict,AcDb::kForWrite);qQn红软基地
 if (pNameDict->getAt("TYSOFTHNBMCAD_DICT",(AcDbObject*&)pNameList, AcDb::kForWrite) == Acad::eKeyNotFound)qQn红软基地
 {qQn红软基地
  pNameList = new AcDbDictionary;qQn红软基地
  AcDbObjectId DictId;qQn红软基地
  pNameDict->setAt("TYSOFTHNBMCAD_DICT", pNameList, DictId);qQn红软基地
}qQn红软基地
 pNameDict->close();qQn红软基地
 ///打开或创建控制信息对象qQn红软基地
 AcDbObjectId objId;qQn红软基地
 HNBMDictItem *pDictItem;qQn红软基地
 if((pNameList->getAt("TYSOFTHNBMCAD_DICT_ITEM", objId))qQn红软基地
  == Acad::eKeyNotFound)qQn红软基地
 {qQn红软基地
  pDictItem = new HNBMDictItem;qQn红软基地
  Acad::ErrorStatus err=pNameList->setAt("TYSOFTHNBMCAD_DICT_ITEM", pDictItem, objId);qQn红软基地
  if(err!=Acad::eOk)qQn红软基地
  {qQn红软基地
   acutPrintf("\nerror in set archinfo!");qQn红软基地
   delete pDictItem;qQn红软基地
   pNameList->close();qQn红软基地
   return;qQn红软基地
  }qQn红软基地
  pDictItem->close();qQn红软基地
 } qQn红软基地
 pNameList->close();qQn红软基地
AcDbDictionary *pNameDict;qQn红软基地
 AcDbDictionary *pNameList;qQn红软基地
 pDb->getNamedObjectsDictionary(pNameDict,AcDb::kForRead);qQn红软基地
if (pNameDict->getAt("TYSOFTHNBMCAD_DICT",(AcDbObject*&)pNameList, qQn红软基地
  AcDb::kForRead) == Acad::eKeyNotFound)qQn红软基地
 {qQn红软基地
  pNameDict->close();qQn红软基地
  return NULL;qQn红软基地
 }qQn红软基地
 pNameDict->close();qQn红软基地
AcDbObjectId objId;qQn红软基地
 HNBMDictItem *pDictItem;qQn红软基地
 if((pNameList->getAt("TYSOFTHNBMCAD_DICT_ITEM", objId))== Acad::eKeyNotFound)qQn红软基地
 {qQn红软基地
  pNameList->close();qQn红软基地
  return NULL;qQn红软基地
 } qQn红软基地
 pNameList->close();qQn红软基地
if (acdbOpenObject((AcDbObject*&)pDictItem, objId,AcDb::kForRead) == Acad::eOk)qQn红软基地
 {qQn红软基地
  return pDictItem;qQn红软基地
 }qQn红软基地
qQn红软基地
 AcDbLayerTable *pLayerTable;qQn红软基地
 es=pDB->getSymbolTable(pLayerTable, AcDb::kForWrite);qQn红软基地
 if(es!=Acad::eOk)qQn红软基地
 {qQn红软基地
  pLinetypeTable->close();qQn红软基地
  return;qQn红软基地
 }qQn红软基地
 if(!pLayerTable->has("木作线(RoomLine)"))qQn红软基地
 {qQn红软基地
  pLayerTableRecord =new AcDbLayerTableRecord;qQn红软基地
  pLayerTableRecord->setName("木作线(RoomLine)");qQn红软基地
  pLayerTableRecord->setIsFrozen(false);qQn红软基地
  pLayerTableRecord->setIsOff(false);qQn红软基地
  pLayerTableRecord->setIsLocked(false);qQn红软基地
  pLayerTableRecord->setVPDFLT(false);qQn红软基地
color.setColorIndex(3);qQn红软基地
  pLayerTableRecord->setColor(color);qQn红软基地
pLinetypeTable->getAt("Continuous", LinetypeId);qQn红软基地
  pLayerTableRecord->setLinetypeObjectId(LinetypeId);qQn红软基地
  pLayerTableRecord->setLineWeight(AcDb::kLnWtByLwDefault);qQn红软基地
pLayerTable->add(pLayerTableRecord);qQn红软基地
  pLayerTableRecord->close();qQn红软基地
 }qQn红软基地
               pLayerTable->close();qQn红软基地
线型qQn红软基地
 pDB->loadLineTypeFile("DASHED", "acad.lin");//虚线qQn红软基地
 pDB->loadLineTypeFile(“CENTER”, “acad.lin”);//中心线qQn红软基地
AcDbLinetypeTable *pLinetypeTable=NULL;qQn红软基地
 Acad::ErrorStatus es=pDB->getSymbolTable(pLinetypeTable, AcDb::kForRead);qQn红软基地
 if(es!=Acad::eOk)qQn红软基地
  return;qQn红软基地
 AcDbLayerTable *pLayerTable;qQn红软基地
 es=pDB->getSymbolTable(pLayerTable, AcDb::kForRead);qQn红软基地
 if(es!=Acad::eOk)qQn红软基地
 {qQn红软基地
  pLinetypeTable->close();qQn红软基地
  return;qQn红软基地
 }qQn红软基地
        AcDbObjectId LinetypeId;qQn红软基地
 pLinetypeTable->getAt("CENTER", LinetypeId);qQn红软基地
        pLineTypeTable->close();qQn红软基地
文字样式qQn红软基地
 AcDbTextStyleTable *pTextStyleTable=NULL;qQn红软基地
 Acad::ErrorStatus es=pDB->getSymbolTable(pTextStyleTable, AcDb::kForWrite);qQn红软基地
 if(es==Acad::eOk)qQn红软基地
 {qQn红软基地
  if(!pTextStyleTable->has("宋体-35"))qQn红软基地
  {qQn红软基地
   AcDbTextStyleTableRecord *pTextStyleTableRecord=new AcDbTextStyleTableRecord;qQn红软基地
   pTextStyleTableRecord->setName("宋体-35");qQn红软基地
   pTextStyleTableRecord->setFont("宋体", FALSE, FALSE, GB2312_CHARSET, DEFAULT_PITCH|FF_ROMAN);qQn红软基地
   pTextStyleTableRecord->setTextSize(3.5);qQn红软基地
   pTextStyleTableRecord->setXScale(0.8);qQn红软基地
   pTextStyleTable->add(pTextStyleTableRecord);qQn红软基地
   pTextStyleTableRecord->close();qQn红软基地
  }qQn红软基地
if(!pTextStyleTable->has("HZ-35"))qQn红软基地
  {qQn红软基地
   AcDbTextStyleTableRecord *pTextStyleTableRecord=new AcDbTextStyleTableRecord;qQn红软基地
   pTextStyleTableRecord->setName("HZ-35");qQn红软基地
   pTextStyleTableRecord->setFileName("txt.shx");qQn红软基地
   pTextStyleTableRecord->setBigFontFileName("hztxt.shx");qQn红软基地
   pTextStyleTableRecord->setTextSize(3.5);qQn红软基地
   pTextStyleTableRecord->setXScale(0.8);qQn红软基地
   Acad::ErrorStatus es=pTextStyleTable->add(pTextStyleTableRecord);qQn红软基地
   pTextStyleTableRecord->close();qQn红软基地
  }qQn红软基地
  pTextStyleTable->close();qQn红软基地
 }qQn红软基地
扩展数据qQn红软基地
XData 容量受限制,只能存储<=16KqQn红软基地
AcDbObject::xData ()qQn红软基地
AcDbObject::setXData()qQn红软基地
(entget( car ( entsel))' ("*") )qQn红软基地
封装类:AcXdLocalVarqQn红软基地
XRecord 容量不受限制qQn红软基地
本质上没有区别,存贮的都是resbuf结构的链表qQn红软基地
如果对象是自定义实体,存储非图形数据也可以作为该实体对象的属性存储起来qQn红软基地
XDATA举例qQn红软基地
(-3 ("INTECAD_HUST_CAD_CENTER" (1000 . qQn红软基地
"BILLITEM") (1002 . "{") (1000 . "index") (1070 . 1) (1000 . "code") (1000 . qQn红软基地
"C5A") (1000 . "name") (1000 . "E5A") (1000 . "quantity") (1000 . "G5A") (1000 qQn红软基地
. "lineblock") (1005 . "0") (1000 . "circle") (1005 . "21B") (1002 . "}") (1000 qQn红软基地
. "OBJECT") (1002 . "{") (1000 . "OBJECTID") (1000 . "BILLITEM") (1002 . "}"))))qQn红软基地
为一链表,表头为RegAppName,每一节点为一resbuf的结构,此结构为联合数据结构,可存字符串,整数等类型qQn红软基地
 struct  resbuf  *pRb, *pTemp;qQn红软基地
 pRb = pObj->xData("architech_3d_code";);qQn红软基地
 if (pRb != NULL) qQn红软基地
 {qQn红软基地
  // If xdata is present, then walk to the end of the list.qQn红软基地
  for (pTemp = pRb; pTemp->rbnext != NULL; pTemp = pTemp->rbnext)qQn红软基地
   ;qQn红软基地
 } qQn红软基地
 else qQn红软基地
 {qQn红软基地
  //以调用过acdbRegApp(“architech_3d_code”);qQn红软基地
  pRb = acutNewRb(AcDb::kDxfRegAppName);qQn红软基地
  pTemp = pRb;qQn红软基地
  pTemp->resval.rstring = (TCHAR*) new TCHAR[GetArchitechCodeName().GetLength() + 1];qQn红软基地
  _tcscpy(pTemp->resval.rstring, GetArchitechCodeName());qQn红软基地
 }qQn红软基地
// Add user-specified std::TSTDSTRING to the xdata.qQn红软基地
 pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString);qQn红软基地
 pTemp = pTemp->rbnext;qQn红软基地
 pTemp->resval.rstring =  (TCHAR*) new TCHAR[_tcslen(resString) + 1];qQn红软基地
 _tcscpy(pTemp->resval.rstring, resString);qQn红软基地
// The following code shows the use of upgradeOpen() to change the entity from read to write.qQn红软基地
 pObj->upgradeOpen();qQn红软基地
 pObj->setXData(pRb);qQn红软基地
 acutRelRb(pRb);qQn红软基地
XRecord创建qQn红软基地
创建对象的扩展字典qQn红软基地
AcDbObject::createExtensionDictionary();qQn红软基地
AcDbObjectId AcDbObject::extensionDictionary(); qQn红软基地
生成AcDbXrecord并加入字典qQn红软基地
AcDbXrecord *pXrec = new AcDbXrecord qQn红软基地
acdbOpenObject(pDict, dictObjId, AcDb::kForWrite); qQn红软基地
pDict->setAt("ASDK_XREC1", pXrec, xrecObjId); qQn红软基地
用链表填充AcDbXrecordqQn红软基地
pXrec->setFromRbChain(*head);qQn红软基地
反应器qQn红软基地
非持久性(transient Reactor)qQn红软基地
数据库反应器:AcDbDatabaseReactor qQn红软基地
文档反应器:AcApDocManagerReactor qQn红软基地
其它qQn红软基地
持久性(persistent Reactor)qQn红软基地
数据库中的对象之间qQn红软基地
区别:是否能保存到数据库中qQn红软基地
持久反应器-建立qQn红软基地
TYTriangle *pTriangle=new TYTriangle;qQn红软基地
AcDbObjectId TriangleId;qQn红软基地
AppendEntityToDb(pTriangle, NULL, &TriangleId);qQn红软基地
pTriangle->close();qQn红软基地
AcDbLine *pL=new AcDbLine(AcGePoint3d(0, 50, 0), AcGePoint3d(100, 50, 0));qQn红软基地
AppendEntityToDb(pL);qQn红软基地
pL->addPersistentReactor(TriangleId);qQn红软基地
pL->close();qQn红软基地
持久反应器-事件处理qQn红软基地
void TYTriangle::modified        (const AcDbObject* dbObj)qQn红软基地
{qQn红软基地
 if(dbObj->isKindOf(AcDbLine::desc()))qQn红软基地
 {qQn红软基地
  AcDbLine *pLine=AcDbLine::cast(dbObj);qQn红软基地
  AcGeVector3d dir=pLine->startPoint()-pLine->endPoint();qQn红软基地
  double dblAngle=AcGeVector3d::kXAxis.angleTo(dir, AcGeVector3d::kZAxis);qQn红软基地
Adesk::Boolean kWritable;qQn红软基地
  Acad::ErrorStatus es=upgradeFromNotify(kWritable);qQn红软基地
  if(es==Acad::eOk)qQn红软基地
  {qQn红软基地
   if(isWriteEnabled())qQn红软基地
   {qQn红软基地
    SetStartAngle(dblAngle);qQn红软基地
   }qQn红软基地
downgradeToNotify(kWritable);qQn红软基地
  }qQn红软基地
 }qQn红软基地
}qQn红软基地
AutoCAD二次开发特点总结qQn红软基地
ObjectARX:面向对象,功能强大,事实上的工业标准(类似者:ZRX,CRX)qQn红软基地
学习材料丰富,代码多,开发人员多,交流方便,入门容易qQn红软基地
市场需求大qQn红软基地
进入门槛低qQn红软基地
是用于学习和练习C++和CAD开发的不错选择qQn红软基地
~完~qQn红软基地
谢谢各位!qQn红软基地

培训ppt课件模板:这是培训ppt课件模板,包括了文章背景知识,认字识词朗诵,课文赏析,拓展训练/分组练习等内容,欢迎点击下载。

幼儿教师师德培训ppt1:这是幼儿教师师德培训ppt1,包括了引言,幼儿园教师师德现状,幼儿园师德建设存在的问题,原因分析,对策建议等内容,欢迎点击下载。

钉钉培训ppt:这是钉钉培训ppt,包括了钉钉软件介绍,钉钉常用功能,公司启用钉钉考勤操作指南,公司启用钉钉时间等内容,欢迎点击下载。

PPT分类Classification

Copyright:2009-2024 红软网 rsdown.cn 联系邮箱:rsdown@163.com

黑ICP备2025041396号-1