马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 aeo 于 2016-12-9 23:49 编辑
今天问题比较奇葩
由于块里面的标注,因为比例关系,炸开后里面的值会变化,
所以想一步炸开成文字和线。
但问题出现了,炸开后的标注位置到了 原点,(相当于没有乘上块的变换矩阵)
而且比例是1:1的状态,不管原来是什么比例,不等比例也这样。
(如果exlode命令,先炸块,再炸独立出来的标注,肯定是在原来的位置,就是文字不对)
看看代码有问题吗? (只看标注部分)

- void
- explodeBlockRef(AcDbBlockReference *pRef){
- AcDbVoidPtrArray newArray;
- Acad::ErrorStatus es;
- AcDbObjectId objId;
- es = pRef->explode(newArray);
- for(int i = 0;i< newArray.length();i++){
- AcDbEntity* pE1 =static_cast<AcDbEntity*>( newArray[ i ]);
-
- AcDbDimension* pDim;
- AcDbBlockReference* pBlkref;
-
- if((pBlkref = AcDbBlockReference::cast(pE1))!= NULL){
- explodeBlockRef(pBlkref);
- delete pE1;
- }
- else if((pDim = AcDbDimension::cast(pE1))!= NULL){ //////这里的问题
- AcDbVoidPtrArray dimArr;
- es = pE1->explode(dimArr);
- for (int k = 0;k<dimArr.length();k++)
- {
- AcDbEntity* pE2 =static_cast<AcDbEntity*>( dimArr[k]);
- postToDb(pE2,objId);
- }
- delete pE1;
- }
- else{
- postToDb(pE1,objId);
- }
- }
- }
下面是晓东那贴里面的 posttodb
- Acad::ErrorStatus postToDb(AcDbEntity* ent, AcDbObjectId& objId)
- {
- Acad::ErrorStatus es;
- AcDbBlockTable* pBlockTable;
- AcDbBlockTableRecord* pSpaceRecord;
- if (NULL == ent)
- return Acad::eNullObjectPointer;
- if (NULL == acdbHostApplicationServices()->workingDatabase())
- return Acad::eNoDatabase;
- if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))!= Acad::eOk)
- return es;
- if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))!= Acad::eOk)
- {
- pBlockTable->close();
- return es;
- }
- pBlockTable->close();
- if ((es = pSpaceRecord->appendAcDbEntity(objId, ent)) != Acad::eOk)
- {
- pSpaceRecord->close();
- return es;
- }
- pSpaceRecord->close();
- return ent->close();
- }
复制代码
|