}
// 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Êý¾Ý¿âµÄµ×²ãÊDzÉÓÃ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