ATetrahedronMeshGroup * BccWorld::combinedTetrahedronMesh() { ATetrahedronMeshGroup * omesh = new ATetrahedronMeshGroup; unsigned ntet = 0; unsigned nvert = 0; unsigned nstrip = 0; unsigned i = 0; for(; i < m_numMeshes; i++) { ntet += m_meshes[i].numTetrahedrons(); nvert += m_meshes[i].numPoints(); nstrip += m_meshes[i].numStripes(); } omesh->create(nvert, ntet, nstrip); ntet = 0; nvert = 0; nstrip = 0; i = 0; for(; i < m_numMeshes; i++) { omesh->copyPointDrift(m_meshes[i].pointDrifts(), m_meshes[i].numStripes(), nstrip, nvert); omesh->copyIndexDrift(m_meshes[i].indexDrifts(), m_meshes[i].numStripes(), nstrip, ntet*4); omesh->copyStripe(&m_meshes[i], nvert, ntet * 4); ntet += m_meshes[i].numTetrahedrons(); nvert += m_meshes[i].numPoints(); nstrip += m_meshes[i].numStripes(); } float vlm = omesh->calculateVolume(); omesh->setVolume(vlm); std::cout<<" combined all meshes:\n n tetrahedrons "<<ntet <<"\n n points "<<nvert <<"\n initial volume "<<vlm <<"\n"; omesh->verbose(); return omesh; }
bool BccInterface::saveWorld(BccWorld * world) { if(world->numTetrahedronMeshes() < 1) { std::cout<<" no tetrahedron mesh to save"; return false; } HesperisFile hes; if(!hes.open(FileName)) { GeometryArray * gmgeo = world->triangleGeometries(); if(!gmgeo) { std::cout<<" no triangle mesh to save"; return false; } hes.create(FileName); hes.setWriteComponent(HesperisFile::WTri); hes.addTriangleMesh("growmesh", (ATriangleMeshGroup *)gmgeo->geometry(0)); hes.setDirty(); hes.save(); } hes.setWriteComponent(HesperisFile::WTetra); unsigned ntet, nvert, nstripe, nanchor; world->computeTetrahedronMeshStatistics(ntet, nvert, nstripe, nanchor); ATetrahedronMeshGroup * cm = new ATetrahedronMeshGroup; cm->create(nvert, ntet, nstripe); const unsigned n = world->numTetrahedronMeshes(); ntet = 0; nvert = 0; nstripe = 0; unsigned i = 0; for(; i < n; i++) { ATetrahedronMeshGroup * imesh = world->tetrahedronMesh(i); cm->copyPointDrift(imesh->pointDrifts(), imesh->numStripes(), nstripe, nvert); cm->copyIndexDrift(imesh->indexDrifts(), imesh->numStripes(), nstripe, ntet*4); cm->copyStripe(imesh, nvert, ntet * 4); ntet += imesh->numTetrahedrons(); nvert += imesh->numPoints(); nstripe += imesh->numStripes(); } float vlm = cm->calculateVolume(); cm->setVolume(vlm); std::cout<<"\n combined all for save out "; cm->verbose(); hes.addTetrahedron("tetra_c", cm); hes.setDirty(); hes.save(); hes.close(); delete cm; return true; }