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
¡°error LNK2001: unresolved external symbol ¡°__declspec(dllexport) public:__thiscall std::basic_string
½â´ð£º ÔÒòÊǹ¤³ÌÔÚÁ´½ÓʱÕÒ²»µ½¡°msvcprtd.lib¡±¿âÎļþ£¬ÔÚ¹¤³ÌÅäÖÃÀïÀïÔö¼ÓÒÀÀµ¿âÏî¡° msvcprtd.lib¡±¼´¿É¡£
struct resbuf* result; result = zds_newrb(RTSTR);
result->resval.rstring = new ACHAR[64]; strcpy(result->resval.rstring, \zds_relrb(result);