最近,有一個這樣的需求,所以把解決方法給貼出來一下。
首先,cad判斷圖紙是否被修改過,是根據一個變量的值來判斷的,這個變量就是 DBMOD,很多人肯定會想到,那我把這個變量的值給修改成0或者是-1不就行了嗎? 很不幸告訴你,這個變量是只讀的。那么怎么辦呢? 幸好桌子公司還挺厚道的,導出了一個接口給我們來修改database的這個flag,只不過是在官方的sdk文檔里沒有給出來而已,這個接口的原型如下:
//聲明設置數據庫模式的函數
extern long acdbSetDbmod(AcDbDatabase * pDb, long newVal);
這個函數在我以前的blog文章中也提到過,按照我上面的方法,聲明一下,就可以使用這個接口來解決問題。
好了,現在有解決問題的接口啊,那么設置的時機應該在什么時候? 我想說的是,一個是,在你所有的修改操作之后,還有一個就是關閉文檔之前。
明顯的后面一個實現起來更現實,因為,我們知道,可以通過反應器這個東東來實現,我就是通過反應器來實現的,能過editor反應器來hook Quit命令和CLOSE命令 willstart的時候,來設置對應數據庫的flag,這樣就可以認cad不彈出提示保存的對話框了,代碼如下:
void AMenEditorReactor::commandWillStart(const ACHAR * cmdStr)
{
CString strCmd = cmdStr;
strCmd.MakeUpper();
if( !strCmd.CompareNoCase(_T("_CLOSE")) || !strCmd.CompareNoCase(_T("CLOSE")) )
{
const TCHAR* szBuffer = NULL;
acdbCurDwg()->getFilename(szBuffer);
CString strRemoteFile = AMenFileManager::GetInstance()->GetLocaleBindFile(szBuffer);
if( !strRemoteFile.IsEmpty() )
{
struct resbuf res;
acedGetVar(L"DBMOD",&res);
if(res.resval.rint) // If changes have been made...
{
//清除保存位
acdbSetDbmod(acdbCurDwg(),0);
}
}
}
else if( !strCmd.CompareNoCase(_T("_QUIT")) || !strCmd.CompareNoCase(_T("QUIT")) )
{
AcApDocumentIterator *pIt;
pIt=acDocManager->newAcApDocumentIterator();
while(!pIt->done())
{
// For each open document...
AcApDocument* pDoc=pIt->document();
acDocManager->setCurDocument(pDoc);
struct resbuf res;
acedGetVar(L"DBMOD",&res);
if(res.resval.rint) // If changes have been made...
{
acDocManager->lockDocument(pDoc); // Lock
acdbSetDbmod(pDoc->database(),0); // clear changes flag
acDocManager->unlockDocument(pDoc);//unlock
}
pIt->step();
}
delete pIt;
}
AcEditorReactor::commandWillStart (cmdStr)
}
PS: 另外還有方法的,記得AcApDocment類有兩個成員接口,pushDbmod和popDbmod。 看文檔可以得知,pushDbmod接口是copy當前DBMOD變量的值放在DBMOD棧上,從而pushDbmod之后對database的修改,改變是將是你copy后的這個值,在編輯完畢后,你再把這個值給popDbmod,這樣就可以做到系統修改的是一個臨時值,而不是database的DBMOD,而當系統判斷database是否被修改的時候,就會以database本身的DBMOD來判斷,這樣也就不會提示保存對話框了。所以,這個模型可以如下:
修改前:pushDbmod
修改ing
修改后:popDbmod
關閉:不提示
0了。
相關文章
- 2021-09-08BIM技術叢書Revit軟件應用系列Autodesk Revit族詳解 [
- 2021-09-08全國專業技術人員計算機應用能力考試用書 AutoCAD2004
- 2021-09-08EXCEL在工作中的應用 制表、數據處理及宏應用PDF下載
- 2021-08-30從零開始AutoCAD 2014中文版機械制圖基礎培訓教程 [李
- 2021-08-30從零開始AutoCAD 2014中文版建筑制圖基礎培訓教程 [朱
- 2021-08-30電氣CAD實例教程AutoCAD 2010中文版 [左昉 等編著] 20
- 2021-08-30電影風暴2:Maya影像實拍與三維合成攻略PDF下載
- 2021-08-30高等院校藝術設計案例教程中文版AutoCAD 建筑設計案例
- 2021-08-29環境藝術制圖AutoCAD [徐幼光 編著] 2013年PDF下載
- 2021-08-29機械AutoCAD 項目教程 第3版 [繆希偉 主編] 2012年PDF