]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0020744: EDF 1272 GEOM : Get(Real?)type of an object
authordmv <dmv@opencascade.com>
Fri, 18 Jun 2010 11:43:58 +0000 (11:43 +0000)
committerdmv <dmv@opencascade.com>
Fri, 18 Jun 2010 11:43:58 +0000 (11:43 +0000)
idl/GEOM_Gen.idl
src/GEOM_I/GEOM_Object_i.cc
src/GEOM_I/GEOM_Object_i.hh

index 61aa8caeb716d5fd625373a43487a9d8195728fb..eb8f389d624c19c1d7e4ac63d933bab332382e55 100644 (file)
@@ -166,6 +166,15 @@ module GEOM
      *  Get a <VAR>shape_type</VAR> of the object value.
      */
     shape_type GetShapeType();
+    
+    /*!
+     *  Get the topology type of the object value.
+     *  In contrast to the shape type, this function returns type of the most 
+     *  top-level sub-shape of the COMPOUND or COMPSOLID, if there is only one
+     *  sub-shape there.
+     *  \sa GetShapeType()
+     */
+    shape_type GetTopologyType();
 
     /*!
      *  Set name of the object.
index 355ad32c848e8da9b91b75838066f9608c0a7a8c..6b9d7ea0054fa73014b036497f9d7a6cc58f06a0 100644 (file)
@@ -39,6 +39,7 @@
 #include <BRepTools_ShapeSet.hxx>
 #include <BRepTools.hxx>
 #include <TopAbs.hxx>
+#include <TopoDS_Iterator.hxx>
 
 #ifdef WNT
 #pragma warning( disable:4786 )
@@ -116,6 +117,30 @@ GEOM::shape_type GEOM_Object_i::GetShapeType()
   return (GEOM::shape_type)_geom.ShapeType();
 }
 
+//=============================================================================
+/*!
+ *  GetTopologyType
+ */
+//=============================================================================
+GEOM::shape_type GEOM_Object_i::GetTopologyType()
+{
+  TopoDS_Shape shape = _impl->GetValue();
+  if(shape.IsNull()) return GEOM::SHAPE;
+
+  if ( shape.ShapeType() == TopAbs_COMPOUND || shape.ShapeType() == TopAbs_COMPSOLID ) {
+    TopoDS_Shape shape_i;
+    TopoDS_Iterator It (shape, Standard_True, Standard_False);
+    for (; It.More(); It.Next()) {
+      if ( !shape_i.IsNull() ) return (GEOM::shape_type)shape.ShapeType();
+      shape_i = It.Value();
+    }
+    if ( !shape_i.IsNull() )
+      return (GEOM::shape_type) shape_i.ShapeType();
+  }
+
+  return (GEOM::shape_type)shape.ShapeType();
+}
+
 //=============================================================================
 /*!
  *  SetName
index 46a7ae2c08d9b3459c64300182b4343f59f35dbe..7b56a603c3c49136c8cf0a61ea99e337caa6d691 100644 (file)
@@ -51,6 +51,8 @@ class GEOM_I_EXPORT GEOM_Object_i : public virtual POA_GEOM::GEOM_Object, public
 
   virtual GEOM::shape_type GetShapeType();
 
+  virtual GEOM::shape_type GetTopologyType();
+
   virtual void SetName(const char* theName);
 
   virtual char* GetName();