diff --git a/Common/Gmsh.h b/Common/Gmsh.h index d2b1b63bd1f81e8b40755d836af6ef29c7c93037..2a9178c7c597a980f90816d870b560380a175c2d 100644 --- a/Common/Gmsh.h +++ b/Common/Gmsh.h @@ -19,7 +19,7 @@ // // Please report all bugs and problems to <gmsh@geuz.org>. -int GmshInitialize(int argc, char **argv); +int GmshInitialize(int argc=0, char **argv=0); int GmshFinalize(); int GmshBatch(); diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp index 3feaf601ca98ec3e55c20ea8c335c29f668de1e5..7e47d384af4fe465e287910e91931d6bfd313730 100644 --- a/Geo/GModelIO_OCC.cpp +++ b/Geo/GModelIO_OCC.cpp @@ -1,4 +1,4 @@ -// $Id: GModelIO_OCC.cpp,v 1.33 2008-05-25 07:10:57 geuzaine Exp $ +// $Id: GModelIO_OCC.cpp,v 1.34 2008-06-03 07:25:07 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -279,7 +279,7 @@ void OCC_Internals::healGeometry(double tolerance, bool fixsmalledges, if(fixspotstripfaces){ Msg::Info("- fixing spot and strip faces"); - Handle(ShapeFix_FixSmallFace) sffsm = new ShapeFix_FixSmallFace(); + Handle(ShapeFix_FixSmallFace) sffsm = new ShapeFix_FixSmallFace; sffsm->Init(shape); sffsm->SetPrecision(tolerance); sffsm->Perform(); @@ -399,11 +399,12 @@ void OCC_Internals::loadShape(const TopoDS_Shape *s) { shape = *s; BRepTools::Clean(shape); - healGeometry(CTX.geom.tolerance, - CTX.geom.occ_fix_small_edges, - CTX.geom.occ_fix_small_faces, - CTX.geom.occ_sew_faces); - BRepTools::Clean(shape); + // FIXME should we apply the healing stuff when we import a shape? + // healGeometry(CTX.geom.tolerance, + // CTX.geom.occ_fix_small_edges, + // CTX.geom.occ_fix_small_faces, + // CTX.geom.occ_sew_faces); + // BRepTools::Clean(shape); buildLists(); } @@ -478,6 +479,10 @@ int GModel::importOCCShape(const void *shape, const void *options) _occ_internals = new OCC_Internals; _occ_internals->loadShape((TopoDS_Shape*)shape); _occ_internals->buildGModel(this); + snapVertices(); + // FIXME remove this when CL API is done + extern void SetBoundingBox(); + SetBoundingBox(); return 1; } diff --git a/utils/misc/driver.cpp b/utils/misc/driver.cpp index bd8b2b1c1aa8ceb41eae8fd02e99f3f35270f298..2ada8029975135f154e73b94042853be25215ad3 100644 --- a/utils/misc/driver.cpp +++ b/utils/misc/driver.cpp @@ -25,5 +25,6 @@ int main(int argc, char **argv) } m->writeMSH("test.msh"); m->writeUNV("test.unv"); + delete m; GmshFinalize(); } diff --git a/utils/misc/driverOCC.cpp b/utils/misc/driverOCC.cpp new file mode 100644 index 0000000000000000000000000000000000000000..787297ead1626e67a05dfb55e4e1748896a7bc06 --- /dev/null +++ b/utils/misc/driverOCC.cpp @@ -0,0 +1,39 @@ +// g++ -I/usr/local/opencascade/inc driverOCC.cpp -lGmsh -L/usr/local/opencascade/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKIGES -lTKXSBase -lTKOffset -lTKFeat -lTKFillet -lTKBool -lTKShHealing -lTKMesh -lTKHLR -lTKBO -lTKPrim -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKAdvTools -lTKMath -lTKernel -lm + +#if !defined(WIN32) || defined(__CYGWIN__) +#include "config.h" +#endif +#include "TopoDS_Shape.hxx" +#include "BRep_Tool.hxx" +#include "BRep_Builder.hxx" +#include "BRepTools.hxx" + +#include <stdio.h> +#include <gmsh/Gmsh.h> +#include <gmsh/GModel.h> +#include <gmsh/MElement.h> + +int main(int argc, char **argv) +{ + // create an OCC shape (by loading it from a brep file) + TopoDS_Shape shape; + BRep_Builder builder; + BRepTools::Read(shape, argv[1], builder); + BRepTools::Clean(shape); + + // import the shape in gmsh and mesh it + GmshInitialize(argc, argv); + GModel *m = new GModel(); + m->importOCCShape((void*)&shape, 0); + m->mesh(2); + for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){ + GRegion *r = *it; + printf("volume %d contains %d elements:\n", r->tag(), r->getNumMeshElements()); + for(unsigned int i = 0; i < r->getNumMeshElements(); i++) + printf(" %d", r->getMeshElement(i)->getNum()); + printf("\n"); + } + m->writeMSH("test.msh"); + delete m; + GmshFinalize(); +}