ZRX¿ª·¢ÊÖ²á ÏÂÔØ±¾ÎÄ

ZRXSDK for ZWCAD 2010

¿ª·¢ÊÖ²á

ÖÐÍûÁúÌÚÈí¼þ¹É·ÝÓÐÏÞ¹«Ë¾

Ä¿ ¼ °æ±¾°æ±¾¸ü¸üÐÂÐÂ˵˵Ã÷Ã÷£¨2009-7-30ÖÁ2009-12-31£©°æ±¾¸üÐÂ˵Ã÷£º................................3 °æ±¾¸üиÅÊö£º..................................................................................................................................3 °æ±¾¸üÐÂÄÚÈÝ£º..................................................................................................................................3 ZR ¸Å ZRXX ¸ÅÊöZRX ¸Å ÊöÊö.......................................................................................7 ZRX¼ò ½é............................................................................................................................................7 ¿ª·¢»·¾³ÒªÇó......................................................................................................................................7 ¹¦ÄÜÌØÐÔÁоÙ......................................................................................................................................7 ZRX±àÂëÌØÕ÷......................................................................................................................................8 ZR·¢ZRXX¿ª¿ª·¢Ö¸Ö¸ÄÏÄÏ.................................................................................10 ZRX¿ª·¢Ö¸ÄÏÈí¼þ¿ª·¢°ü........................................................................................................................................10 ´´½¨Ò»¸ö¼òµ¥µÄZRX........................................................................................................................11 ³ÌÐòÈë¿ÚºÍÃüÁî¶¨ÖÆ........................................................................................................................19 ¼ÓÔØ¼°ÔËÐÐ........................................................................................................................................21 ×¢ÒâÊÂÏî............................................................................................................................................21 Êý¾Ý¿â¸ÅÊö¼°²Ù×÷............................................................................................................................22 ×Ô¶¨ÒåÀà............................................................................................................................................26 ·´Ó¦Æ÷................................................................................................................................................29 ÊÂÎñ¹ÜÀí............................................................................................................................................31 Îĵµ¹ÜÀí............................................................................................................................................34 ×Ô¶¨ÒåʵÌåOPM...............................................................................................................................35 MFCÀ©Õ¹UIÀà...................................................................................................................................36 ¿ÉÍ£¿¿Ãæ°å£¨DOCKCONTROLBAR£©................................................................................................36 È«¾Öº¯ÊýÓ¦ÓÃ....................................................................................................................................39 ZRÖ²ZRXXÒÆÒÆÖ²Ö¸Ö¸ÄÏÄÏ.................................................................................40 ZRXÒÆÖ²Ö¸ÄÏ´ÓOBJECTARX 2006ÒÆÖ²µ½ZRX......................................................................................................40 ´ÓOBJECTARX 2007/2008ÒÆÖ²µ½ZRX.............................................................................................45 Õë¶ÔARX UIµÄÒÆÖ²..........................................................................................................................47 ÒÆÖ²×¢ÒâÊÂÏî....................................................................................................................................48 ZR¼ûZRXX³£³£¼ûÎÊÎÊÌâÌâ½â½â´ð´ð.........................................................................49 ZRX³£¼ûÎÊÌâ½â´ð¸½Â¼:¸½Â¼AA:£¨ZRXÏÖÖ§³ÖÈ«¾Öº¯ÊýÁо٣©¸½Â¼A:£º......................................52 °æ°æ±¾±¾¸ü¸üÐÂÐÂ˵˵Ã÷Ã÷£¨2009-7-30ÖÁ2009-12-31£©£º

°æ±¾¸üиÅÊö£º

ZRX for ZWCAD 2010ÔÚǰһ¸ö°æ±¾ZRX for ZWCAD 2009µÄ»ù´¡ÉÏ£¬¼ÓÇ¿ºÍÍêÉÆ³£Ó÷´Ó¦Æ÷¹¦ÄÜ£¬ÐÂÔö¼Ó¶ÔÓÀ¾Ã·´Ó¦Æ÷µÄÖ§³Ö£»ÌṩÁËÒ»Ì×¼æÈÝÊÂÎñ¹ÜÀí¹¦ÄܵĽӿڣ»ÐÂÔö¼ÓÁËCZdUiBaseDialog¡¢CZdUiDailog¡¢CZcUiDialog»ù±¾UI½çÃæÀࣻÐÂÔö¼ÓÁ˲¿·ÖÈ«¾Öº¯Êý£»ÍêÉÆÁËÊý¾Ý¿âÓ¦Óýӿڣ¬ÀýÈçZcDbDatabase¡¢ZcDbObject¡¢ZcDb2dPolylineµÈÀ࣬ʹ֮±ÈÒÔǰ°æ±¾¸üÎȶ¨¸üÕýÈ·£»¼æÈÝ´¦ÀíacrxGetApiVersionº¯Êýµ¼³ö£¬ÔÚÒÆÖ²ARXʱµÄ¹ý³ÌÖв»ÔÙÐèÒªÔÚ.defÎļþÀï×¢ÊÍ»òÕßɾ³ýacrxGetApiVersionº¯ÊýµÄµ¼³öÁË¡£¸ü¶àÏêϸ½éÉÜÇë²Î¿¼ÏÂÒ»½Ú¡°°æ±¾¸üÐÂÄÚÈÝ¡±¡£

×¢Òâ £ºZRX for ZWCAD 2010ÒªÇóÓû§Ê¹ÓÃZWCAD 2010°æ±¾µÄCADƽ̨£¬Ê¹ÓÃMicrosoft Visual C++ 2008 ±àÒë»·¾³¡£

°æ±¾¸üÐÂÄÚÈÝ£º

1. Ôö¼Ó¼°¸ÄÉÆµÄ·´Ó¦Æ÷Àà½Ó¿Ú a ÓÀ¾Ã·´Ó¦Æ÷ ZcDbObject::erased ZcDbObject::modified ZcDbObject::openedForModify b. ±à¼­·´Ó¦Æ÷ ÃüÁîÏà¹Ø

ZcEditorReactor::commandEnded ZcEditorReactor::commandWillStart Êý¾Ý¿âÏà¹Ø

ZcEditorReactor::abortSave ZcEditorReactor::beginClose ZcEditorReactor::beginSave ZcEditorReactor::beginDwgOpen ZcEditorReactor::endDwgOpen ZcEditorReactor::databaseConstructed ZcEditorReactor::databaseToBeDestroyed ZcEditorReactor::dwgFileOpened ZcEditorReactor::saveComplete

ZcEditorReactor::initialDwgFileOpenComplete Éî¶È¿Ë¡Ïà¹Ø

ZcEditorReactor::abortDeepClone ZcEditorReactor::beginDeepClone ZcEditorReactor::endDeepClone ²åÈë²Ù×÷Ïà¹Ø

ZcEditorReactor::abortInsert ZcEditorReactor::beginInsert ZcEditorReactor::endInsert ZcEditorReactor::otherInsert Êó±êʼþ²Ù×÷Ïà¹Ø

ZcEditorReactor::beginDoubleClick ZcEditorReactor::beginRightClick WblockÏà¹Ø

ZcEditorReactor::abortWblock ZcEditorReactor::beginWblock ZcEditorReactor::beginWblockObjects ZcEditorReactor::endWblock ZcEditorReactor::otherWblock ZcEditorReactor::wblockNotice XREFÏà¹Ø

ZcEditorReactor::beginAttach ZcEditorReactor::endAttach ZcEditorReactor::otherAttach ÆäËû

ZcEditorReactor::pickfirstModified b Îĵµ·´Ó¦Æ÷

ZcApDocManagerReactor::documentActivated ZcApDocManagerReactor::documentBecameCurrent ZcApDocManagerReactor::documentCreated ZcApDocManagerReactor::documentCreateStarted ZcApDocManagerReactor::documentDestroyed ZcApDocManagerReactor::documentToBeActivated ZcApDocManagerReactor::documentToBeDeactivated ZcApDocManagerReactor::documentToBeDestroyed c Êý¾Ý¿â·´Ó¦Æ÷

ZcDbDatabaseReactor::objectAppended ZcDbDatabaseReactor::objectErased ZcDbDatabaseReactor::objectModified

ZcDbDatabaseReactor::objectOpenedForModify d ¶ÔÏó·´Ó¦Æ÷

ZcDbObjectReactor::erased ZcDbObjectReactor::modified ZcDbObjectReactor::openedForModify 2. Ôö¼ÓÊÂÎñ¹ÜÀí¹¦ÄÜ½Ó¿Ú a ³¤ÊÂÎñ¹ÜÀíÀà

ZcApLongTransactionManager::checkIn ZcApLongTransactionManager::checkOut ZcDbLongTransaction::addToWorkSet ZcDbLongTransaction::newWorkSetIterator ZcDbLongTransaction::removeFromWorkSet ZcDbLongTransaction::originBlock ZcDbLongTransaction::originObject ZcDbLongTransaction::workSetHas b³¤ÊÂÎñ¹¤×÷¼¯±éÀúÆ÷

ZcDbLongTransWorkSetIterator::start ZcDbLongTransWorkSetIterator::step

ZcDbLongTransWorkSetIterator::curObjectIsErased ZcDbLongTransWorkSetIterator::curObjectIsPrimary ZcDbLongTransWorkSetIterator::curObjectIsRemoved ZcDbLongTransWorkSetIterator::done ZcDbLongTransWorkSetIterator::objected c ÊÂÎñ¹ÜÀíÀà

ZcDbTransactionManager::getAllObjects ZcDbTransactionManager::getObject ZcDbTransactionManager::abortTransaction

ZcDbTransactionManager::addNewlyCreatedDBRObject ZcDbTransactionManager:: startTransaction d ÊÂÎñÀà

ZcTransaction::getAllObjects ZcTransaction::getObject

3. Ôö¼Ó»ù±¾UI½çÃæÀà CZdUiBaseDialog CZdUiDialog CZcUiDialog

ÉÏÃæµÄUIÀà½Ó¿Ú£¬×÷ΪZRXµÄ¼¸¸öºÜ»ù±¾µÄ UI¶Ô»°¿òÀà, ʵÏÖÁËBeginEditorComand¡¢CancelEditorCommand¡¢ CompleteEditorCommandµÈ¹¦Äܺ¯Êý¡£ ÔÚÓû§ÓëCAD½»»¥¹ý³ÌÖÐ,

½«²Ù×÷½¹µã´Ó¶Ô»°¿òÇл»µ½ÃüÁîÐУ¬ÌṩÁ˹¦ÄÜ»úÖÆ¡£

4. Ôö¼ÓÈ«¾Öº¯Êý zcedSetCurrentVport zcedGetCurViewportObjectId modelToPixel pixelToModel ucsNormalVector ucsXDir ucsYDir

zdsw_executeUICommand

5. ²¿·Ö½Ó¿ÚÀàµÄÍêÉÆ

