Warning: mkdir(): No space left on device in /www/wwwroot/test001/func.php on line 253

Warning: file_put_contents(./cachefile_yuan/ilouw.com/cache/5d/b7aa2/f381b.html): failed to open stream: No such file or directory in /www/wwwroot/test001/func.php on line 241
CAXA2007、2011 提取標題欄屬性問題,望不吝賜教,謝謝。 - 咖迷社區(CAXA彩神iv) - Powered by Discuz!

彩神iv

咖迷社區(CAXA彩神iv)

標題: CAXA2007、2011 提取標題欄屬性問題,望不吝賜教,謝謝。 [打印本頁]

作者: rumly    時間: 2011-5-17 19:32
標題: CAXA2007、2011 提取標題欄屬性問題,望不吝賜教,謝謝。
2007 提取標題欄屬性問題:
我使用函數ebPaGetHeaderBlock 獲取方式如下:
rtn = ebPaGetHeaderBlock(&SysEntBase,&pBlock,str);
if(rtn != RT_NORMAL){
  AfxMessageBox("ebPaGetHeaderBlock失敗");
  return RT_FAILED;
}
AfxMessageBox(str);
最後彈出來的對話框竟然是圖框的名稱,而不是標題欄的名稱,感覺非常奇怪。
采用另外一種方式獲取,但是中途CAXA2007會出現內存不可讀,然後終止程序。獲取的方式如下:
CBlock *pTitleBlock = NULL;
pTitleBlock = GetFrameBlock("*HEADER", &SysEntBase);//*HEADER
if (NULL==pTitleBlock){
  AfxMessageBox("GetFrameBlock 獲取失敗");
  return RT_FAILED;
}
AfxMessageBox(pTitleBlock->name);
CStringArray attrName;
CStringArray attrValue;
ebPaGetHeaderAttArray(pTitleBlock,attrName,attrValue);
str.Format("%d",attrValue.GetSize());

