Acad::ErrorStatus
AcDb3dPolylineToAcDb2dPolyline(AcDbObjectId objId,
int
flag
/* =0 */
)
{
Acad::ErrorStatus es;
AcDbEntity *pEnt = NULL;
double
elev = 0.0;
es = acdbOpenObject(pEnt, objId, AcDb::kForWrite);
int
i = 0;
if
(pEnt->isKindOf(AcDb3dPolyline::desc()))
{
AcDb2dPolyline *pNewline =
new
AcDb2dPolyline();
AcDb3dPolyline *pPline = AcDb3dPolyline::cast(pEnt);
AcDbObjectIterator *pItr = pPline->vertexIterator();
for
(pItr->start(); !pItr->done(); pItr->step())
{
AcDb3dPolylineVertex *pVertex = NULL;
AcDbObjectId vId = pItr->objectId();
acdbOpenObject(pVertex, vId, AcDb::kForRead);
AcDb::Vertex3dType verType = pVertex->vertexType();
if
(verType != AcDb::k3dControlVertex)
{
i++;
AcDb2dVertex *p2dVertex =
new
AcDb2dVertex(pVertex->position());
p2dVertex->setXData(pVertex->xData());
pNewline->appendVertex(p2dVertex);
p2dVertex->close();
}
if
(flag == 1)
{
elev += pVertex->position().z;
}
pVertex->close();
}
delete
pItr;
pItr = 0;
double
eleva = elev / i;
pNewline->setElevation(eleva);
pNewline->setPropertiesFrom(pPline);
if
(pPline->isClosed())
{
pNewline->makeClosed();
}
pNewline->setXData(pPline->xData());
m_DbUtil.PostToModelSpace(pNewline);
pPline->erase();
}
pEnt->close();
return
es;
}