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); }
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; }
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; }
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; }
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; }