diff --git a/nglib/ng_occ.cpp b/nglib/ng_occ.cpp new file mode 100644 index 00000000..ead10c4e --- /dev/null +++ b/nglib/ng_occ.cpp @@ -0,0 +1,142 @@ +#include +#include + +#include "TopTools_IndexedMapOfShape.hxx" +#include "TopoDS.hxx" +#include "TopoDS_Face.hxx" +#include "TopoDS_Shape.hxx" +#include "GProp_GProps.hxx" +#include "BRepGProp.hxx" + +using namespace std; + +namespace nglib { +#include +} + +int main (int argc, char ** argv) +{ + using namespace nglib; + + cout << "Netgen NgLib - OpenCascade Test Case" << endl; + + if (argc != 2) + { + cerr << "use: ng_occ " << endl; + return 1; + } + + // Define pointer to OCC Geometry + Ng_OCC_Geometry *occ_geom; + + Ng_Mesh *occ_mesh; + + Ng_Meshing_Parameters mp; + + TopTools_IndexedMapOfShape FMap; + + Ng_OCC_TopTools_IndexedMapOfShape *occ_fmap = (Ng_OCC_TopTools_IndexedMapOfShape*)&FMap; + + // Result of Netgen Operations + Ng_Result ng_res; + + // Initialise the Netgen Core library + Ng_Init(); + + // Read in the OCC File + occ_geom = Ng_OCC_Load_STEP(argv[1]); + if(!occ_geom) + { + cout << "Error reading in STEP File: " << argv[1] << endl; + return 1; + } + cout << "Successfully loaded STEP File: " << argv[1] << endl; + + occ_mesh = Ng_NewMesh(); + + ng_res = Ng_OCC_GetFMap(occ_geom,occ_fmap); + + cout << "ng_res = " << ng_res << endl; + + if(!FMap.Extent()) + { + cout << "Error retrieving Face map...." << endl; + return 1; + } + + cout << "Successfully extracted the Face Map....:" << FMap.Extent() << endl; + + for(int i = 1; i <= FMap.Extent(); i++) + { + TopoDS_Face OCCface; + OCCface = TopoDS::Face(FMap.FindKey(i)); + + GProp_GProps faceProps; + BRepGProp::SurfaceProperties(OCCface,faceProps); + + cout << "Index: " << i + << " :: Area: " << faceProps.Mass() + << " :: Hash: " << OCCface.HashCode(1e+6) + << endl; + } + + mp.uselocalh = 1; + mp.elementsperedge = 2.0; + mp.elementspercurve = 2.0; + mp.maxh = 10.0; + mp.grading = 0.2; + mp.closeedgeenable = 0; + mp.closeedgefact = 1.0; + mp.optsurfmeshenable = 1; + + + cout << "Setting Local Mesh size....." << endl; + cout << "OCC Mesh Pointer before call = " << occ_mesh << endl; + Ng_OCC_SetLocalMeshSize(occ_geom, occ_mesh, &mp); + cout << "Local Mesh size successfully set....." << endl; + cout << "OCC Mesh Pointer after call = " << occ_mesh << endl; + + cout << "Creating Edge Mesh....." << endl; + ng_res = Ng_OCC_GenerateEdgeMesh(occ_geom, occ_mesh, &mp); + if(ng_res != NG_OK) + { + Ng_DeleteMesh(occ_mesh); + cout << "Error creating Edge Mesh.... Aborting!!" << endl; + return 1; + } + else + { + cout << "Edge Mesh successfully created....." << endl; + cout << "Number of points = " << Ng_GetNP(occ_mesh) << endl; + } + + cout << "Creating Surface Mesh....." << endl; + + ng_res = Ng_OCC_GenerateSurfaceMesh(occ_geom, occ_mesh, &mp); + if(ng_res != NG_OK) + { + Ng_DeleteMesh(occ_mesh); + cout << "Error creating Surface Mesh..... Aborting!!" << endl; + return 1; + } + else + { + cout << "Surface Mesh successfully created....." << endl; + cout << "Number of points = " << Ng_GetNP(occ_mesh) << endl; + cout << "Number of surface elements = " << Ng_GetNSE(occ_mesh) << endl; + } + + cout << "Creating Volume Mesh....." << endl; + + ng_res = Ng_GenerateVolumeMesh(occ_mesh, &mp); + + cout << "Volume Mesh successfully created....." << endl; + cout << "Number of points = " << Ng_GetNP(occ_mesh) << endl; + cout << "Number of volume elements = " << Ng_GetNE(occ_mesh) << endl; + + cout << "Saving Mesh as VOL file....." << endl; + Ng_SaveMesh(occ_mesh,"test_occ.vol"); + + return 0; +} + \ No newline at end of file