使用事务的注意事项:
? 与open-close一起使用要注意
事务可以与open-close混合使用,但必须各自配对,不能在ZcDbTransaction::getObject()打开某个对象后,又调用该对象自身的close()函数关闭。
? 打开对象要注意
事务机制虽然可以在对象处于openForWrite或openForRead的状态下,调用getObject()以读或写的方式打开,但是在对象处于openForNotify状态下时,是不能用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线程上执行。因此,在应用该功能前,需要事先完成特性功能的回调函数。