明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2068|回复: 7

请教我这段代码,从数据库中读取DWG文件 如何获得AcDbMText坐标

[复制链接]
发表于 2004-9-1 15:46:00 | 显示全部楼层 |阅读模式
//创建一个空白的图形数据库
//注意该处AcDbDatabase()函数的参数必须为Adesk::kFalse
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
//将指定文件名的图形A件读入到空白的B形数据库中
const char* sFileName="c:\\AA.dwg";

Acad::ErrorStatus es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false);
if (es!=Acad::eOk)
{
acutPrintf("\nThe file %s cannot be opend",sFileName);
return;
}

//获得块表指针
AcDbBlockTable *pBlockTable;
pNewDb->getSymbolTable(pBlockTable, AcDb::kForRead);
//获得模型空间的块农记录指针
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForRead);
pBlockTable->close();
//生成块表的迭代器
AcDbBlockTableRecordIterator *pIterator;
pBlockTableRecord->newIterator(pIterator);

AcGePoint3d basePoint;
AcDbEntity *pEnt;
AcDbMText *pAttdef;
char temp[200];
int i;
i=0;
for (pIterator->start(); !pIterator->done();
pIterator->step())//将source.dwg中所有的Attibute进行遍历
{
i++;
itoa(i,temp,10);///
// acutPrintf(temp);
pIterator->getEntity(pEnt, AcDb::kForRead);
if (pEnt->isKindOf(AcDbMText::desc()))
{
// acutPrintf("第% AcDbMText ",i);
// acutPrintf("\n\n");
pAttdef = AcDbMText::cast(pEnt);
if ( !( pAttdef->contents()==NULL) )
{
acutPrintf(" AcDbMText: %s \n" ,pAttdef->contents());
获取坐标
// basePoint = pAttdef->position();
// acutPrintf(" AcDbMText: %Ld %Ld %Ld\n"
// ,basePoint->X(),basePoint->Y(),basePoint->Z());
}
}
pEnt->close(); // use pEnt... pAttdef might be NULL
};
delete pIterator;
}
发表于 2004-9-1 17:30:00 | 显示全部楼层
你的问题是??


AcDbMText *pAttdef;往下放,放在你需要的地方,并且你一旦不需要马上关闭.
 楼主| 发表于 2004-9-2 13:35:00 | 显示全部楼层
谢谢 我想请问如何获得AcDbMText坐标?
发表于 2004-9-2 20:53:00 | 显示全部楼层
pAttdef->location()不是坐标吗?
 楼主| 发表于 2004-9-3 11:27:00 | 显示全部楼层
谢谢 两位 最后可以执行的代码。
//创建一个空白的图形数据库
//注意该处AcDbDatabase()函数的参数必须为Adesk::kFalse
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
//将指定文件名的图形A件读入到空白的B形数据库中
const char* sFileName="c:\\AA.dwg";

Acad::ErrorStatus es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false);
if (es!=Acad::eOk)
{
acutPrintf("\nThe file %s cannot be opend",sFileName);
return;
}

//获得块表指针
AcDbBlockTable *pBlockTable;
pNewDb->getSymbolTable(pBlockTable, AcDb::kForRead);
//获得模型空间的块农记录指针
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForRead);
pBlockTable->close();
//生成块表的迭代器
AcDbBlockTableRecordIterator *pIterator;
pBlockTableRecord->newIterator(pIterator);

AcGePoint3d basePoint;
AcDbEntity *pEnt;

char temp[200];
int i;
i=0;
for (pIterator->start(); !pIterator->done();
pIterator->step())//将source.dwg中所有的Attibute进行遍历
{
i++;
itoa(i,temp,10);///
// acutPrintf(temp);
pIterator->getEntity(pEnt, AcDb::kForRead);
if (pEnt->isKindOf(AcDbMText::desc()))
{
// acutPrintf("第% AcDbMText ",i);
// acutPrintf("\n\n");
AcDbMText *pAttdef;
pAttdef = AcDbMText::cast(pEnt);
if ( !( pAttdef->contents()==NULL) )
{
acutPrintf(" AcDbMText: %s \n" ,pAttdef->contents());
// 获取坐标

acutPrintf(" 坐标: %f %f %f\n" ,pAttdef->location());
}
pAttdef->close();
}
pEnt->close(); // use pEnt... pAttdef might be NULL
};
delete pIterator;
 楼主| 发表于 2004-9-3 11:51:00 | 显示全部楼层
不太会用
 楼主| 发表于 2004-9-3 11:53:00 | 显示全部楼层
ok?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2004-9-3 11:54:00 | 显示全部楼层
我考 上船还挺麻烦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 09:42 , Processed in 0.181355 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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