示例#1
0
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;
}
示例#2
0
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;
}