AcDbObjectId makeFill( AcDbObjectIdArray objIds, // контура
char * patternName, // имя
double patternAngle, // угол поворота
double patternScale, // масштаб
const char* Layer, // слой
Adesk::UInt16 Color // цвет
)
{
AcDbObjectId hatchId;
if(objIds == NULL) return NULL;
AcDbHatch* pHatch = new AcDbHatch();
AcGeVector3d normal(0.0, 0.0, 1.0);
pHatch->setNormal(normal);
pHatch->setElevation(0.0);
pHatch->setAssociative(Adesk::kFalse);
pHatch->setPattern(AcDbHatch::kPreDefined, patternName);
pHatch->setHatchStyle(AcDbHatch::kNormal);
if (strcmp(patternName,"SOLID") != 0)
{
pHatch->setPatternAngle(patternAngle);
pHatch->setPatternScale(patternScale);
}
AcDbObjectIdArray Ids;
Ids.setLogicalLength(1);
for (int i = 0; i < objIds.length(); i++)
{
Ids[0] = objIds[i];
pHatch->appendLoop(AcDbHatch::kDefault, Ids);
}
pHatch->setColorIndex(Color);
if ( Layer != NULL ) pHatch->setLayer(Layer);
pHatch->evaluateHatch();
postToDatabase(pHatch, hatchId);
pHatch->upgradeOpen();
pHatch->draw();
pHatch->close();
return hatchId;
}
AcDbObjectIdArray objIds - это массив замкрутых контуров, которые образубт штриховку с островками. Если надо просто заштриховать контур, то в него впиши ID этого контура. Функция вроде рабочая. Но если найдешь ошибки напиши, плиз.
Еще есть функция postToDatabase. Выглядит она так:
Acad::ErrorStatus postToDatabase(AcDbEntity* pEnt,AcDbObjectId& idObj)
{
Acad::ErrorStatus es;
AcDbBlockTable * pBlockTable;
AcDbBlockTableRecord * pSpaceRecord;
if (acdbCurDwg()==NULL) return Acad::eNoDatabase;
if ((es = acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk)
{
if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord, AcDb::kForWrite))==Acad::eOk)
{
if ((es = pSpaceRecord->appendAcDbEntity(idObj, pEnt))==Acad::eOk)pEnt->close();
pSpaceRecord->close();
}
pBlockTable->close();
}
return es;
}
Кстати, эта тема уже обсуждалась. Если этого не достаточно, внимательно просмотри форум