填充实体是CAD中常用的一种实体类型,它有多种方式创建,以下函数是通过一个闭合的多段线创建的模式,选择图面上一个已存在的闭合多段线,按照多段线的围合区域进行填充,创建CAD填充实体。
AcDbObjectId CreateHatch(
AcDbObjectId dbOId,//--插入一个闭合PL线ID
std::wstring sLayer,//--生成实体图层
std::wstring sPattern = L"SOLID",//--填充类型
int nColor = 256,//--颜色索引
double dAngle = 0.0,//--角度
double dScale = 1.0,//--比例
AcDbDatabase * pDbDatab = acdbHostApplicationServices()->workingDatabase());
AcDbObjectId CreateHatch(
AcDbObjectId dbOId,
std::wstring sLayer,
std::wstring sPattern,
int nColor,
double dAngle,
double dScale,
AcDbDatabase * pDbDatab)
{
AcCmColor CmC;
AcDbObjectId DbOId;
AcDbObjectIdArray DbOIdA(0, 2);
AcDbBlockTable * pDbBT;
AcDbBlockTableRecord * pDbBTR;
AcGeVector3d normal(0.0, 0.0, 1.0);
DbOIdA.append(dbOId);
AcDbHatch* pDbHat = new AcDbHatch();
pDbHat->setDatabaseDefaults();
pDbHat->setAssociative(Adesk::kTrue);
pDbHat->appendLoop(AcDbHatch::kExternal, DbOIdA);
pDbHat->setPatternScale(dScale);
pDbHat->setPatternAngle(dAngle);
pDbHat->setPattern(AcDbHatch::kPreDefined, sPattern.c_str());
pDbHat->setNormal(normal);
pDbHat->evaluateHatch();
pDbDatab->getSymbolTable(pDbBT, AcDb::kForRead);
pDbBT->getAt(ACDB_MODEL_SPACE, pDbBTR, AcDb::kForWrite);
pDbBTR->appendAcDbEntity(DbOId, pDbHat);
pDbHat->setLayer(sLayer.c_str());
pDbHat->setColorIndex(nColor);
pDbBT->close();
pDbBTR->close();
pDbHat->close();
return DbOId;
}