将二维多段线转换为多段线
//设置为相同的属性 //将pTargetEnt设置为和pSourceEnt设置为一样的属性 void SameEntityAttr(AcDbEntity* pTargetEnt,AcDbEntity* pSourceEnt) { pTargetEnt->setColor(pSourceEnt->color()); pTargetEnt->setLayer(pSourceEnt->layer()); pTargetEnt->setLinetype(pSourceEnt->linetype()); pTargetEnt->setLineWeight(pSourceEnt->lineWeight()); #if _MSC_VER>=1400 pTargetEnt->setMaterial(pSourceEnt->materialId()); #endif } AcDbPolyline* Poly2dToPline(AcDb2dPolyline* pPolyline2d) { AcDbObjectIterator *pObjIter = pPolyline2d->vertexIterator(); if(pObjIter == NULL) return NULL; AcDbPolyline* pLine=new AcDbPolyline(); pLine->setDatabaseDefaults(pPolyline2d->database()); SameEntityAttr(pLine,pPolyline2d); AcDb::Poly2dType PolyType = pPolyline2d->polyType(); AcDb2dVertex *pVertex; unsigned int index=0; //遍历点,并读取其凸度 for(pObjIter->start();!pObjIter->done();pObjIter->step()) { if(pObjIter->entity()) return 0; if(acdbOpenObject(pVertex,pObjIter->objectId(),AcDb::kForRead) != Acad::eOk) return 0; if(PolyType == AcDb::k2dSimplePoly) { if(pVertex->vertexType() != AcDb::k2dVertex) { pVertex->close(); continue; } } else if((PolyType == AcDb::k2dCubicSplinePoly) || (PolyType == AcDb::k2dQuadSplinePoly)) { if(pVertex->vertexType() != AcDb::k2dSplineCtlVertex) { pVertex->close(); continue; } } else if(PolyType == AcDb::k2dFitCurvePoly) { } AcGePoint2d pt(pVertex->position().x,pVertex->position().y); pLine->addVertexAt(index,pt,pVertex->bulge(),pVertex->startWidth(),pVertex->endWidth()); index++; pVertex->close(); } return pLine; }查看完整版本: 将二维多段线转换为多段线
Tags: