- UID
- 105412
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-12-25
- 最后登录
- 1970-1-1
|
发表于 2007-5-25 09:17:14
|
显示全部楼层
aAcDbObjectId CAdsGraphics::InsertBlock(LPCTSTR BlockName, CAdsPoint &BasePoint,ds_real Scale,ads_real Angle) const
{
//插入块
AcDbObjectId ObjectId = GetBlockId(BlockName);
if (ObjectId==AcDbObjectId::kNull)
{
return AcDbObjectId::kNull;
}
AcDbBlockReference *pBlkRef = new AcDbBlockReference(BasePoint,ObjectId);
pBlkRef->setScaleFactors(AcGeScale3d(Scale,Scale,1.0));
pBlkRef->setRotation(Angle);
ObjectId = AcDbObjectId::kNull;
ObjectId = AddEntity(pBlkRef);
pBlkRef->close();
return ObjectId;
}
AcDbObjectId CAdsGraphics::GetBlockId(LPCTSTR BlockName) const
{
AcDbBlockTable *pBlockTable = NULL;
AcDbDatabase *pDb = CUR_DB;
pDb->getSymbolTable(pBlockTable,AcDb::kForWrite);
if (pBlockTable==NULL)
{
return AcDbObjectId::kNull;
}
AcDbObjectId ObjectId=AcDbObjectId::kNull;
if (pBlockTable->has(BlockName))
{
pBlockTable->getAt(BlockName,ObjectId);
pBlockTable->close();
return ObjectId;
}
CString FileName;
CString strBlockName=BlockName;
if (strBlockName.Right(4)!=".dwg")
{
strBlockName+=".dwg";
}
acedFindFile(strBlockName,FileName.GetBuffer(MAX_PATH));
FileName.ReleaseBuffer();
if (FileName.IsEmpty())
{
pBlockTable->close();
return AcDbObjectId::kNull;
}
AcDbDatabase *pDwg =new AcDbDatabase (Adesk::kFalse) ;
if(Acad::eOk!=pDwg->readDwgFile (FileName))
{
pBlockTable->close();
return AcDbObjectId::kNull;
}
AcDbBlockTableIterator *pIterator=NULL;
AcDbBlockTable *pDwgBlockTable = NULL;
AcDbBlockTableRecord * pBlockTableRecord = NULL;
if (Acad::eOk!=pDwg->getBlockTable(pDwgBlockTable,AcDb::kForWrite))
{
delete pDwg;
pBlockTable->close();
return AcDbObjectId::kNull;
}
//遍历所有发表块表记录,把所有相同的块删除
pDwgBlockTable->newIterator(pIterator);
for (pIterator->start();!pIterator->done();pIterator->step())
{
if (Acad::eOk!=pIterator->getRecord(pBlockTableRecord,AcDb::kForWrite))
{
pDwgBlockTable->close();
pBlockTable->close();
delete pDwg;
return AcDbObjectId::kNull;
}
LPSTR pName = NULL;
pBlockTableRecord->getName(pName);
CString sName=pName;
delete pName;
AcDbObjectId BlockId=pBlockTableRecord->id();
if (pBlockTable->has(sName))
{
if (sName[0]!='*')
{
pBlockTableRecord->erase();
}
}
pBlockTableRecord->close();
}
pDwgBlockTable->close();
pBlockTable->close();
CString strName(BlockName);
if (strName.Right(4)==".dwg")
{
int index=strName.ReverseFind('\\');
strName=strName.Mid(index+1);
strName=strName.Left(strName.GetLength()-4);
}
if (Acad::eOk!=pDb->insert(ObjectId,_T(strName),pDwg))
{
delete pDwg;
return AcDbObjectId::kNull;
}
delete pDwg;
return ObjectId;
}
AcDbObjectId CAdsGraphics::AddEntity(AcDbEntity * pEnt ,
BOOL bInit /*= TRUE */,
AcDbDatabase* pDb /*= NULL */,
BOOL bClose /*= FALSE */ ) const
{
AcDbObjectId idNew=AcDbObjectId::kNull;
AcDbBlockTableRecord *pRecord=NULL;
if(pDb==NULL)
{
pRecord = GetBlockTableRecord();
}
else
{
AcDbBlockTable *pTable=NULL;
pDb->getBlockTable(pTable, AcDb::kForRead);
if(pTable==NULL)
{
return idNew;
}
pTable->getAt(ACDB_MODEL_SPACE,pRecord,AcDb::kForWrite);
pTable->close();
if(pRecord==NULL)
{
return idNew;
}
}
if (bInit)
{
pEnt->setColor(m_Color);
pEnt->setLayer(m_Layer);
pEnt->setLinetype(m_LineType);
}
pRecord->appendAcDbEntity(idNew,pEnt);
pRecord->close();
if(bClose)
{
pEnt->close();
}
return idNew;
} |
|