TA的每日心情![](source/plugin/dsu_paulsign/img/emot/kx.gif) | 开心 昨天 15:23 |
---|
签到天数: 69 天 [LV.6]常住居民II
管理员
- 积分
- 2704
|
static void CreateSurface(vector<AcGePoint3d> pts, AcDbObjectId &surfaceOid)
{
ErrorStatus es = eOk;
AcApDocument *pActiveDoc = acDocManager->mdiActiveDocument();
AcDbDatabase *pDb = pActiveDoc->database();
// (1) Creating 4 lines
vector<AcDbObjectId> lineOids;
AcDbObjectId lineId = AcDbObjectId::kNull;
AcDbLine *pLine = NULL;
for(int cnt = 1; cnt < pts.size(); cnt++)
{
pLine = new AcDbLine(pts[cnt-1], pts[cnt]);
Add2Db(pLine, lineId);
lineOids.push_back(lineId);
}
// Closing line
pLine = new AcDbLine(pts[pts.size()-1], pts[0]);
Add2Db(pLine, lineId);
lineOids.push_back(lineId);
// (2) Creating a region out of the lines
AcDbVoidPtrArray curveSegs;
AcDbEntity *pLineEnt = NULL;
for(int cnt = 0; cnt < lineOids.size(); cnt++)
{
es = acdbOpenAcDbEntity(pLineEnt, lineOids[cnt], AcDb::kForRead);
if (pLineEnt->isKindOf(AcDbCurve::desc()))
curveSegs.append(static_cast<void*>(pLineEnt));
}
AcDbVoidPtrArray regions;
es = AcDbRegion::createFromCurves(curveSegs, regions);
// close all open entities used to create the region
int lenCurves = curveSegs.length();
for (int cnt=0; cnt < lenCurves; cnt ++)
{
pLineEnt = static_cast<AcDbEntity*>(curveSegs[cnt]);
pLineEnt->close();
}
// add all created regions to the database
AcDbRegion *pRegion;
AcDbObjectId regionOid;
int lenRegions = regions.length();
for (int cnt=0; cnt < lenRegions; cnt++)
{
pRegion = static_cast<AcDbRegion*>(regions[cnt]);
pRegion->setDatabaseDefaults();
Add2Db(pRegion, regionOid);
}
// (3) Create a surface using the region
AcDbEntity *pRegionEntity = NULL;
es = acdbOpenAcDbEntity(pRegionEntity, regionOid, AcDb::kForRead);
AcDbSurface *pSurface = NULL;
es = AcDbSurface::createFrom(pRegionEntity, pSurface);
pRegionEntity->close();
Add2Db(pSurface, surfaceOid);
} |
|