AfxMessageBox(str);
for(int attrCount = 0;attrCount<attrValue.GetSize();attrCount++){
  strTemp.Format(attrName.GetAt(attrCount)+"="+attrValue.GetAt(attrCount));
  AfxMessageBox(strTemp);
}
另外,我嚐試使用2011來提取屬性,同樣也失敗了,
2011采用CRX方式來獲取,但是缺少方法:
程序如下:
CRxDbBlockTable *pBlockTable;
crxdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, CRxDb::kForRead);
CRxDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(CRXDB_MODEL_SPACE, pBlockTableRecord,CRxDb::kForRead);
pBlockTable->close();
//創建塊表記錄遍曆器,用遍曆器遍曆實體
CRxDbBlockTableRecordIterator *pBlockIterator;
CRxDbBlockReference    *pAttRef;
pBlockTableRecord->newIterator(pBlockIterator);
for (;!pBlockIterator->done();pBlockIterator->step()){
  CRxDbEntity *pEntity;
  pBlockIterator->getEntity(pEntity, CRxDb::kForRead);
  //crxutPrintf(TEXT("\n%s"),pEntity->desc()->name());
  pAttRef = CRxDbBlockReference::cast(pEntity);
  if (pAttRef != NULL) {
   CRxDbObjectIterator *pBlkRefAttItr=pAttRef->attributeIterator();
   for (pBlkRefAttItr->start(); !pBlkRefAttItr->done();pBlkRefAttItr->step())
   {
    CRxDbObjectId attObjId;
    attObjId = pBlkRefAttItr->objectId();
    CRxDbAttribute *pAtt = NULL;
    CDraft::ErrorStatus es = crxdbOpenObject(pAtt, attObjId, CRxDb::kForRead);
    if (es != CDraft::eOk){
     crxutPrintf(TEXT("\nFailed to open attribute"));
     delete pBlkRefAttItr;
     continue;
    }
    crxutPrintf(TEXT("\n%s"),pAtt->tag());
    pAtt->close();
   }
   
  }
但是沒有attributeIterator方法,係統裏麵的頭文件注釋掉了,我去掉頭文件的注釋,但是鏈接的時候會出錯。
希望各位知道的兄弟,能夠幫幫我,謝謝。

作者: admin    時間: 2011-5-17 19:37
已轉給CAXA開發,需要等明天上午答複了。。。
作者: beifangren    時間: 2011-5-17 22:50
希望樓主以後能成為marswu一樣的大師。
作者: rumly    時間: 2011-5-18 08:21
謝謝各位,靜候佳音。
作者: zzlg    時間: 2011-5-18 11:22
頭文件裏attributeIterator是注掉的,說明CRX還不支持這個方法
作者: rumly    時間: 2011-5-18 11:26
樓上的兄弟,我從查看DLL的導出函數,DLL中存在這個方法,而且對應的類也有了。
作者: zzlg    時間: 2011-5-18 11:29
使用ebPaGetHeaderBlock返回的名稱不正確,可能標題欄裏記錄的名稱信息是錯誤的。具體情況需要分析提取的原始文件才能知道。函數本身應當是沒有錯誤的。
GetFrameBlock是非開放的內部函數,不建議在二次開發過程中使用。
作者: zzlg    時間: 2011-5-18 13:09
標題: 回複 6# rumly 的帖子
請教一下你查看的是哪個dll,版本號是多少?
作者: rumly    時間: 2011-5-18 13:49
2007中,我調用ebPaGetHeaderBlock返回的是圖框的信息,請看下麵的截圖,謝謝。

CAXA版本信息
(, 下載次數: 2017)


源碼
(, 下載次數: 2003)

圖紙信息,使用標準模版新建一個空白的圖紙,並設置相關信息。
(, 下載次數: 2012)

運行後程序彈出的對話框:

(, 下載次數: 2029)


作者: rumly    時間: 2011-5-18 13:56
頭文件裏attributeIterator是注掉的,說明CRX還不支持這個方法
zzlg 發表於 2011-5-18 11:22:00


這個方法是提取屬性的,如果CRX還不支持這個方法,那麽
我能否理解為CAXA2011不能夠提取標題欄屬性?
謝謝。

作者: rumly    時間: 2011-5-18 14:00
請教一下你查看的是哪個dll,版本號是多少?
zzlg 發表於 2011-5-18 13:09:00


(, 下載次數: 832)



(, 下載次數: 834)






作者: rumly    時間: 2011-5-18 14:01
希望能夠得到各位大佬的指點,謝謝。
作者: zzlg    時間: 2011-5-18 14:21
標題: 回複 9# rumly 的帖子
我試了一下,在電子圖板2007裏調入豎A4圖框和國標標題欄。自己寫了一個簡單的二次開發程序,隻獲取標題欄名稱並彈窗顯示。顯示結果是正確的。
代碼如下:
CBlock* pBlock = NULL;
CString str;
ebPaGetHeaderBlock(&SysEntBase,&pBlock,str);
AfxMessageBox(str);
---
。。。不清楚你的問題是什麽原因了
不過我的版本是3.2企業版

作者: zzlg    時間: 2011-5-18 14:25
標題: 回複 11# rumly 的帖子
你看到的是Object的Iterator,不是Attribute的iterator,這兩個迭代器是不一樣的。提取屬性需要的是屬性的迭代器。
--
你的版本應當是2011R2吧,我看過這個版本的crxdb中是沒有輸出attributeiterator的

作者: rumly    時間: 2011-5-18 14:34
你看到的是Object的Iterator,不是Attribute的iterator,這兩個迭代器是不一樣的。提取屬性需要的是屬性的迭代器。
--
你的版本應當是2011R2吧,我看過這個版本的crxdb中是沒有輸出attributeiterator的

zzlg 發表於 2011-5-18 14:25:00


嗬嗬,我看錯了,剛找了一下,的確沒有找到對應的導出函數。那麽2011是否就不能夠獲取屬性呢了?

作者: zzlg    時間: 2011-5-18 14:49
要看CAXA是否能在下個版本中提供這個方法了
作者: rumly    時間: 2011-5-18 18:38
我在3.2下也測試了一下,錯誤是一樣的,感到非常奇怪。

標準的頭文件裏麵沒有申明:
int ebPaGetHeaderBlock(EB_SELECT* i_pSelFrom, CBlock** o_ppHeader, CString &o_sHdrName)
這個函數,我編譯的時候無法通過,然後我就自己聲明了一下,請問這個地方會有影響嗎?

另外,您能夠將你的那個測試程序發到我的郵箱,

rumly@yeah.net


不甚感激!!

作者: zzlg    時間: 2011-5-19 10:59
標題: 回複 17# rumly 的帖子
標準頭文件裏沒有公開ebPaGetHeaderBlock這個函數,自己聲明一下才能用。
應該不影響,也許是我們的編譯環境有差異。我的郵件裏帶了一份ebads,你可以試試用我的環境編譯一下
作者: rumly    時間: 2011-5-19 13:43
大哥,你好,我沒有收到郵件,不知道是怎麽回事。可以再發一次嗎?謝謝

rumly@yeah.net
rumly@foxmail.com

感激不盡。
作者: zzlg    時間: 2011-5-19 14:48
標題: 回複 19# rumly 的帖子
郵件已重發
作者: hourui800720    時間: 2011-9-1 15:49
大家在網上經常能搜索到CAXA的二次開發的小程序,但有幾個人知道是如何開發出來的嗎,你想學嗎,想自己動手做出滿足自己或特定要求的CAXA二次開發程序嗎,想深度學習的話,請聯係本人:13169467685,QQ:46841341,何生。(付費學習,引領你快速入行,為全麵普及CAXA努力),可指導你進行深度的CAXA2011或CAXA2007的開發,【非專業開發人員勿擾,謝謝。】
作者: hourui800720    時間: 2011-9-1 15:52
請問rumly ,你是用的什麽軟件,可以看到DLL內部的函數接口的啊,能發給我一份嗎,46841341@qq.com,謝謝。
作者: hourui800720    時間: 2011-9-14 17:10
rumly ,你好,您能夠將你的那個查看DLL內部的類和成員接口信息的軟件發到我的郵箱嗎,感謝。
46841341@qq.com
作者: hourui800720    時間: 2011-11-12 10:42
到淘寶上搜索一下CAXA二次開發,不是書本,相信對你的工作會有幫助,希望大家一起研究CAXA,一起推廣,謝謝。
作者: wuyazhao    時間: 2012-3-1 17:44
07的用int ebPaGetHeaderBlock(EB_SELECT* i_pSelFrom, CBlock** o_ppHeader, CString &o_sHdrName)怎麽申明啊,能詳說一下不
作者: 961814xy1    時間: 2012-4-1 14:58
謝謝




歡迎光臨 咖迷社區(CAXA彩神iv) (http://www.ilouw.com/forum/) Powered by Discuz! X3.4