// Extract the face map from the OCC geometry // The face map basically gives an index to each face in the geometry, // which can be used to access a specific face DLL_HEADER Ng_Result Ng_OCC_GetFMap(Ng_OCC_Geometry * geom, Ng_OCC_TopTools_IndexedMapOfShape * FMap) { OCCGeometry* occgeom = (OCCGeometry*)geom; TopTools_IndexedMapOfShape *occfmap = (TopTools_IndexedMapOfShape *)FMap; // Copy the face map from the geometry to the given variable occfmap->Assign(occgeom->fmap); if(occfmap->Extent()) { return NG_OK; } else { return NG_ERROR; } }
bool occ_make_mesh::run_impl() { io::FileType ft; if (filetype.valid()) ft = io::from_string( filetype() ); else ft = io::from_filename( filename() ); try { output_parameter_proxy<netgen::mesh> omp(output_mesh); ::netgen::OCCGeometry * geometry; if (ft == io::OCC_STEP) geometry = ::netgen::LoadOCC_STEP( filename().c_str() ); else if (ft == io::OCC_IGES) geometry = ::netgen::LoadOCC_IGES( filename().c_str() ); else { error(1) << "File type \"" << io::to_string(ft) << "\" is not supported" << std::endl; return false; } // http://sourceforge.net/p/netgen-mesher/discussion/905307/thread/7176bc7d/ TopTools_IndexedMapOfShape FMap; FMap.Assign( geometry->fmap ); if (!FMap.Extent()) { std::cout << "Error retrieving Face map... (OpenCascade error)" << endl; return false; } ::netgen::MeshingParameters mp; mp.elementorder = 0; mp.quad = 0; mp.inverttets = 0; mp.inverttrigs = 0; if (cell_size.valid()) { mp.uselocalh = 1; mp.maxh = cell_size(); } mp.curvaturesafety = curvature_safety_factor(); mp.segmentsperedge = segments_per_edge(); mp.grading = grading(); int perfstepsend = 6; omp()().geomtype = ::netgen::Mesh::GEOM_OCC; ::netgen::occparam.resthcloseedgeenable = 0; //mp.closeedgeenable; ::netgen::occparam.resthcloseedgefac = 1.0; //mp.closeedgefact; ::netgen::mparam = mp; omp()().DeleteMesh(); ::netgen::OCCSetLocalMeshSize( *geometry, omp()() ); ::netgen::OCCFindEdges(*geometry, omp()()); ::netgen::OCCMeshSurface(*geometry, omp()(), perfstepsend); omp()().CalcSurfacesOfNode(); ::netgen::MeshVolume(mp, omp()()); ::netgen::RemoveIllegalElements( omp()() ); ::netgen::MeshQuality3d( omp()() ); ::netgen::OptimizeVolume(mp, omp()() ); } catch (::netgen::NgException const & ex) { error(1) << "Netgen Error: " << ex.What() << std::endl; return false; } return true; }