Example #1
0
void BccWorld::reduceGroup(unsigned igroup)
{
	const float oldCurveLength = groupCurveLength(m_cluster->group(igroup));
	const unsigned oldNCurves = m_cluster->group(igroup)->numGeometries();
    GeometryArray * reduced = 0;
	
	int i=0;
	for(;i<20;i++) {
		GeometryArray * ir = m_reducer->compute(m_cluster->group(igroup), FitBccMeshBuilder::EstimatedGroupSize);
		if(ir) {
			reduced = ir;
			m_cluster->setGroupGeometry(igroup, reduced);
		}
		else break;
	}
	
	if(!reduced) {
        std::cout<<" insufficient condition for curve reduction, skipped.\n";
        return;
    }
	
	m_totalCurveLength -= oldCurveLength;
	m_totalCurveLength += groupCurveLength(reduced);
	
	m_numCurves -= oldNCurves;
	m_numCurves += reduced->numGeometries();
	
	rebuildGroupTetrahedronMesh(igroup, reduced);
}
Example #2
0
bool BccInterface::loadPatchGeometry(BccWorld * world, const std::string & filename)
{
	const std::string oldFilename = FileName;
	FileName = filename;
	GeometryArray * trigeo = new GeometryArray;
	bool res = ReadTriangleData(trigeo);
	if(res) {
		const unsigned n = trigeo->numGeometries();
		std::cout<<"\n bcc interface loading "<<n<<" triangle mesh geometries as patch ";
		m_patchMesh = (ATriangleMesh *)trigeo->geometry(0);
		unsigned i=0;
		for(;i<n;i++) {
            std::vector<AOrientedBox> patchBoxes;
			if(separate((ATriangleMesh *)trigeo->geometry(i),
                patchBoxes)) {
				world->addPatchBoxes(patchBoxes);
                patchBoxes.clear();
            }
		}
	}
	else {
		std::cout<<"\n hes file contains no triangle mesh geometry. ";
	}
	FileName = oldFilename;
	return res;
}
Example #3
0
bool AdeniumInterface::readTriangleMeshFromFile(AdeniumWorld * world)
{
    if(BaseFile::InvalidFilename(FileName)) 
		return false;
		
	if(!BaseFile::FileExists(FileName)) {
		FileName = "unknown";
		return false;
	}
    
    HesperisFile hes;
	hes.setReadComponent(HesperisFile::RTri);
	if(!hes.open(FileName)) return false;
	hes.close();
	
    GeometryArray triangleMeshes;
	hes.extractTriangleMeshes(&triangleMeshes);
    
    if(triangleMeshes.numGeometries() < 1) return false;
    std::cout<<" n tri mesh "<<triangleMeshes.numGeometries();
	
    world->addTriangleSystem(new BvhTriangleSystem((ATriangleMesh *)triangleMeshes.geometry(0)));
	return true;
}
Example #4
0
bool BccInterface::loadTriangleGeometry(BccWorld * world, const std::string & filename)
{
	const std::string oldFilename = FileName;
	FileName = filename;
	GeometryArray * trigeo = new GeometryArray;
	bool res = ReadTriangleData(trigeo);
	if(res) {
		const unsigned n = trigeo->numGeometries();
		std::cout<<"\n bcc interface loading "<<n<<" triangle mesh geometries. ";
		world->setTiangleGeometry(trigeo);
	}
	else {
		std::cout<<"\n hes file contains no triangle mesh geometry. ";
	}
	FileName = oldFilename;
	return res;
}
Example #5
0
bool BccInterface::loadCurveGeometry(BccWorld * world, const std::string & filename)
{
	const std::string oldFilename = FileName;
	FileName = filename;
	GeometryArray curvegeo;
	bool res = ReadCurveData(&curvegeo);
	if(res) {
		const unsigned n = curvegeo.numGeometries();
		std::cout<<"\n bcc interface loading "<<n<<" curve geometries. ";
		unsigned i=0;
		for(;i<n;i++)
			world->addCurveGroup((CurveGroup *)curvegeo.geometry(i));
	}
	else {
		std::cout<<"\n hes file contains no curve geometry. ";
	}
	FileName = oldFilename;
	return res;
}