From 1a3ba4780bd0230b426058b332c01d67c0fc0050 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Thu, 14 Jan 2016 18:03:37 +0000
Subject: [PATCH] test implementation of
 get{Vertex,Edge,Face,Region}ForOCCShape

---
 Common/DefaultOptions.h |  4 ++--
 Geo/GModel.h            |  4 ++++
 Geo/GModelIO_OCC.cpp    | 48 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index a50ddc3b95..6c51538984 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -1033,8 +1033,8 @@ StringXNumber MeshOptions_Number[] = {
   { F|O, "NewtonConvergenceTestXYZ" , opt_mesh_newton_convergence_test_xyz , 0. ,
     "Force inverse surface mapping algorithm (Newton-Raphson) to converge in real coordinates (experimental)" },
   { F|O, "Format" , opt_mesh_file_format , FORMAT_AUTO ,
-    "Mesh output format (1=msh, 2=unv, 10=automatic, 19=vrml, 27=stl, 30=mesh, 31=bdf, "
-    "32=cgns, 33=med, 40=ply2)" },
+    "Mesh output format (1=msh, 2=unv, 10=automatic, 19=vrml, 26=pos statistics, 27=stl, "
+    "30=mesh, 31=bdf, 32=cgns, 33=med, 39=inp, 40=ply2)" },
 
   { F|O, "Hexahedra" , opt_mesh_hexahedra , 1. ,
     "Display mesh hexahedra?" },
diff --git a/Geo/GModel.h b/Geo/GModel.h
index e5e4309341..7fc00f5e61 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -614,6 +614,10 @@ class GModel
   int writeOCCSTEP(const std::string &name);
   int writeOCCBREP(const std::string &name);
   int importOCCShape(const void *shape);
+  GVertex *getVertexForOCCShape(const void *shape);
+  GEdge *getEdgeForOCCShape(const void *shape);
+  GFace *getFaceForOCCShape(const void *shape);
+  GRegion *getRegionForOCCShape(const void *shape);
 
   // ACIS Model
   int readACISSAT(const std::string &name);
diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 060e18405e..a74091f88d 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -1100,6 +1100,30 @@ int GModel::importOCCShape(const void *shape)
   return 1;
 }
 
+GVertex* GModel::getVertexForOCCShape(const void *shape)
+{
+  if(!_occ_internals) return 0;
+  return _occ_internals->getOCCVertexByNativePtr(this, *(TopoDS_Vertex*)shape);
+}
+
+GEdge* GModel::getEdgeForOCCShape(const void *shape)
+{
+  if(!_occ_internals) return 0;
+  return _occ_internals->getOCCEdgeByNativePtr(this, *(TopoDS_Edge*)shape);
+}
+
+GFace* GModel::getFaceForOCCShape(const void *shape)
+{
+  if(!_occ_internals) return 0;
+  return _occ_internals->getOCCFaceByNativePtr(this, *(TopoDS_Face*)shape);
+}
+
+GRegion* GModel::getRegionForOCCShape(const void *shape)
+{
+  if(!_occ_internals) return 0;
+  return _occ_internals->getOCCRegionByNativePtr(this, *(TopoDS_Solid*)shape);
+}
+
 #else
 
 void GModel::_deleteOCCInternals()
@@ -1148,4 +1172,28 @@ int GModel::importOCCShape(const void *shape)
   return 0;
 }
 
+GVertex* GModel::getVertexForOCCShape(const void *shape)
+{
+  Msg::Error("Gmsh must be compiled with Open CASCADE support to query OCC shape");
+  return 0;
+}
+
+GEdge* GModel::getEdgeForOCCShape(const void *shape)
+{
+  Msg::Error("Gmsh must be compiled with Open CASCADE support to query OCC shape");
+  return 0;
+}
+
+GFace* GModel::getFaceForOCCShape(const void *shape)
+{
+  Msg::Error("Gmsh must be compiled with Open CASCADE support to query OCC shape");
+  return 0;
+}
+
+GRegion* GModel::getRegionForOCCShape(const void *shape)
+{
+  Msg::Error("Gmsh must be compiled with Open CASCADE support to query OCC shape");
+  return 0;
+}
+
 #endif
-- 
GitLab