a Õë¶ÔZcDbDababaseÀಿ·Ö³ÉÔ±º¯Êý¹¦ÄܽøÐмÓÇ¿ºÍÍêÉÆ b Ôö¼Ó¶ÔZcDbBody¡¢ZcDbShapeͼÐÎʵÌåÀàµÄÖ§³Ö

c Ôö¼Ó¶ÔZcApDocManager::sendStringToExecuted ½Ó¿Ú¹¦ÄܵĻù±¾Ö§³Ö£¬£¨×¢Ò⣺¸Ã½Ó¿Úº¯

ÊýĿǰֻ¶ÔµÚ¶þ²ÎÊýconst char* pszExecuteÓÐЧ£© d ÔöÇ¿¼°ÍêÉÆZcDb2dPolylineͼÐÎʵÌåÀà e ÍêÉÆZcDbObject¶ÔÏó»ùÀà

6. ¼æÈÝ´¦ÀíacrxGetApiVersionº¯Êýµ¼³ö

ÔÚÏÈǰµÄ°æ±¾À½«ARX³ÌÐòÒÆÖ²µ½ZRXµÄ¹¤³ÌÖУ¬ÐèÒªÊÖ¶¯½«¹¤³ÌÀï .def ÎļþÀïµÄacrxGetApiVersionµ¼³öº¯Êý½øÐÐ×¢ÊÍ»òÕßɾ³ýµô£¬·ñÔòVC±àÒëϵͳ»áÌáʾ¡°error LNK2001: unresolved external symbol acrxGetApiVersion¡­¡±Á´½Ó´íÎ󡣸ð汾Õë¶ÔÕâ¸öÎÊÌâ×öÁËÈÝ´í´¦Àí£¬Óû§ÔÚÒÆÖ²µÄ¹¤³ÌÖв»ÐèÒªÔÙÈ¥ÐÞ¸Ä.defÎļþÁË¡£

>>>¸ü¶àÏêϸ˵Ã÷Çë²Î¿¼¡¶ZRX¿ª·¢Ö¸ÄÏ¡·¡£

ZZR¸Å ÊöÊö RXX ¸ÅZRX¼ò ½é

ZRX¡ª¡ªZWCAD Runtime eXtension, ÊÇZWCADÌṩһÌ×ÃæÏò¶ÔÏóµÄC++Ó¦ÓóÌÐò½Ó¿Ú¡£Óû§Ê¹ÓÃÕâÌ×½Ó¿Ú¿ÉÒÔ¿ª·¢¸÷ÖÖZWCAD¹¦ÄÜÓ¦ÓõijÌÐò£¬°üÀ¨¼¸ºÎͼÐεĴ´½¨¡¢´´½¨×Ô¶¨ÒåÀà¡¢¶àÎĵµÓ¦Óá¢Ê¼þ·´Ó¦Í¨¸æ¡¢¶ÔDWGÊý¾Ý¿â½øÐвÙ×÷µÈ¡£ Æä´Î£¬ ZRXÔÚZWCADµÄ¹«¿ªµÄ½Ó¿ÚÉÏʵÏÖÁËARX¶ÔÓ¦µÄÀàºÍº¯Êý£¬ÔÚ´úÂë·ç¸ñºÍ½á¹¹ÉÏ£¬ZRXÍêÈ«¼æÈÝARX´úÂ룬ԭARX³ÌÐòÔÚ¼¸ºõ²»¸ÄÈκδúÂëµÄǰÌáÏ£¬Í¨¹ýÖØÐ±àÒë±ã¿ÉÖ±½ÓÒÆµ½ÔÚZWCADƽ̨ÉϽøÐÐÔËÐС£ÕâÑù´ó´óÌá¸ß¿ª·¢Óû§µÄ´ÓARX³ÌÐòÏòZRX³ÌÐòµÄÒÆÖ²Ð§ÂÊ£¬Õû¸ö´úÂëÒÆÖ²³É±¾¼¸ºõΪ¡°0¡±¡£ Ô­ARXÔ´´úÂëÔÚZRXÉϱàÒë³öÀ´µÄDLL¼ÓÔØµ½ZWCAD, ÔËÐÐʱ»á°ÑARXµÄ½Ó¿Úµ÷ÓÃת½Óµ½ZRX.dll¶¯Ì¬Á¬½Ó¿â, È»ºóZRX.dll¶¯Ì¬¿â°Ñ½Ó¿Úµ÷ÓÃת½Óµ½ZWCAD¡£ ×îÖÕ£¬ZWCAD¾Í¿ÉÒ԰ѽӿڵ÷ÓÃת½Óµ½Óû§µÄARX´úÂëÖУ¬ÒÔ´ïµ½Ö´ÐÐÏà¹ØµÄ¹¦ÄÜÃüÁî¡£

¿ª·¢»·¾³ÒªÇó

ZRXSDK for ZWCAD 2010 (ÒÔϼò³ÆZRX)£¬Ç¿ÁÒ½¨ÒéÓû§²ÉÓÃMicrosoft Visual C++ 2008 ¿ª·¢Æ½Ì¨ ºÍ ZWCAD 2010 ƽ̨¡£

¹¦ÄÜÌØÐÔÁоÙ

1£®³£Óûù±¾¹¦ÄÜ£¬ÈçDWGÊý¾Ý¿â¶Áд·ÃÎÊ£¬×¢²áÃüÁ»ñÈ¡Óû§ÊäÈëµã»òÕß×Ö·û´®µÈ£» 2£®Êý¾Ý¿âͼÐÎʵÌ壬 ÈçZcDbLine¡¢ZcDbCircle¡¢ZcDbArcµÈ£» 3£®À©Õ¹Êý¾ÝºÍÀ©Õ¹×ֵ䣬 XData & XDictionary£»

4£®×Ô¶¨ÒåʵÌåºÍ¶ÔÏ󣬴ÓZcDbObject¡¢ZcDbEntity»òÆäËüÀàÅÉÉú£»

5£®Îĵµ¹ÜÀí¹¦ÄÜ£¬ÌṩÎĵµ¹ÜÀíÆ÷ZcApDocManager ,ÎĵµÀàZcApDocumentµÈ½Ó¿Ú£» 6£®·´Ó¦Æ÷¹¦ÄÜ£¬ÌṩÊý¾Ý¿â·´Ó¦Æ÷£¬Îĵµ·´Ó¦Æ÷£¬±à¼­Æ÷·´Ó¦Æ÷£¨°üÀ¨ ÃüÁî·´Ó¦Æ÷£¬Êó±ê

ÓÒ¼üÏûÏ¢µÈ£©£¬¶ÔÏó·´Ó¦Æ÷£¬ÓÀ¾Ã·´Ó¦Æ÷£» 7£®Í϶¯Jigs£¬ZcEdJig£»

8£®Ð­ÒéÀ©Õ¹£¨Protocol Extensions£©£»

9£®¼¸¸ö»ù±¾UI½çÃæÀàµÄÖ§³Ö£¬CZcUiDialog¡¢CZdUiDailog¡¢CZdUiBaseDialog¡£

ZRX±àÂëÌØÕ÷

ZRX API Ö÷ÒªµÄÌØÕ÷¾ÍÊÇ¿ÉÒÔͬʱ¼æÈÝÁ½Ì×ÐÎʽµÄ³ÌÐò±àÂ룬¼È¿ÉÒÔ¼æÈÝ×Ô¼º±¾ÉíµÄZRX³ÌÐò±àÂëÓÖ¿ÉÒÔ¼æÈÝARX³ÌÐò±àÂë¡£ÀýÈçÓÐÏÂÃæµÄÁ½ÖÖÐÎʽ±àÂ룬ÔÚZWCADƽ̨É϶¼ÊÇ¿ÉÒÔÕý³£ÔËÐеģº

ZRX ³ÌÐò±àÂ룺

void drawSimpleLine() { }

ZcGePoint3d pntStart; ZcGePoint3d pntEnd;

