咖迷社区(CAXA数码大方)

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19251|回复: 25

CAXA2007、2011 提取标题栏属性问题,望不吝赐教,谢谢。

[复制链接]

3

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2011-5-17 19:32:00 | 显示全部楼层 |阅读模式
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方法,系统里面的头文件注释掉了,我去掉头文件的注释,但是链接的时候会出错。
希望各位知道的兄弟,能够帮帮我,谢谢。
回复

使用道具 举报

40

主题

323

帖子

8万

积分

管理员

Rank: 2

积分
87038
发表于 2011-5-17 19:37:00 | 显示全部楼层
已转给CAXA开发,需要等明天上午答复了。。。
CAXA论坛Admin
回复 支持 反对

使用道具 举报

35

主题

390

帖子

3万

积分

社区专家

Rank: 8Rank: 8

积分
32991

咖迷社区专家(CAXA)

发表于 2011-5-17 22:50:00 | 显示全部楼层
希望楼主以后能成为marswu一样的大师。
回复 支持 反对

使用道具 举报

3

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2011-5-18 08:21:00 | 显示全部楼层
谢谢各位,静候佳音。
回复 支持 反对

使用道具 举报

0

主题

16

帖子

2万

积分

VIP会员

Rank: 8Rank: 8

积分
20014
发表于 2011-5-18 11:22:00 | 显示全部楼层
头文件里attributeIterator是注掉的,说明CRX还不支持这个方法
回复 支持 反对

使用道具 举报

3

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2011-5-18 11:26:00 | 显示全部楼层
楼上的兄弟,我从查看DLL的导出函数,DLL中存在这个方法,而且对应的类也有了。
回复 支持 反对

使用道具 举报

0

主题

16

帖子

2万

积分

VIP会员

Rank: 8Rank: 8

积分
20014
发表于 2011-5-18 11:29:00 | 显示全部楼层
使用ebPaGetHeaderBlock返回的名称不正确,可能标题栏里记录的名称信息是错误的。具体情况需要分析提取的原始文件才能知道。函数本身应当是没有错误的。
GetFrameBlock是非开放的内部函数,不建议在二次开发过程中使用。
回复 支持 反对

使用道具 举报

0

主题

16

帖子

2万

积分

VIP会员

Rank: 8Rank: 8

积分
20014
发表于 2011-5-18 13:09:00 | 显示全部楼层

回复 6# rumly 的帖子

请教一下你查看的是哪个dll,版本号是多少?
回复 支持 反对

使用道具 举报

3

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2011-5-18 13:49:00 | 显示全部楼层
2007中,我调用ebPaGetHeaderBlock返回的是图框的信息,请看下面的截图,谢谢。

CAXA版本信息
4.jpg


源码
1.png

图纸信息,使用标准模版新建一个空白的图纸,并设置相关信息。
2.png

运行后程序弹出的对话框:

3.png

回复 支持 反对

使用道具 举报

3

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2011-5-18 13:56:00 | 显示全部楼层
头文件里attributeIterator是注掉的,说明CRX还不支持这个方法
zzlg 发表于 2011-5-18 11:22:00


这个方法是提取属性的,如果CRX还不支持这个方法,那么
我能否理解为CAXA2011不能够提取标题栏属性?
谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|咖迷社区(CAXA数码大方) ( 京ICP备05001831号-1 )

GMT+8, 2024-4-29 01:43 , Processed in 0.156250 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表