ZRX开发手册 下载本文

}

// Add your code for register server components

public: } ;

// -Your command function entry static void MyCmdGroupMyCmd(void) { }

// Add your code for command implement here //……

2)声明应用程序入口点宏

IMPLEMENT_ZRX_ENTRYPOINT(CmdEntryApp)

3)定制命令

// The macro for customize your command

ZCED_ZRXCOMMAND_ENTRY_AUTO(CmdEntryApp, MyCmdGroup, MyCmd, MyCmd, ZCRX_CMD_TRANSPARENT, NULL)

加载及运行

编译成功的ZRX 应用程序,可以在ZWCAD平台上进行加载并执行: 1. 在命令行上输入“AP” 或“APPLOAD”命令,将编译好的dll加载进来; 2. 在命令行输入预先定义的功能命令进行执行。

加载方式可分为手动加载和自动加载:

1、手工加载,启动ZWCAD(在启动前,确保ZRX.DLL已放进ZWCAD安装目录,即ZRX.DLL与ZWCAD.EXE在同一目录下),在ZWCAD命令行输入appload命令,选择要执行的ZRX生成的.dll文件, 并执行加载。

2、自动加载。使用drxautoload.cfg文件。在其中添加ZRX生成的.dll文件的名称。ZWCAD启动时自动加载。

注意事项

1. ZRX的接口版本与ObjectARX Version 2008及以上兼容。有区别的是使用的是多字节

MBCS而不是UNICODE。

2. 工程配置->C/C++->语言->将wchar_t视为内置类型改为“否”。

3. 在加载自己编译好的dll前, 确保ZRX.DLL已放进ZWCAD安装目录,即ZRX.DLL与

ZWCAD.EXE在同一目录下,否则程序加载失败。

数据库概述及操作

1) 数据库概述:

ZRX数据库的底层是采用OpenDWG的DWGdirect模块,在数据库模型上能够很好的兼容DWG格式,数据库由以下基本结构组成: ?? 9个符号表 (Symbol Table)

块表 (ZcDbBlockTable)

尺寸样式表(ZcDbDimStyleTable) 层表(ZcDbLayerTable) 线型表(ZcDbLinetypeTable) 注册应用表(ZcDbRegAppTable) 文本样式表 (ZcDbTextStyleTable) 用户坐标系统表(ZcDbUCSTable) 视口表(ZcDbViewportTable) 视表((ZcDbViewTable)

?? 1个命名对象字典( Named Object Dictionary)

2) 数据库对象:

任何一个数据库对象ZcDbObject有下面三种表现形式: 句柄 (ZcDbHandle)

对象ID (ZcDbObjectId & zds_name) 对象指针(ZcDbObject *、ZcDbEntity* …)

三者之间可以根据实时需要进行转换得到,例如: ZcDbObjectId objId; zds_name objName; ZcDbObject* pObj = NULL; ZcDbHandle objHand;

a. 从zds_name转换得到ZcDbObjectId : zcdbGetObjectId(objId, objName);

b. 从ZcDbObjectId转换得到zds_name: zcdbGetZdsName(objName , objId);

c. 从 ZcDbObjectId以读的方式打开得到ZcDbObject*: zcdbOpenObject(pObj , objId, ZcDb::kForRead);

d. 从 ZcDbObject中得到ZcDbObjectId : objId = pObj->objectId();

e. 从ZcDbObjectId转换的到ZcDbHandle: objHand = objId->Handle();

f. 从ZcDbHandle转换得到ZcDbObjectId:

ZcDbDatabase * pDb = zcdbHostApplicationServices()->workingDatabase(); bool bCreateFlag = true;

pDb->getZcDbObjectId(objId, bCreateFlag, objHand);

3)访问数据库:

开发用户根据实际应用需要创建、编辑、保存、删除一个数据库,也可以遍历整个数据里的对象,下面就如何添加一个实体到数据库及如何遍历一个数据库进行的代码进行示例:

// 添加一个实体到当前数据库的模型空间

bool addEntityToDb(ZcDbObjectId& entId, ZcDbEntity * pEnt) { }

// 遍历一个数据库模型空间里所有的实体 void iterateThroughDatabase()

ZcDbDatabase * pDb = zcdbHostApplicationServices()->workingDatabase(); if (!pDb) return false; ZcDbBlockTable* pTbl = NULL;

if (Zcad::eOk != pDb->getBlockTable(pTbl, ZcDb::kForRead) )

return false;

ZcDbBlockTableRecord* pTblRec = NULL;

if (Zcad::eOk != pTbl->getAt(ZCDB_MODEL_SPACE, pTblRec, ZcDb::kForWrite)) { }

pTbl->close();

if (Zcad::eOk != pTblRec->appendZcDbEntity(entId, pEnt)) { }

pTblRec->close(); return true;

pTblRec->close(); return false; pTbl->close(); return false;

{

ZcDbDatabase *pDb = new ZcDbDatabase(Zdesk::kFalse); if(Zcad::eOk != pDb->readDwgFile(_T(\

return;

ZcDbBlockTable *pBlkTbl;

pDb->getSymbolTable(pBlkTbl, ZcDb::kForRead); if (!pBlkTbl) return;

ZcDbBlockTableRecord *pBlkTblRcd;

pBlkTbl->getAt(ZCDB_MODEL_SPACE, pBlkTblRcd, ZcDb::kForRead); if (!pBlkTblRcd) { }

pBlkTbl->close();

ZcDbBlockTableRecordIterator *pIterator; pBlkTblRcd->newIterator(pIterator); if (!pIterator) { }

pBlkTblRcd->close(); ZcDbEntity *pEnt;

for (pIterator->start(); !pIterator->done();pIterator->step()) {

pIterator->getEntity(pEnt, ZcDb::kForRead); if (!pEnt) continue; pBlkTblRcd->close(); return;

pBlkTbl->close(); return;

zcutPrintf(\ }

}

pEnt->close();

delete pIterator; delete pDb;

4) 库存实体对象类列举:

ZRX提供了以下数据库常规实体类: ?? ZcDbPolyline ?? ZcDb2dPolyline ?? ZcDb3dPolyline