if (RTNORM != zcedGetPoint( NULL, \

return;

if (RTNORM != zcedGetPoint( NULL, \

return;

ZcDbLine* pLine = new ZcDbLine(pntStart, pntEnd); ZcDbObjectId eId;

addEntityToDb(eId, pLine); pLine->close();

ARX ³ÌÐò±àÂ룺 void drawSimpleLine() { }

AcGePoint3d pntStart; AcGePoint3d pntEnd;

if (RTNORM != acedGetPoint( NULL, \

return;

if (RTNORM != acedGetPoint( NULL, \

return;

AcDbLine* pLine = new AcDbLine(pntStart, pntEnd); AcDbObjectId eId;

addEntityToDb(eId, pLine); pLine->close();

ÒÔÉÏÁ½ÖÖÐÎʽµÄ±àÂ룬һÖÖÊÇZRXÏÖÓб¾ÉíµÄ´úÂë·ç¸ñ£¬ÁíÒ»ÖÖÊÇARXµÄ´úÂë·ç¸ñ£¬Á½ÕßÔÚ±àÂëÐÎʽ¶¼¼¸ºõûÓÐÌ«´ó²î±ð¡£Í¨¹ýʹÓÃZRX APIÀ´½øÐбàÒëÁ´½ÓÒÔÉÏÁ½·Ý´úÂ룬½á¹û¶¼ÄÜÕýÈ·µØÔÚZWCADƽ̨ÉÏÔËÐС£»»¾ä»°Ëµ£¬ZRX APIʵÏÖÁËÕë¶ÔARX´úÂëµÄ¼æÈÝ£¬Ô­ARX³ÌÐò¿ÉÒÔ¿ìËÙ, ¡°0¡± ³É±¾µØÒÆÖ²µ½ZRXÉÏ¡£ZRXÏ൱ÓÚÒ»¸öת½Ó¿Ú£¬Äܹ»°ÑÔ­À´µÄARXÔ´´úÂ룬¼¸ºõ²»ÓÃÐÞ¸ÄÈκδúÂ룬ͨ¹ýÔÚZRX¿ª·¢»·¾³ÏÂÖØÐ±àÒëÁ´½ÓÉú³É¶¯Ì¬Á¬½Ó¿â(dll)£¬¼ÓÔØµ½ZWCADÉÏÀ´ÔËÐС£×÷Ϊһ¸ö³ÌÐò¿ª·¢Õߣ¬Ö»ÐèҪά»¤Í¬Ò»·Ý´úÂ룬¾Í¿ÉÒÔÔÚObjectARXÉÏ»òÕßZRXÉÏÀ´±àÒëÔËÐдúÂë¡£

ZZR¿ª·¢ RX·¢Ö¸X¿ªÖ¸ÄÏÄÏ Èí¼þ¿ª·¢°ü

Íê³ÉZRXSDKµÄ°²×°ºó£¬°²×°³ÌÐò½«ÔÚÓû§Ö¸¶¨µÄλÖô´½¨ÒÔϵÄ×ÓĿ¼ºÍÄÚÈÝ£º

arxPort

¡ª¡ª¼æÈÝARX´úÂëʹÓõÄÍ·ÎļþĿ¼£¬Óû§´úÂëÈç¹ûÊÇÒÔ¡°A¡±µÈ×ÖÄ¸ÌØÐÔ´òÍ·µÄARX±àÂë·ç¸ñ£¬ÔòÐèÒª°üÀ¨¸ÃÍ·ÎļþĿ¼

inc

¡ª¡ªZRXËùÓÐÍ·ÎļþĿ¼£¬¡°arxPort¡± Óë¡°inc¡±Í·ÎļþĿ¼£¬Óû§Ö»ÐèÒª°üº¬ÆäÒ»

dll

¡ª¡ªZRX dll¿âĿ¼£¬¸ÃĿ¼Ï°üº¬ZRX.dll ºÍ ZXDB.dll£¬ÔÚʹÓÃZRX¿ª·¢Ê±£¬ÐèÒª½«¸ÃĿ¼ÏÂËùÓеÄdllÎļþ¸´ÖƵ½ZWCADƽ̨µÄ°²×°Ä¿Â¼Ï£¬È·±£ÓëZWCAD.exeͬĿ¼¡£

lib

¡ª¡ªZRX lib¿âĿ¼£¬¸ÃĿ¼Ï°üº¬ZRX.lib ºÍ ZXDB.lib

¡ª¡ªZRX ËùÓÐÔÚÏß°ïÖúÎĵµÄ¿Â¼£¬°üÀ¨¡¶°æ±¾¸üÐÂ˵Ã÷¡·¡¢¡¶ZRX¿ª·¢Ö¸ÄÏ¡·¡¢¡¶ZRXÒÆÖ²Ö¸ÄÏ¡·¡¢¡¶ZRX³£¼ûÎÊÌâ½â´ð¡·µÈ

docs

samples

¡ª¡ªZRX ÌṩµÄʾÀý³ÌÐòĿ¼£¬¸ÃĿ¼ÀïµÄʾÀý³ÌÐòչʾÁËZRX²»Í¬¹¦ÄÜÌØÐÔµÄʹÓ÷½·¨£¬ÓУºSimpleLine(¼òµ¥ÊµÌå)¡¢RasterImage(¹âդͼÏñ)¡¢DockControlBar(Í£¿¿¹¤¾ßÌõ)¡¢ PersistReactor(ÓÀ¾Ã·´Ó¦Æ÷)¡¢DocumentManager(Îĵµ¹ÜÀíÓ¦ÓÃ)¡¢ZRX_MISC(×ÛºÏÓ¦Óã¬×Ô¶¨ÒåʵÌå¡¢Í϶¯JIG¡¢·´Ó¦Æ÷¡¢OPM)¡£ ˵ Ã÷£º

1£© ZRXSDK¿ª·¢°ü¿ÉÒÔ·ÅÖõ½ÈκÎĿ¼Ï£¬Ò²¿ÉÒÔ·ÅÖõ½ZWCADµÄ°²×°Ä¿Â¼Ï£¬±£³Ö

ZRXSDK¼°Æä×ÓĿ¼µÄ½á¹¹²»±ä¡£

2£© ÔÚʹÓÃZRXSDKǰ£¬È·±£ZRX..dll ¡¢ZXDB.dll¡¢PropertyBarRes.dllÈý¸ö¿âÎļþ¿½±´µ½

ZWCADÏàÓ¦µÄ°²×°Ä¿Â¼Ï£¬ ±£³ÖÕâÈý¸ö¿âÎļþÓëZWCAD.EXEÔÚͬһ·¾¶Ï¡£

´´½¨Ò»¸ö¼òµ¥µÄZRX

Óû§¿ÉÒÔʹÓÃVCµÄ¡°Ð½¨¡±À´´´½¨Ò»¸öеÄZRX¹¤³Ì£¬(Èç¹ûÓû§°²×°ÁËZrxWizards, Ò²¿ÉÒÔʹÓÃZrxWizards¿ìËÙ´´½¨Ò»¸öеÄZRX¹¤³Ì), ½ÓÏÂÀ´½«½²Êö£¬ÔõÑùÒ»²½Ò»²½µØÈ¥ÊµÏÖÒ»¸ö¼òµ¥µÄZRX³ÌÐò£º

1. Ê×ÏȽ¨Á¢Ò»¸öVC++ 2008 MFCÀ©Õ¹DLL¹¤³Ì£º

1£©´ò¿ª Microsoft Visual C++ 2008¿ª·¢»·¾³£¬Ñ¡Ôñ¡°New(н¨)¡±´Ó¡°File(Îļþ)¡±²Ëµ¥£¬½Ó×ÅÑ¡ÖС°Project (ÏîÄ¿)¡±µ¯³ö¡°New Project(н¨ÏîÄ¿)¡±¶Ô»°¿ò¡£

2£©ÔÚµ±Ç°µ¯³öµÄ¡°New Project(н¨ÏîÄ¿)¡±¶Ô»°¿ò¡°Templates(Ä£°å)¡±Àѡ¶¨¡°MFC DLL¡±Ï²¢ÊäÈëÐèÒª´´½¨µÄ¹¤³ÌÏîÄ¿Ãû³Æ¡°SimpleLine¡±ºÍ ¹¤³ÌÏîÄ¿Ëù±£´æÎ»Öá°D:\\ZRXSDK\\Samples¡±£¬ÈçÉÏͼËùʾÒâ¡£µã»÷¡°OK£¨È·¶¨£©¡±ºóµ¯³ö¡°MFC DLL Wizard£¨MFC DLL Ïòµ¼£©¡±¶Ô»°¿ò¡£

3£©»÷»î¡°Application Settings(Ó¦ÓóÌÐòÉèÖÃ)¡±ÊôÐÔÒ³£¬Ñ¡ÖС°MFC extension DLL (MFC À©Õ¹DLL)¡±ÔÚ×÷ΪҪÉú³ÉµÄDLLÀàÐÍ¡±£¬È·ÈÏÎÞÎóºóµã»÷¡°Finish(Íê³É)¡±°´Å¥¡£

2. ½Ó×Å£¬½øÐй¤³ÌÅäÖãº

1£©ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°C/C++-->General(³£¹æ)-->Additional Include Directories(¸½¼Ó°üº¬Ä¿Â¼)¡±ÖÐÔö¼Ó°üº¬Îļþ·¾¶£¬Èç¡°..\\..\\..\\inc¡±

2£©ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°Linker(Á´½ÓÆ÷)-->General(³£¹æ)-->Additional Library Directories(¸½¼Ó¿âĿ¼)¡±ÖÐÔö¼Ó¿âĿ¼.Èç¡°..\\..\\..\\lib\\vc9¡±

3£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄLinker(Á´½ÓÆ÷)-->Input(ÊäÈë)-->Additional Dependencies(¸½¼ÓÒÀÀµ

Ïî)ÖÐÔö¼ÓËùÒÀÀµµÄ¿â¡°ZRX.lib¡±

4£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°General(³£¹æ) --> Character Set(×Ö·û¼¯)¡±£¬ È·±£Ñ¡ÏîΪ¡°Use

Muti-Byte Character Set£¨Ê¹Óöà×Ö½Ú×Ö·û¼¯£©¡±

5) ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°C/C++-->Language(ÓïÑÔ)--> Treat wchart_t as Built-in Type(½«wchar_tÊÓΪÄÚÖÃÀàÐÍ)¡±£¬È·±£Ñ¡ÏîΪ¡°No(·ñ)¡±

6) Ôö¼Ó°üº¬Í·Îļþ£¬ÔÚÔ¤±àÒëÍ·Îļþ¡°stdAfx.h¡±Îļþĩβ´¦ÀïÌí¼ÓÒÔÏ´úÂ룺 #include \

7)´ò¿ªÐ½¨¹¤³ÌµÄ.defÎļþ£¬ Ôö¼Ó³ÌÐòÈë¿Úº¯ÊýµÄµ¼³ö£¬´úÂëÈçÏÂËùʾ£º EXPORTS

zcrxEntryPoint

PRIVATE

3. Ϊ³ÌÐò×°ÔØÃüÁîºÍ¶¨ÒåʵÏÖº¯Êý£¬¿É°´ÕÕÈçϵķ½Ê½½øÐÐʵÏÖ£º 1£© Ìí¼ÓZRX³ÌÐòÈë¿Úµãº¯Êý, ÔÚ.cppÎļþÀïÌí¼ÓÈçÏ´úÂ룺

extern \

zcrxEntryPoint(ZcRx::AppMsgCode msg, void* pkt) {

switch (msg)

}

{

case ZcRx::kInitAppMsg:

zcrxDynamicLinker->unlockApplication(pkt); zcrxRegisterAppMDIAware(pkt); initApp(); break;

case ZcRx::kUnloadAppMsg:

unloadApp(); break;

default: }

return ZcRx::kRetOK;

break;

2£©Ìí¼Ó×°ÔØÃüÁî´úÂ룬ÏàÓ¦µØÌí¼Ó¶ÔÓ¦µÄÐ¶ÔØÃüÁî´úÂ룬ÈçÏÂËùʾ£º

void initApp() { }

void unloadApp() { }

// unload commands

zcedRegCmds->removeGroup(\

// register a command with the ZWCAD command mechanism zcedRegCmds->addCommand(\

\\

ZCRX_CMD_TRANSPARENT, drawSimpleLine);

3£© ¶¨ÒåÃüÁÊý£¬ÈçÏÂËùʾ£º

void drawSimpleLine() { }

// define drawSimpleLine() function and implement it ¡­

4. Íê³ÉÉÏÊö²½Öèºó£¬½«Õû¸ö¹¤³Ì½øÐбàÒëÁ´½Ó£¬Éú³É½á¹û³ÌÐòÎļþ£¨.dll£©¡£

˵Ã÷£º

1. Èç¹ûʹÓÃZrxWizardsÀ´´´½¨ZRX¹¤³Ì, ÉÏÊöµÄ´ó²¿·Ö²½Öè¿ÉÒÔÊ¡µô£»

2. ÉÏÊö¹ý³Ì¸üÏêϸµÄ¿ÉÒԲο¼ZRXSDK\\Samples\\Ŀ¼ÏÂʾÀý³ÌÐò¡°SimpleLine¡± ¡£

³ÌÐòÈë¿ÚºÍÃüÁî¶¨ÖÆ

ZRXÌṩÒÔÏÂÁ½ÖÖÓ¦ÓóÌÐòÈë¿ÚµÄ·½Ê½, ¿ª·¢Óû§¿ÉÒÔʹÓÃÆäÖÐÈÎÒâÒ»ÖÖ·½Ê½¶Ô×Ô¼ºµÄZRXÓ¦ÓóÌÐòÈë¿Ú½øÐе¼³öºÍÃüÁî¶¨ÖÆ£º

³ÌÐòÈë¿Ú·½Ê½Ò»£ºµ¼³öÈë¿Úº¯Êý¡°zcrxEntryPoint¡± 1) ¶¨Òå³ÌÐòÈë¿Úº¯Êý

extern \

zcrxEntryPoint(ZcRx::AppMsgCode msg, void* pkt) { }

switch (msg) {

case ZcRx::kInitAppMsg:

zcrxDynamicLinker->unlockApplication(pkt); zcrxRegisterAppMDIAware(pkt); initApp(); break;

case ZcRx::kUnloadAppMsg:

unloadApp(); break;

default: }

return ZcRx::kRetOK;

break;

2£©Ìí¼Ó×°ÔØºÍÐ¶ÔØº¯Êý£¬´´½¨ÃüÁ

void initApp() {

// register a command with the ZWCAD command mechanism zcedRegCmds->addCommand(\

\\

ZCRX_CMD_TRANSPARENT,

}

drawSimpleLine);

void unloadApp() { }

// unload commands

zcedRegCmds->removeGroup(\

3£© ¶¨ÒåÃüÁÊý£¬ÈçÏÂËùʾ£º

void drawSimpleLine() { }

// define drawSimpleLine() function and implement it ¡­

³ÌÐòÈë¿Ú·½Ê½¶þ£º´ÓZcRxZrxAppÅÉÉúÓ¦ÓÃÀà 1£©´ÓZcRxZrxAppÅÉÉúÓ¦ÓóÌÐòÀà

// Application Entry Point

class CmdEntryApp : public ZcRxZrxApp { public:

virtual void RegisterServerComponents () {

virtual ZcRx::AppRetCode On_kUnloadAppMsg (void *pkt) { }

ZcRx::AppRetCode retCode =ZcRxZrxApp::On_kUnloadAppMsg (pkt) ; // TODO: Unload dependencies here return (retCode) ;

virtual ZcRx::AppRetCode On_kInitAppMsg (void *pkt) { }

ZcRx::AppRetCode retCode =ZcRxZrxApp::On_kInitAppMsg (pkt) ; // TODO: Add your initialization code here

return (retCode) ;

}

// 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

?? ZcDbArc ?? ZcDbArcDim ?? ZcDbCircle ?? ZcDbEllipse ?? ZcDbLeader ?? ZcDbLine ?? ZcDbRay ?? ZcDbSpline ?? ZcDbXline ?? ZcDbPolyFaceMesh ?? ZcDbPolygonMesh ?? ZcDb2LineAngularDim ?? ZcDb3PointAngularDim ?? ZcDbAlignedDim ?? ZcDbDiametricDim ?? ZcDbOrdinateDim ?? ZcDbRadialDim ?? ZcDbRadialDimLarge ?? ZcDbRotatedDim ?? ZcDbBlockReference ?? ZcDbMInsertBlock ?? ZcDbHatch ?? ZcDbFace ?? ZcDbFcf ?? ZcDbMline ?? ZcDbPoint ?? ZcDbSolid ?? ZcDbTrace ?? ZcDb3dSolid ?? ZcDbRegion ?? ZcDbText ?? ZcDbMText

?? ZcDbAttributeDefinition ?? ZcDbBody ?? ZcDbWipeout ?? ZcDbViewport ?? ZcDbShape

×Ô¶¨ÒåÀà

ZRXÌṩÁËÒ»Ì××Ô¶¨Òå½Ó¿Ú£¬¹©Óû§´ÓZcRxObject ÀàÖÐÅÉÉú³ö×Ô¼ºÌض¨µÄÐÂÀ࣬еÄÀà¿ÉÒÔÊÇÒ»¸ö±ê×¼µÄ C++ÅÉÉúÀ࣬Ҳ¿ÉÒÔÊÇÒ»¸ö¾ßÓÐZRXÔËÐÐʱÀàÐÍʶ±ð»úÖÆµÄ ZcRxObject À©Õ¹Àà¡£×î³£¼ûµÄÔËÐÐʱ×Ô¶¨ÒåÀ©Õ¹ÀàÓУº×Ô¶¨Òå¶ÔÏóºÍ×Ô¶¨ÒåʵÌå¡£×Ô¶¨Òå¶ÔÏóͨ³£ÊÇ´ÓZcDbObjectÅÉÉú£¬×Ô¶¨ÒåʵÌåÔò´ÓZcDbEntity¡¢ZcDbCurveµÈʵÌåÀàÖнøÐÐÅÉÉú¡£Á½ÖÖ·½Ê½¹¹½¨³öÀ´µÄ×Ô¶¨ÒåÀà¶ÔÏó£¬ÈçͬÆäËûµÄÊý¾Ý¿â³£×¤¶ÔÏóÒ»Ñù£¬¾ßÓÐͬµÈµÄÌØÐÔ£¬Äܹ»´æ´¢ÔÚÊý¾Ý¿âÀ±»Êý¾Ý¿âͳһ¹ÜÀí¡£ ΪÁ˱ãÓÚÀí½â£¬ÏÂÃæ½«¾ÙÀý½²ÊöÈçºÎÒ»²½Ò»²½¶¨ÖÆÒ»¸ö´øÔËÐÐʱÀàÐÍʶ±ð»úÖÆµÄ×Ô¶¨ÒåʵÌ壺 1£© ¶¨ÒåеÄ×Ô¶¨ÒåʵÌåÀà

class SignEntity : public ZcDbEntity { public:

ZCRX_DECLARE_MEMBERS(SignEntity) ;

protected:

static Zdesk::UInt32 kCurrentVersionNumber ;

public: }

Zdesk::UInt32 SignEntity::kCurrentVersionNumber =1 ; ZCRX_DXF_DEFINE_MEMBERS ( )

SignEntity::SignEntity () : ZcDbEntity () {

m_pntCenter.set(0,0,0); m_dblRadius = 10.00; m_strTextFirst = \m_strTextSecnd = \SignEntity, ZcDbEntity,

ZcDb::kDHL_CURRENT, ZcDb::kMReleaseCurrent, ZcDbProxyEntity::kNoOperation, SIGNENTITY, \

\\

\SignEntity () ;

virtual ~SignEntity () ;

}

SignEntity::~SignEntity () { }

2£© ÉùÃ÷ºÍ¶¨ÒåÐèÒªµÄÐéÖØÔØº¯Êý

//- Dwg Filing protocol

virtual Zcad::ErrorStatus dwgOutFields (ZcDbDwgFiler *pFiler) const ; virtual Zcad::ErrorStatus dwgInFields (ZcDbDwgFiler *pFiler) ;

//- Graphics protocol

virtual Zdesk::Boolean worldDraw (ZcGiWorldDraw *mode) ; //----- ZcDbObject protocols //- Dwg Filing protocol

Zcad::ErrorStatus SignEntity::dwgOutFields (ZcDbDwgFiler *pFiler) const { }

Zcad::ErrorStatus SignEntity::dwgInFields (ZcDbDwgFiler *pFiler) {

assertWriteEnabled () ;

//----- Read parent class information first.

Zcad::ErrorStatus es =ZcDbEntity::dwgInFields (pFiler) ; if ( es != Zcad::eOk )

return (es) ;

return (pFiler->filerStatus ()) ; assertReadEnabled () ;

//----- Save parent class information first.

Zcad::ErrorStatus es =ZcDbEntity::dwgOutFields (pFiler) ; if ( es != Zcad::eOk )

return (es) ;

//----- Object version number needs to be saved first

if ( (es =pFiler->writeUInt32 (SignEntity::kCurrentVersionNumber)) != Zcad::eOk )

return (es) ;

//----- Output params //.....

//----- Object version number needs to be read first Zdesk::UInt32 version =0 ;

}

if ( (es =pFiler->readUInt32 (&version)) != Zcad::eOk )

return (es) ;

if ( version > SignEntity::kCurrentVersionNumber )

return (Zcad::eMakeMeProxy) ;

//- Uncomment the 2 following lines if your current object implementation cannot //- support previous version of that object. //if ( version < SignEntity::kCurrentVersionNumber ) // return (Zcad::eMakeMeProxy) ; //----- Read params //.....

return (pFiler->filerStatus ()) ;

Zdesk::Boolean SignEntity::worldDraw (ZcGiWorldDraw *mode) { }

assertReadEnabled () ; //¡­

return Zdesk::kTrue;

3£© ×¢²áºÍ×¢Ïú×Ô¶¨ÒåÀ࣬Óû§¿ÉÒÔ²ÉÓÃÒÔÏÂÈÎÒ»·½·¨½øÐÐ×Ô¶¨ÒåʵÌåµÄ×¢²áºÍ×¢Ïú a . ʹÓÃ×Ô¶¯×¢²áºê£¬ÔÚ×Ô¶¨Òå×Ô¶¨ÀàµÄ.hÎļþµÄĩβ´¦Ìí¼ÓºêÉùÃ÷ÈçÏ£º

#ifdef SIGNENTITY_MODULE

ZCDB_REGISTER_OBJECT_ENTRY_AUTO(SignEntity) #endif

b . ÔÚ³ÌÐò¼ÓÔØ»òÐ¶ÔØÊ±×¢²á

// ³ÌÐò¼ÓÔØÊ± SignEntity::rxInit(); zcrxBuildClassHierarchy // ³ÌÐòÐ¶ÔØÊ±

deleteZcRxClass(SignEntity::desc()); ×¢Ò⣺

1£© ZRXĿǰ²»Ö§³Ö×Ô¶¨ÒåÀàµÄÐéÖØÔØº¯Êýlist()¡¢saveAs()¡¢getSubentPathsAtGsMarker()¡¢

highlight()¡¢unhighlight()¡¢applyPartialUndo()¡£

2£© ¸ü¶àÏêϸ¿ÉÒԲο¼ZRXSDK\\Sample\\Ŀ¼ÏµÄʾÀý³ÌÐòZRX_Misc¡ª¡ªSignEntityDb

·´Ó¦Æ÷

Ëùν·´Ó¦Æ÷£¬¾ÍÊǽÓÊÕCADÀï¸÷ÖÖʼþÏûÏ¢µÄͨ¸æ»úÖÆ¡£Ã¿Ò»¸ö·´Ó¦Æ÷Ï൱ÓÚÒ»¸ö½ÓÊÕʼþµÄºÐ×Ó£¬½«´Óͨ¸æÕߣ¨µ±Ò»¸öʼþ·¢Éúʱ£¬·¢³öʼþͨ¸æµÄ¶ÔÏó£©ÄÇÀï½Óµ½Ê¼þÏûÏ¢´«µÝµ½ÏàÓ¦µÄͨ¸æº¯Êý¡£CADƽ̨Õë¶Ô²»Í¬ÀàÐ͵ÄʼþÏûÏ¢½øÐÐÇø·Ö£¬·Ö±ð¶¨Ò岻ͬÀàÐ͵Äʼþ·´Ó¦Æ÷¡£ ZWCAD-ZRXÌṩÁËÒÔϼ¸ÖÖʼþÀàÐ͵ķ´Ó¦Æ÷ºÍͨ¸æº¯Êý£º

a ÓÀ¾Ã·´Ó¦Æ÷ ZcDbObject::erased ZcDbObject::modified ZcDbObject::openedForModify b. ±à¼­·´Ó¦Æ÷ ÃüÁîÏà¹Ø

ZcEditorReactor::commandEnded ZcEditorReactor::commandWillStart Êý¾Ý¿âÏà¹Ø

ZcEditorReactor::abortSave ZcEditorReactor::beginClose ZcEditorReactor::beginSave ZcEditorReactor::beginDwgOpen ZcEditorReactor::endDwgOpen ZcEditorReactor::databaseConstructed ZcEditorReactor::databaseToBeDestroyed ZcEditorReactor::dwgFileOpened ZcEditorReactor::saveComplete

ZcEditorReactor::initialDwgFileOpenComplete Éî¶È¿Ë¡Ïà¹Ø

ZcEditorReactor::abortDeepClone ZcEditorReactor::beginDeepClone ZcEditorReactor::endDeepClone ²åÈë²Ù×÷Ïà¹Ø

ZcEditorReactor::abortInsert ZcEditorReactor::beginInsert ZcEditorReactor::endInsert ZcEditorReactor::otherInsert Êó±êʼþ²Ù×÷Ïà¹Ø

ZcEditorReactor::beginDoubleClick ZcEditorReactor::beginRightClick

WblockÏà¹Ø

ZcEditorReactor::abortWblock ZcEditorReactor::beginWblock ZcEditorReactor::beginWblockObjects ZcEditorReactor::endWblock ZcEditorReactor::otherWblock ZcEditorReactor::wblockNotice XREFÏà¹Ø

ZcEditorReactor::beginAttach ZcEditorReactor::endAttach ZcEditorReactor::otherAttach ÆäËû

ZcEditorReactor::pickfirstModified b Êý¾Ý¿â·´Ó¦Æ÷

ZcDbDatabaseReactor::objectAppended ZcDbDatabaseReactor::objectErased ZcDbDatabaseReactor::objectModified ZcDbDatabaseReactor::objectOpenedForModify c ¶ÔÏó·´Ó¦Æ÷

ZcDbObjectReactor::erased ZcDbObjectReactor::modified ZcDbObjectReactor::openedForModify

ÈçºÎÔÚʹÓÃÒ»¸ö·´Ó¦Æ÷£¿ ͨ³£°´ÕÕÒÔϲ½Öè½øÐУº

1£© ¼Ì³ÐÒ»¸öз´Ó¦Æ÷Àà´ÓÒÑÓеķ´Ó¦Æ÷ÀàÖУ¬²¢¸ù¾Ý×ÔÉíÐèÒª£¬ÖØÐ´ºÍʵÏÖÌØ¶¨ÓÃ;µÄÐé

ͨ¸æº¯Êý

2£© ¶Ô·´Ó¦Æ÷½øÐгõʼ»¯

3£© Ìí¼Ó·´Ó¦Æ÷µ½¶ÔÓ¦µÄͨ¸æÕߵķ´Ó¦Æ÷Áбí

×¢ÒâÊÂÏ

1£© µ±Ê¹ÓÃÍêÒ»¸ö·´Ó¦Æ÷ºó£¬ÐèÒª½«·´Ó¦Æ÷½øÐдÓͨ¸æÕߵķ´Ó¦Æ÷ÁбíÀïÒÆ³ö£¬È»ºóɾ³ý·´

Ó¦Æ÷¶ÔÏó£¨Èç¹û·´Ó¦Æ÷ÊÇÒ»¸öÊý¾Ý¿â³¤×¤¶ÔÏó£¬Ôò²»ÓÃɾ³ý£©

2£© ¸ü¶àÏêϸµÄ·´Ó¦Æ÷Ó¦ÓÃÇë²Î¿¼ZRXSDK\\Sample\\Ŀ¼ÏµÄʾÀý³ÌÐòZRX_Misc¡ª

SignEntityUi & PersisitReactor

ÊÂÎñ¹ÜÀí

ʲôÊÇÊÂÎñ£¿

ÊÂÎñ(transaction)ÊÇÊý¾Ý¿âÀïµÄÒ»ÖÖ¸ÅÄָ×÷Ϊµ¥¸öÂß¼­¹¤×÷µ¥ÔªÖ´ÐеÄһϵÁвÙ×÷¡£ ¶ÔÓÚZRXÀ´Ëµ£¬¾ÍÊÇZcDbDatabaseµÄZcDbTransaction¡£ÏÂͼÊÇÒ»¸öÓ¦ÓÃÀý×Ó£º

Ìí¼Ó¡±Îå»·¡±Í¼²ã Èç×óͼËùʾ£¬»æÖưÂÔËÎå»·¿ÉÒÔ¿´×÷ÊÇÒ»¸öÊÂÎñ.Õâ¸öÊÂÎñ°üº¬Ëĸö²Ù×÷¡£Ö»Óе±ÕâËĸö²Ù×÷È«²¿Ö´Ðгɹ¦£¬²Å»áÌá½»Êý¾Ýµ½Êý¾Ý¿â£¬Èç¹ûÈκÎÒ»¸ö²Ù×÷ʧ°Ü£¬Õû¸ö¹¤×÷µ¥ÔªÈ«²¿È¡Ïû£¬²»»á¶ÔÊý¾Ý¿âÓÐÈκÎÐ޸ġ£¿Éν¡°Ò»Ìí¼ÓÎå¸öÔ²»· »æÖưÂÔËÎå»· ·Ö±ðÓÃÎåÖÖÑÕÉ«Ìî³äÔ²»· ÉèÖÃÔ²»·ºÍÌî³äµÄͼ²ãΪ¡±Îå»·¡± Ëð¾ãË𣬹²Í¬½øÍË¡± µ¥¸öÂß¼­¹¤×÷µ¥Ôª

ÒÔÏÂÊÇʾÒâ´úÂ룺

void drawOlympicLogo() {

һϵÁвÙ×÷

ZcDbTransactionManager* pTransManager = curDb()->transactionManager(); pTransManager->startTransaction();//ÊÂÎñ¿ªÊ¼ try {

//Ìí¼Ó\

ZcDbLayer* pLayer = createNewLayer(\

if (pLayer == NULL || addToDb(pLayer£¬pTransManager) == false)

throw (\

//Ìí¼ÓÎå»·

OlympicRings* pOlympicRings = createNewRings();

if (pOlympicRings == NULL || addToDb(pOlympicRings£¬pTransManager) == false)

throw (\

//Ìí¼ÓÎå»·Ìî³ä

RingsFillHatch* pFillHatch = createNewHatch(pOlympicRings);

}

}

if (pFillHatch == NULL || addToDb(pFillHatch£¬pTransManager) == false)

throw (\

//ÉèÖÃÎå»·ºÍÌî³äµÄͼ²ã

if (setEntsLayer(pOlympicRings, pFillHatch, pLayer) == false)

throw (\

pTransManager->endTransaction();//ÊÂÎñ½áÊø£¬Êý¾ÝÈë¿â

catch(ZCHAR *pMessage) { }

zcutPrintf(_T(\

pTransManager->abortTransaction();//ÊÂÎñÈ¡Ïû£¬Çå³ýÊý¾Ý

ÊÂÎñ»úÖÆµÄÌØÐÔ£º

³ýÁËÉÏÊöµÄά»¤Êý¾Ý¿âµÄÎȶ¨ÐÔºÍÒ»ÖÂÐÔµÄÓŵãÖ®Í⣬ÊÂÎñÏà¶ÔÓÚ³£¹æµÄopen-close»úÖÆÀ´Ëµ£¬»¹ÓÐÒÔÏÂÌØÐÔ£º

? ÏÞÖÆÉÙ

open-close»úÖÆÀһ¸ö¶ÔÏó´¦ÓÚ´ò¿ª×´Ì¬£¬¾Í²»ÄÜÔÙÒÔforWrite·½Ê½´ò¿ª¡£¶øÊÂÎñ»úÖÆÀ¶ÔÏó´¦ÓÚ´ò¿ª×´Ì¬µÄʱºò£¬»¹¿ÉÒÔÒÔforWrite·½Ê½´ò¿ª¡£(open-close»úÖÆµÄ´ò¿ªµ÷ÓÃzcdbOpenZcDbObjectÈ«¾Öº¯Êý£¬ÊÂÎñ»úÖÆµÄ´ò¿ªµ÷ÓÃZcDbTransactionManager::openObjectº¯Êý)

? ЧÂʸß

ÒòΪÔÚÿ¸ö¶ÔÏóµÄopen-modify-closeµÄ¹ý³ÌÖУ¬»áÓÐһϵÁÐÓ°ÏìЧÂʵÄÁ÷³ÌÖ´ÐС£ÕâЩÁ÷³Ì°üÀ¨£ºundoÊý¾ÝµÄ¼Ç¼Ó뱸·Ý£»ÊµÌåͼÏñµÄÖØÉú³É£»ºÍһЩ֪ͨµÄ·¢ËÍ¡£ÕâЩÁ÷³ÌÔÚcloseµ÷ÓõÄʱºò¶¼»áÖ´ÐС£ËùÒÔÈç¹ûÒ»¸ö¹¤×÷µ¥Ôª²ÉÓÃopen-close»úÖÆ¶ÔÉÏÊ®¸öÉõÖÁÉϰٸö¶ÔÏó½øÐÐÐ޸ĵÄʱºò£¬ÄǾͻáÖ´ÐÐͬÑù¶à´ÎÊýµÄÉÏÊöÁ÷³Ì¡£¶ø²ÉÓÃtransaction»úÖÆ£¬ÔòÖ»»áÔÚÊÂÎñ½áÊøµÄʱºòÖ´ÐÐÒ»´Î¡£

? ¸ü°²È«

ÔÚ¶à¸öÄ£¿é£¬¶à¸öÓ¦ÓóÌÐòͬʱ²Ù×÷Ò»ÕÅͼֽµÄÇé¿öÏ£¬Ê¹ÓÃÊÂÎñ»úÖÆÀ´´ò¿ª¶ÔÏó½øÐÐÐ޸ģ¬¾Í²»Óõ£ÐÄÁíÍâµÄÄ£¿é»òÁíÍâµÄÓ¦ÓóÌÐòÒѾ­´ò¿ªÁËÕâ¸ö¶ÔÏó¡£¶øopen-close»úÖÆÔÚÕâÖÖÇé¿öÏÂÊDz»°²È«µÄ¡£

? Ö§³ÖʵʱÏÔʾ

ÔÚÊÂÎñÖнøÐÐÌí¼Ó»òÐ޸ĵÄʵÌ壬ÔÚÊÂÎñδ½áÊø£¬Êý¾ÝδÈë¿âµÄÇé¿öÏ£¬Í¨¹ýÒÔϵĺ¯Êýµ÷Ó㬿ÉÒԴﵽʵʱÏÔʾµÄЧ¹û£º

zctrTransactionManager->queueForGraphicsFlush(); zctrTransactionManager->flushGraphics(); zcedUpdateDisplay();

ʹÓÃÊÂÎñµÄ×¢ÒâÊÂÏ

? Óëopen-closeÒ»ÆðʹÓÃҪעÒâ

ÊÂÎñ¿ÉÒÔÓëopen-close»ìºÏʹÓ㬵«±ØÐë¸÷×ÔÅä¶Ô£¬²»ÄÜÔÚZcDbTransaction::getObject()´ò¿ªÄ³¸ö¶ÔÏóºó£¬ÓÖµ÷ÓøöÔÏó×ÔÉíµÄclose()º¯Êý¹Ø±Õ¡£

? ´ò¿ª¶ÔÏóҪעÒâ

ÊÂÎñ»úÖÆËäÈ»¿ÉÒÔÔÚ¶ÔÏó´¦ÓÚopenForWrite»òopenForReadµÄ״̬Ï£¬µ÷ÓÃgetObject()ÒÔ¶Á»òдµÄ·½Ê½´ò¿ª£¬µ«ÊÇÔÚ¶ÔÏó´¦ÓÚopenForNotify״̬ÏÂʱ£¬ÊDz»ÄÜÓÃgetObject()ÒÔд·½Ê½´ò¿ªµÄ¡£

? ǶÌ×ʹÓÃҪעÒâ

ÊÂÎñ¿ÉÒÔǶÌ×ʹÓ㬼´ÔÚÒ»¸öÊÂÎñÖÐÔÙ¿ªÊ¼Ò»¸öÊÂÎñ¡£µ«Òª×¢ÒâÁ½µã£º 1. ²»ÄÜÔÚÊÂÎñ½áÊø»ò·ÅÆúµÄ¹ý³ÌÖпªÊ¼Ò»¸öÊÂÎñ¡£

2. ÔÚÓÐǶÌ×ÊÂÎñµÄÇé¿öÏ£¬Ö»ÓÐ×îÍâ²ãµÄÊÂÎñ½áÊøµÄʱºò£¬²Å»áÌá½»ËùÓÐÊÂÎñµÄÊý¾Ý¡£

ÊÂÎñ¹ÜÀí¹¦Äܽӿڣº

1£© ³¤ÊÂÎñ¹ÜÀíÀà

ZcApLongTransactionManager::checkIn ZcApLongTransactionManager::checkOut ZcDbLongTransaction::addToWorkSet ZcDbLongTransaction::newWorkSetIterator ZcDbLongTransaction::removeFromWorkSet ZcDbLongTransaction::originBlock ZcDbLongTransaction::originObject ZcDbLongTransaction::workSetHas 2£© ³¤ÊÂÎñ¹¤×÷¼¯±éÀúÆ÷

ZcDbLongTransWorkSetIterator::start ZcDbLongTransWorkSetIterator::step

ZcDbLongTransWorkSetIterator::curObjectIsErased ZcDbLongTransWorkSetIterator::curObjectIsPrimary ZcDbLongTransWorkSetIterator::curObjectIsRemoved ZcDbLongTransWorkSetIterator::done ZcDbLongTransWorkSetIterator::objected 3£© ÊÂÎñ¹ÜÀíÀà

ZcDbTransactionManager::getAllObjects ZcDbTransactionManager::getObject ZcDbTransactionManager::abortTransaction

ZcDbTransactionManager::addNewlyCreatedDBRObject ZcDbTransactionManager:: startTransaction 4£© ÊÂÎñÀà

ZcTransaction::getAllObjects ZcTransaction::getObject

Îĵµ¹ÜÀí

ZWCADÊÇÒ»¸öÖ§³Ö¶àÎĵµ£¨MDI£©µÄÓ¦ÓóÌÐò£¬²¢ÌṩÁËÒ»Ì×Õë¶ÔZWCADÎĵµ¹ÜÀíµÄÓ¦Óýӿڣ¬Ã¿Ò»¸ö´ò¿ªµÄdwgͼÐÎΪһ¸öZcApDocumentÎĵµ¶ÔÏó£¬Îĵµ¹ÜÀíÓ¦ÓÃÀàZcApDocManager¹ÜÀíËùÓеÄZcApDocumen¶ÔÏó¡£Îĵµµü´úÆ÷ZcApDocumentIteratorÌṩһÌ×µü´úµÄ·½·¨À´±éÀúµ±Ç°CAD´ò¿ªµÄËùÓÐÎĵµ¡£Îĵµ·´Ó¦Æ÷ZcApDocManagerReactorÓÃÀ´Í¨¸æµ±Ç°Îĵµ²Ù×÷µÄʼþ¡£

1£©Îĵµ¶ÔÏóÀàZcApDocument ZcApDocument::cDoc ZcApDocumen::docTitle ZcApDocument::fileName ZcApDocument::isReadOnly

2£©Îĵµ¹ÜÀíÓ¦ÓÃÀàZcApDocManager ZcApDocManager::addReactor

ZcApDocManager::appContextNewDocument ZcApDocManager::appContextOpenDocument ZcApDocManager::curDocument ZcApDocManager::document ZcApDocManager::documentCount

ZcApDocManager::newAcApDocumentIterator ZcApDocManager::openDocument ZcApDocManager::removeReactor

3£©Îĵµµü´úÆ÷ZcApDocumentIterator ZcApDocumentIterator::docment ZcApDocumentIterator::done ZcApDocumentIterator::step

4£© Îĵµ·´Ó¦Æ÷

ZcApDocManagerReactor::documentActivated ZcApDocManagerReactor::documentBecameCurrent ZcApDocManagerReactor::documentCreated

ZcApDocManagerReactor::documentCreateStarted ZcApDocManagerReactor::documentDestroyed ZcApDocManagerReactor::documentToBeActivated ZcApDocManagerReactor::documentToBeDeactivated ZcApDocManagerReactor::documentToBeDestroyed

´úÂëʾÀý£ºÈçºÎ»ñµÃµ½µ±Ç°ZWCAD´ò¿ªµÄËùÓÐÎĵµÃû³Æ£¿

void listDocuments() {

ZcDbDatabase* pDb = zcdbHostApplicationServices()->workingDatabase(); ZcApDocument* pCurDoc = zcDocManager->document(pDb); const char * strCurTitle = pCurDoc->docTitle();

zcutPrintf(\ZcApDocumentIterator* pDocIter;

pDocIter = zcDocManager->newZcApDocumentIterator(); zcutPrintf(\ZcApDocument* pDoc = NULL; int nIndex = 1;

for ( ; !pDocIter->done(); pDocIter->step()) {

pDoc = pDocIter->document();

const char * strTitle = pDoc->docTitle(); const char * strFileName = pDoc->fileName();

zcutPrintf(\

nIndex, strTitle, strFileName); }

}

delete pDocIter;

nIndex++;

Ìáʾ£ºÎĵµ¹ÜÀíÀàµÄ½Ó¿ÚµÄÏêϸʹÓÿÉÒԲο¼ZRXSDK\\Sample\\Ŀ¼ÏµÄʾÀý³ÌÐòDocumentManager

×Ô¶¨ÒåʵÌåOPM

ʲôÊÇ×Ô¶¨ÒåʵÌåOPM£¿

Õë¶Ô×Ô¶¨ÒåʵÌåÀàÐÍ£¬Óû§¿É×ÔÐж¨ÒåºÍÀ©Õ¹¸ÃʵÌåµÄÊôÐÔ£¬¸ù¾Ý¾ßÌåÐèÒª¶Ô×Ô¶¨ÒåʵÌåµÄÌØÐÔ¶¨ÒåºÍ·ÖÀà¡£Ö§³Ö¶àÖÖÊý¾ÝÀàÐ͵ÄÊôÐÔ£¬°üÀ¨£º×Ö·û´®¡¢ÕûÐÍ¡¢¸¡µã¡¢±äÌåµÈ¡£Ö§³Ö¶à¸öʵÌåÊôÐÔ¼¯ºÏµÄ½»¼¯¡£

×Ô¶¨ÒåʵÌåOPMÌØÐÔ£º

1£© ÏÔʾ×Ô¶¨ÒåÊôÐÔµÄÃû³Æ

2£© ÏÔʾ»ù±¾ÊôÐÔ£¨ÑÕÉ«£¬Í¼²ã£¬ÏßÐ͵ȣ© 3£© ÏÔʾ×Ô¶¨ÒåʵÌå×Ô¶¨ÒåµÄÊôÐÔ 4£© ·ÖÀàÏÔʾ×Ô¶¨ÒåʵÌåÊôÐÔ

5£© ±à¼­ÐÞ¸Ä×Ô¶¨ÒåʵÌåÊôÐÔ£¨Ö§³Ö¶à¸öʵÌåÊôÐÔ½»¼¯µÄ±à¼­£©

OPMʹÓÃ×¢ÒâÊÂÏ

1£© ĿǰËùÖ§³ÖµÄ×Ô¶¨ÒåʵÌåÊôÐÔÀ¸µÄÏÔʾ»¹²»È«Ã棬´ÓʵÌåÀàÐͶøÑÔ£¬½öÖ§³Ö´Ó

IZcadEntityÅÉÉúµÄ×Ô¶¨ÒåʵÌ壻

2£© ËùÖ§³ÖµÄOPM½Ó¿Ú½öÏÞÓÚÊý¾Ý²ãÃæ£¨ÈçIOPMPropertyExpander£¬

IOPMPropertyExtension£©£¬Ôݲ»Ö§³ÖÓë½çÃæÏà¹ØµÄ½Ó¿Ú£¨ÈçIPerPropertyDisplay£©¡£

Ìáʾ£º×Ô¶¨ÒåʵÌåOPMµÄʹÓÿɲο¼ZRXSDK\\Sample\\Ŀ¼ÏµÄʾÀý³ÌÐòZRX_Misc

MFCÀ©Õ¹UIÀà

ZRXÖ§³ÖÓû§Ê¹ÓÃMFCÀ´À©Õ¹¿ª·¢×Ô¼ºµÄÓ¦ÓóÌÐò¡£ÀýÈçÔÚZRXÓ¦ÓóÌÐòÉÏʹÓÃMFC´´½¨CDialog¡¢CButton¡¢CComboBox¡¢CEditµÈ¿Ø¼þ¡£Í¬Ñù£¬ ZRXÌṩÁ˼¸¸ö»ù±¾µÄUI½Ó¿ÚÀ๩¶þ´Î¿ª·¢Ê¹Óãº

CZdUiBaseDialog¡ª¡ª¼Ì³ÐÓÚCDialog£¬Ìṩ»ù±¾¶Ô»°¿ò´°¿Ú¹¦ÄÜ

CZdUiDailog¡ª¡ª¼Ì³ÐÓÚCZdUiBaseDialog£¬Ìṩ´°¿Ú³ß´ç±ä»¯ºÍÓÀ¾ÃÊý¾ÝµÄ´æ´¢¹¦ÄÜ CZcUiDialog¡ª¡ª¼Ì³ÐÓÚCZdUiDailog£¬À©Õ¹ºÍÍêÕûCZdUiDailogÀàµÄ¹¦ÄÜ

¿ÉÍ£¿¿Ãæ°å£¨DockControlBar£©

ZWCAD¿ÉÍ£¿¿Ãæ°å¹¦ÄÜÖ÷ҪʹÓÃÈ«¾Ö½Ó¿Úº¯Êýzdsw_excuteUICommand, °ÑÌØ¶¨¹¦ÄܵĻص÷º¯Êýת½Óµ½ZWCADÖ÷UIÏß³ÌÉÏÖ´ÐС£Òò´Ë£¬ÔÚÓ¦Óøù¦ÄÜǰ£¬ÐèÒªÊÂÏÈÍê³ÉÌØÐÔ¹¦ÄܵĻص÷º¯Êý¡£

È«¾Ö½Ó¿Úº¯Êý˵Ã÷£º

UINT zdsw_excuteUICommand(

UICOMMANDPROC pfnUICMDProc, //Óû§¶¨Ò廨µ÷º¯ÊýÖ¸Õë LPVOID pParam );

²Î Êý£º

pfnUICMDProc¡ª¡ªÓû§×Ô¶¨Ò庯ÊýÖ¸Õ룬Óû§±ØÐë°Ñ´´½¨¡¢Ð޸ġ¢ÏÔʾ½çÃæÔªËØµÄ´úÂëдÔڸú¯ÊýÄÚ¡£

pParam¡ª¡ªÓû§×Ô¶¨Òå²ÎÊý£¬¸Ã²ÎÊýÓû§¿ÉÓÉÓû§¸ù¾ÝÐèÒª×ÔÓÉ´«Öµ£¬×îÖÕ»á×÷ΪָÕëpfnUICMDProcËùÖ¸ÏòµÄº¯ÊýµÄÊäÈë²ÎÊý¡£ ·µ»ØÖµ£º

Èç¹ûpfnUICMDProcΪ¿Õ»òµ÷Óùý³Ì·¢Éú´íÎ󣬷µ»ØÖµÎª-1£¬·ñÔò·µ»ØpfnUICMDProcËùÖ¸Ïò»Øµ÷º¯ÊýÖ´ÐеĽá¹û״̬¡£

//Óû§×Ô¶¨Òå²ÎÊý

»Øµ÷º¯Êý¶¨Òå˵Ã÷£º

¿ÉÍ£¿¿Ãæ°å¶¨ÒåµÄ»Øµ÷º¯Êý¸ñʽÈçÏ£º

UINT CallBackFunc(LPVOID pParam) {

//To Do: }

return -1;

´úÂëʾÀý£º

// ¶¨Òå¿ÉÍ£¿¿´°¿Ú¹¦ÄÜÀ࣬²¢ÊµÏÖ class CSCRMenu : public CDialogBar {

DECLARE_DYNAMIC(CSCRMenu)

public:

CSCRMenu();

virtual ~CSCRMenu();

virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);

public:

protected:

CComboBox m_LayerComboBox; BOOL ScreenMenu();

CListCtrl m_EntityInfoList;

protected:

void InitDCEditButton(); void InitLayerComboBox();

protected:

DECLARE_MESSAGE_MAP()

public: };

//¶¨ÒåÓû§×Ô¶¨Ò廨µ÷º¯Êý£º

UINT CreateScreenMenu(LPVOID pParam) { }

// ת½Ó¹¦Äܺ¯Êýµ½ZWCADÖ÷UIÏß³ÌÉÏÖ´ÐÐ void CreatSCRMenu() { }

zdsw_executeUICommand(CreateScreenMenu, &m_SCRMenu); if(pParam) { }

return -1;

return ((CSCRMenu*)pParam)->ScreenMenu(); afx_msg void OnBtnMessagebox(); afx_msg void OnBtnLine();

afx_msg LRESULT OnInitDialog(WPARAM wParam, LPARAM lParam); afx_msg void OnBtnDCEdit(); afx_msg void OnBtnGetObjInfo(); afx_msg void OnBtnCloseupLayer();

×¢ÒâÊÂÏ

1£©´´½¨½çÃæµÄËùÓÐÔªËØ±ØÐëÔÚÌØ¶¨º¯ÊýÄÚʵÏÖ£¬²¢ÒԸú¯ÊýÖ¸Õë×÷ΪÊäÈë²ÎÊý£¬Í¨¹ýʹÓÃÈ«¾Ö½Ó¿Úº¯Êýzdsw_ExecuteUICommandµ÷ÓÃÀ´´ïµ½¹¦ÄÜÉϵÄʵÏÖ£¬ÇмDz»ÄÜÖ±½ÓÔÚZRXÃüÁîÀï´´½¨Óû§½çÃæ£»

2£©ÔÚÓû§ÏûÏ¢ÏìÓ¦´úÂëÀÐèÒªÐÞ¸ÄͼֽÊý¾ÝµÄ²Ù×÷ʱ£¬±ØÐëµ÷ÓÃzcedPostCommand·¢ËÍZRXÃüÁîÃûÒÔ´¥·¢ZRXÃüÁÊýµÄ·½Ê½½øÐС£ÓÉÓÚ´Ó·¢ËÍZRXÃüÁîÃûµ½Ö´ÐÐZRXÃüÁî²»ÊǼ´Ê±µÄ£¬ËùÒÔµ÷ÓÃzcedPostCommandÖ®ºó²»Ò˱àдÆäËüÂß¼­´úÂë¡£

3£© µ÷Óô˽ӿڴ´½¨Óû§½çÃæµÄ¶þ´Î¿ª·¢Ó¦ÓóÌÐò±ØÐëΪMFCÀ©Õ¹DLL£¬·ñÔòÎÞ·¨Õý³£´´

½¨Óû§½çÃæ¡£

È«¾Öº¯ÊýÓ¦ÓÃ

ZRX³ýÁËÌṩÁËһЩӦÓù¦ÄÜÀà½Ó¿Ú£¬Í¬Ê±Ò²ÌṩÁ˸÷ÖÖÓ¦ÓõÄÈ«¾Öº¯Êý£¬ÏÞÓÚÕ½ڣ¬²»ÔÚ´ËÒ»Ò»²ûÊö£¬ÏêϸÇë²Î¼û ¡¶¸½Â¼A£º¡·¡£

ZZRÒÆÖ² RXÖ²Ö¸XÒÆÖ¸ÄÏÄÏ ±¾Ö¸ÄÏÖ÷Òª½²Êö£¬ÈçºÎ´ÓÔ­ÔÚAutoCADÉÏÔËÐеÄObjectARXµÄÓ¦ÓóÌÐòÒÆÖ²µ½ZWCADÉÏ£¬²¢ÇÒÄܹ»Õý³£¡¢ÕýÈ·µØÔËÐС£ÔÚÇ°Ãæ¡¶ZRX½éÉÜ¡·Õ½ÚÀÎÒÃÇÒѾ­½éÉÜÁËZRXÔÚ´úÂëÉÏÒѾ­×÷µ½Äܹ»ºÜºÃµØ¼æÈÝARX´úÂ룬Òò´ËÔÚARX³ÌÐòÔÚÏòZRXÒÆÖ²Ê±£¬¼¸ºõ²»ÓÃÐÞ¸ÄÓû§´úÂ룬ͨ¹ýÐ޸Ť³ÌÅäÖã¬ÖØÐ±àÒëÁ´½Ó£¬±ã¿ÉÒÔת½Óµ½ZWCADÉÏÀ´ÔËÐУ¬ÒÔÏÂÊÇÕë¶Ô²»Í¬°æ±¾¼äÒÆÖ²µÄ²½Öè¡£

´ÓObjectARX 2006ÒÆÖ²µ½ZRX

ÒÆÖ²µÄ²½Ö裺

1£©Ê×ÏÈÓÃVisual Studio 2008´ò¿ª¸Ã¹¤³Ì£¬°´ÌáʾÐÅÏ¢Ìáʾ½«Ô­¹¤³ÌÉý¼¶Îªvc9¹¤³Ì¡£ 2£©ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄC/C++-->General(³£¹æ)-->Additional(¸½¼Ó°üº¬Ä¿Â¼)ÖУ¬ÐÞ¸ÄÍ·Îļþ°üº¬Â·¾¶ÎªZRXSDK\\arxportµÄ¶ÔÓ¦µÄĿ¼£¬É¾µôÔ­ÏȵÄÍ·Îļþ°üº¬Â·¾¶¡£ÀýÈçÍ·Îļþ°üº¬Â·¾¶Îª¡°C:\\ZRXSDK\\ arxport¡±¡£

3£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄLinker(Á´½ÓÆ÷)-->Input(ÊäÈë)-->Additional Dependencies(¸½¼ÓÒÀÀµ

Ïî)ÖУ¬Ôö¼ÓËùÒÀÀµµÄ¿âZRX.lib£¬²¢Í¬Ê±È¥µôÔ­ÏȵÄÒÀÀµÏî¡£

3£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄLinker(Á´½ÓÆ÷)-->General(³£¹æ)-->Additional Dependencies(¸½¼Ó¿â

Ŀ¼)ÖУ¬Ð޸ĿâÎļþ°üº¬Â·¾¶ÎªZRXSDK\\lib\\vc9µÄ¶ÔÓ¦µÄĿ¼£¬É¾µôÔ­ÏȵĿâÎļþ°üº¬Â·¾¶¡£ÀýÈç¿âÎļþ°üº¬Â·¾¶Îª¡°C:\\ZRXSDK\\ lib\\vc9¡±¡£

4£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄLinker(Á´½ÓÆ÷)-->General(³£¹æ)-->Output File(Êä³öÎļþ)µÄºó׺¸Ä

Ϊdll.

5£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°General(³£¹æ) --> Character Set(×Ö·û¼¯)¡±£¬ È·±£Ñ¡ÏîΪ¡°Use

Muti-Byte Character Set£¨Ê¹Óöà×Ö½Ú×Ö·û¼¯£©¡±

7) ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°C/C++-->Language(ÓïÑÔ)--> Treat wchart_t as Built-in Type(½«wchar_tÊÓΪÄÚÖÃÀàÐÍ)¡±£¬È·±£Ñ¡ÏîΪ¡°No(·ñ)¡±

8£©È·±£ÉÏÊö¹ý³Ì×¼±¸ÎÞÎ󣬱àÒë³ÌÐò£¬Éú³É¿ÉÒÔÖ´ÐеÄdllÎļþ 9£©Ê¹Óá°APPLOAD¡±ÃüÁ¼ÓÔØ±àÒë³É¹¦µÄdll£¬²¢Ö´ÐÐÃüÁî

´ÓObjectARX 2007/2008ÒÆÖ²µ½ZRX

´ÓObjectARX 2007/2008 µÄÒÆÖ²µÄ²½ÖèºÍObjectARX 2006»ù±¾ÉÏÒ»Ñù£¬Ôڴ˲»ÔÚÖØ¸´ÐðÊö¡£µ«»¹ÊÇ´æÔÚÁ½µã²»Í¬µÄµØ·½ÐèҪעÒâÏ£º

1£© ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄ¡°General(³£¹æ) --> Inherited Propjet Property Sheets(¼Ì³ÐµÄÏîÄ¿ÊôÐÔ

±í)¡±£¬ È·±£Ñ¡ÏîΪ¡°¿Õ¡±

2) ÔÚ¹¤³ÌÊôÐÔ¶Ô»°¿òµÄLinker(Á´½ÓÆ÷)-->Input(ÊäÈë)-->Module Definition File(Ä£¿é¶¨ÒåÎļþ), Èç¹ûʹÓÃÁËObjectARX\\IncµÄ¡°AcRxDefault.def¡±Îļþ, ÐèÒª½øÐÐÇå¿Õ¡£»òÕßÔÚ×Ô¼ºÓ¦ÓóÌÐòÀïÔö¼ÓÏàÓ¦µÄ.defÎļþ

Õë¶ÔARX UIµÄÒÆÖ²

Ŀǰ£¬ ZRX»¹Ã»ÓÐÌṩºÍARX UIÒ»ÑùµÄ¹¦Äܽӿڡ£Èç¹ûÓû§³ÌÐòʹÓÃÁË´óÁ¿µÄARX UI½Ó¿Ú£¬ÔÚÒÆÖ²ARX³ÌÐòʱ£¬¿ÉÒÔ½«ARX UI½Ó¿ÚÔÝÌæ»»ÎªÎ¢Èí MFCµÄ UIµÄ·½Ê½¡£Í¨¹ýµ÷ÓÃ΢ÈíMFC UI¹¦ÄÜ´ïµ½Óû§½»»¥Ä¿µÄ£¬ÒÔÏÂÊǽ«ARX UI Ìæ»»MFC ÀàµÄ¶ÔÓ¦¹ØÏµ£º CAcUiSelectButton ¡ª¡ªCButton CAcUiBitmapButton ¡ª¡ªCBitmapButton AcFile ¡ª¡ªCFile CAcUiFileDialog CAcUiEdit

¡ª¡ªCfileDialog ¡ª¡ªCEdit

AcCStdioFile ¡ª¡ªCstdioFile CAcUiListCtrl ¡ª¡ªClistCtrl

CNavListCtrl ¡ª¡ªClistCtrl CAdUiListBox CAcUiListBox CAcUiTab CNavFilter

¡ª¡ªCList ¡ª¡ªClist ¡ª¡ªCtabCtrl ¡ª¡ªCStringArray ¡ª¡ªCtypedPtrArray ¡ª¡ªCTypedPtrArray ¡ª¡ªCStatic ¡ª¡ªCHeaderCtrl ¡ª¡ªCcomboBox

CNavDataArray CNavFilterArray CAdUiGroupCtrl CAdUiHeaderCtrl CAdUiComboBox

ÒÆÖ²×¢ÒâÊÂÏî

4. ZRXSDK for ZWCAD 2010 ²ÉÓÃMicrosoft Visual C++ 2008 ±àÒë»·¾³£¬ÔÚÒÆÖ²Ê±Èç¹û±»

ÒÆÖ²µÄÊǵͰ汾µÄ¹¤³ÌÎļþ£¬ÐèÒª½øÐÐÉý¼¶×ª»»£»

5. ZRXSDK for ZWCAD 2010 ¼æÈÝObjectARX 2008¼°ÒÔϰ汾£»

6. ZRXSDK for ZWCAD 2010 Ŀǰֻ֧³ÖʹÓõĶà×Ö½ÚMBCS£¬¶ø²»Ö§³ÖUNICODE£¬ÔÚ

¹¤³ÌÊôÐÔÅäÖöԻ°¿òµÄ¡°General(³£¹æ) --> Character Set(×Ö·û¼¯)¡±£¬ È·±£Ñ¡ÏîΪ¡°Use Muti-Byte Character Set£¨Ê¹Óöà×Ö½Ú×Ö·û¼¯£©¡±£»

7. ¹¤³ÌÊôÐÔÅäÖöԻ°¿òµÄ¡°C/C++-->Language(ÓïÑÔ)--> Treat wchart_t as Built-in Type(½«

wchar_tÊÓΪÄÚÖÃÀàÐÍ)¡±È·±£Ñ¡ÏîΪ¡°·ñ¡±¡£

ZZR³£¼û RX¼ûÎÊX³£ÎÊÌâÌâ½â½â´ð´ð ˵Ã÷£ºÒÔϵÄÎÊÌâ½â´ðÕë¶ÔARX´úÂëÐÎʽµÄZRX³ÌÐòͬÑùÓÐЧ£º

[0001] ΪʲôʹÓÃÁËÃüÁîºêZCED_ZRXCOMMAND_ENTRY_AUTO(appClassName, cmdGroupName, globCmd, locCmd, cmdflags, UIContext)£¬ ÆäÖÐÃüÁîÃû¡°locCmd¡±Õâ¸öÃüÁîÔÚZWCADÀï²»ÄÜʶ±ð£¿

½â´ð£ºÕâ¸öÎÊÌâ¸úZWCADµÄÃüÁîÃû»úÖÆÓйØÏµ£¬Ä¿Ç°ZWCADÖ»ÄÜ×öµ½Ê¶±ðÒ»¸öÃüÁîÃûglobCmd£¬ locCmdÃüÁîÔÝʱ»¹²»Ö§³Ö£¬ Öî¶à²»±ãÇëÁ½⣡

[0002] ΪʲôzcedPostCommandPrompt¡¢zcedAddDropTarget£¬zcedRemoveDropTargeµÈÈ«¾Öº¯ÊýÔÚ±àÒëÁ´½ÓÌáʾÎÞ·¨Ê¶±ðµÄÍⲿº¯Êý£¿

½â´ð£ºÖ±½ÓÔÚµ÷Óøú¯ÊýµÄcppÎļþÀïInclude \

[0003 ] Ϊʲô ZcDbDictionary::newIterator : function does not take 1 arguments ? **Code sample:

ZcDbDictionary *pGroupDict = NULL;

pDb->getGroupDictionary(pGroupDict,ZcDb::kForRead); ZcDbDictionaryIterator

½â´ð£ºZRXÊÇÒÔObject ARX 2008ÀïµÄAPIÀàΪ»ù×¼£¬ÔÚObject ARX 2006 ÀïµÄ¸Ãº¯ÊýAcDbDictionary::newIterator(AcRx::kDictCollated)´øÒ»¸ö²ÎÊý£¬ ÔÚObject ARX 2008 Àï²»´ø²ÎÊý¡£¸ÃÎÊÌâÔÚʹÓÃÉϲ»ÊÜÓ°Ïì¡£

[0004] ΪʲôÎҵŤ³ÌÔÚ±àÒëÁ´½ÓµÄʱºò£¬VC¿ª·¢Æ½Ì¨ÌáʾÎÞ·¨½âÎöµÄÍⲿ·ûºÅ\STR@_com_util@@YGPA_WPBD@Z) ?

½â´ð: Õâ¸öÎÊÌâ¿ÉÒÔͨ¹ý¸Ä¹¤³ÌÉèÖýâ¾ö

ConfigurationProperties->C/C->LanguageTreatwchar_tasBuilt-inType=No ×¢Òâ:#progma comment(lib, \

[0005] ΪʲôÐèÒª½«ZRXµÄ¹¤³ÌÅäÖÃ->C/C++->ÓïÑÔ->½«wchar_tÊÓΪÄÚÖÃÀàÐ͸ÄΪ¡°·ñ¡±£¬»òÕß½«wchar_tÊÓΪÄÚÖÃÀàÐÍÓÐʲô×÷Óã¿

*pDictIter2

=

pGroupDict->newIterator(ZcRx::kDictCollated);// Complie error!

½â´ð: ½«wchar_tÊÓΪÄÚÖÃÀàÐÍÓÐʲô×÷Ó㿱àÒëÆ÷¿ÉÒÔ¶Ôwchar_t×öÀàÐͼì²é£¬·ñÔòwchar_tÖ»ÊÇÒ»¸ö¼òµ¥µÄtypedef.CInPlaceEdit&operator=(constCInPlaceEdit&a){}ÄãÉêÃ÷ÁË·µ»ØÀàÐÍ£¬È´Ã»ÓÐÔÚʵÏÖÖÐÌṩ·µ»ØÖµ£¬ÊDz»¶ÔµÄ¡£Èç¹û²»Ï£ÍûÕâ¸öº¯Êý±»µ÷Ó㬿ÉÒÔ²»¼Ó{}

[0006] ΪʲôÎҵŤ³ÌÔÚ±àÒëÁ´½Óʱ²úÉúÒÔÏ´íÎó£¿

¡°*** error LNK2001: unresolved external symbol acrxGetApiVersion *** fatal error LNK1120: 1 unresolved externals

*** fatal error LNK1141: failure during build of exports file¡±

½â´ð£º ´ò¿ª¹¤³ÌµÄ.defÎļþ£¬ Ö±½Ó½«Êä³ö½Ó¿Ú¡°acrxGetApiVersion¡±×¢Ê͵ô£¡ Òò

ΪZRXĿǰûÓÐÌṩ¶Ô¸Ã½Ó¿ÚµÄÊä³ö¡£

È磺 ¡°EXPORTS

acrxEntryPoint

PRIVATE

;acrxGetApiVersion PRIVATE¡±

×¢Ò⣺ ÔÚZRXSDK for ZWCAD 2010Àï¸ÃÎÊÌâÒѾ­×÷ÁËÈÝ´í´¦Àí

[0007] ZRXÔÚʹÓÃresbuf->resval.rstringʱ£¬ÔÚʹÓÃads_relrbº¯Êý¶Ôresbuf½øÐÐÄÚ´æÊÍ·Åʱ£¬ÒýÆðËÀ»úÎÊÌ⣿

½â´ð£º ZRX resbuf ÔÚʹÓÃresbuf.resval.rstringʱ£¬ ÐèÒªÏÈ·ÖÅäÒ»¿éÄÚ´æ¿Õ¼ä£¬È»ºóÔÙͨ¹ý

strcpyº¯Êý½«Öµ¸³¸øresbuf.resval.rstring£¬ÕâÑù¾Í²»»áÊÍ·ÅresbufʱÒýÆðËÀ»úÎÊÌâ¡£´úÂë

ʾÀýÈçÏ£º

[0008] ΪʲôʹÓÃÁË#include , ´úÂëÒýÓ÷½Ê½Èçstd::map VarµÈ£¬¹¤³ÌÔÚ±àÒëÁ´½Óʱ²úÉúÈçÏ´íÎó£¿

¡°error LNK2001: unresolved external symbol ¡°__declspec(dllexport) public:__thiscall std::basic_string, calss std::allocator >¡­¡­¡±

½â´ð£º Ô­ÒòÊǹ¤³ÌÔÚÁ´½ÓʱÕÒ²»µ½¡°msvcprtd.lib¡±¿âÎļþ£¬ÔÚ¹¤³ÌÅäÖÃÀïÀïÔö¼ÓÒÀÀµ¿âÏî¡° msvcprtd.lib¡±¼´¿É¡£

struct resbuf* result; result = zds_newrb(RTSTR);

result->resval.rstring = new ACHAR[64]; strcpy(result->resval.rstring, \zds_relrb(result);