Тема: acdbGetObjectMesh для объектов AcDbBody
Добрый день, подскажите, кто знает.
Функция
ACDB_PORT Acad::ErrorStatus acdbGetObjectMesh(
AcDbObject * pObj,
const AcDbFaceterSettings * faceter,
AcGePoint3dArray& vertexArray,
AcArray<Adesk::Int32>& faceArray,
AcGiFaceData*& faceData
);
судя по описанию работает только с Solid и Surface:
Tessellate existing solid or surface object to mesh data using the given faceter settings.
А для объектов типа AcDbBody vertexArray получается пустым.
Можно ли каким-нибудь образом получить меш для AcDbBody?
Спасибо.
Думаю, что только при помощи BREP API.
я попытался сделать вот так:
void getPoints( AcDbObjectId id, AcGePoint3dArray &points ) { AcBrBrep*pBrep = new AcBrBrep; pBrep->setSubentPath( AcDbFullSubentPath( id, kNullSubentId )); AcBrBrepFaceTraverser brFaTrav; for (brFaTrav.setBrep(*pBrep);!brFaTrav.done();brFaTrav.next()) { AcBrFaceLoopTraverser faLoTrav; AcBrFace face; brFaTrav.getFace(face); for(faLoTrav.setFace(face);!faLoTrav.done();faLoTrav.next()) { AcBrLoopEdgeTraverser loEdTrav; if(loEdTrav.setLoop(faLoTrav) == AcBr::eOk) { for( ; !loEdTrav.done(); loEdTrav.next()) { AcBrEdge edge; loEdTrav.getEdge(edge); AcBrVertex start; edge.getVertex1( start ); AcGePoint3d pt; start.getPoint( pt ); points.append( pt ); } } } } delete pBrep; }
Но получил лишь несколько точек на вершинах. Пробовал edge.getCurve(), а затем у кривой getSamplePoints(), но результат не тот.
Возможно кто-нибудь сталкивался с подобной задачей?