- UID
- 3558
- 积分
- 418
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-3
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
问题:
通常,当我们动态创建一个AcDbText并追加到当前数据库时,系统会自动根据它的两个对齐样式计算对齐点,并以一定的规则更新它的位置。然而,当此AcDbText追加到一个文档无关的后台数据库时,系统就不会自动更新它对齐点和位置,在CAD中打开那个后台数据库对应的文件,双击在其中创建的AcDbText,这时它就会自动回到正确的位置上。
代码:
//添加实体到数据库
AcDbObjectId PostToDB(AcDbEntity *pEnt,AcDbDatabase *pDb)
{
AcDbBlockTable *pBT;
AcDbBlockTableRecord *pBTR;
Acad::ErrorStatus es;
AcDbObjectId Id;
if(pEnt==NULL)
return Id;
if(pDb==NULL)
es=acdbCurDwg()->getBlockTable(pBT,AcDb::kForRead);
else
es=pDb->getBlockTable(pBT,AcDb::kForRead);
if(es!=Acad::eOk)
return Id;
es=pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);
if(es!=Acad::eOk)
{
pBT->close();
return Id;
}
es=pBTR->appendAcDbEntity(Id,pEnt);
if(es!=Acad::eOk)
{
pBTR->close();
pBT->close();
return Id;
}
pEnt->close();
pBTR->close();
pBT->close();
return Id;
}
//创建一个AcDbText并添加到指定的数据库
AcDbObjectId Text(AcGePoint2d BP,const char *str,double h,double width,double RTang,AcDb::TextHorzMode HMode,AcDb::TextVertMode VMode,AcDbDatabase *pDb)
{
AcDbText *pText=new AcDbText(AcGePoint3d(BP[0],BP[1],0),str,AcDbObjectId::kNull,h,RTang);
pText->setVerticalMode(VMode);
pText->setHorizontalMode(HMode);
pText->setAlignmentPoint(AcGePoint3d(BP[0],BP[1],0));
pText->setWidthFactor(width);
return PostToDB(pText,pDb);
}
实例调用:
AcDbDatabase *pDb=new AcDbDatabase(false,true);
pDb->readDwgFile("myfile.dwg");
Text(AcGePoint2d(100,100),"AcDbText",4.0,0.75,0.0,AcDb::kTextCenter,AcDb::kTextVertMid,pDb);
pDb->saveAs("myfile.dwg");
delete pDb;
... |
|