Salome HOME
Join modifications from branch BR_DEBUG_3_2_0b1
[modules/geom.git] / src / GEOMClient / GEOM_Client.cxx
index 1bdf7482c72a253d6669ac7dc826d65ab615011a..2659f6209b4f5a38bba8e62f6932f59d71aa854c 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
@@ -198,47 +198,46 @@ unsigned int GEOM_Client::BufferLength()
 // function : GetShape()
 // purpose  : 
 //=======================================================================
+TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
+{
+  TopoDS_Shape S;
+  TCollection_AsciiString IOR = geom->GetStringFromIOR(aShape);
+  Standard_Integer anIndex = Find(IOR, S);
 
-TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape ) 
-{ 
-  TopoDS_Shape            S; 
-  TCollection_AsciiString IOR = geom->GetStringFromIOR(aShape); 
-  Standard_Integer anIndex = Find(IOR, S); 
-  
-  if (anIndex !=0 ) return S ;  
+  if (anIndex != 0) return S;
 
-  /******* in case of a MAIN GEOM::SHAPE ********/ 
-  if (aShape->IsMainShape()) { 
-    S = Load(geom, aShape); 
-    Bind(IOR, S); 
-    return S; 
-  } 
+  /******* in case of a MAIN GEOM::SHAPE ********/
+  if (aShape->IsMainShape()) {
+    S = Load(geom, aShape);
+    Bind(IOR, S);
+    return S;
+  }
 
-  /******* in case of SUB GEOM::SHAPE ***********/ 
-  // Load and Explore the Main Shape 
-  TopoDS_Shape aMainShape = GetShape (geom, aShape->GetMainShape()); 
-  GEOM::ListOfLong_var list = aShape->GetSubShapeIndices(); 
+  /******* in case of SUB GEOM::SHAPE ***********/
+  // Load and Explore the Main Shape
+  TopoDS_Shape aMainShape = GetShape (geom, aShape->GetMainShape());
+  GEOM::ListOfLong_var list = aShape->GetSubShapeIndices();
 
   TopTools_IndexedMapOfShape anIndices;
   TopExp::MapShapes(aMainShape, anIndices);
 
-  /* Case of only one subshape */ 
-  if (list->length() == 1) 
-  { 
-    S = anIndices.FindKey(list[0]); 
-  } 
+  /* Case of only one subshape */
+  if (list->length() == 1) {
+    S = anIndices.FindKey(list[0]);
+  }
   else {
     BRep_Builder B;
     TopoDS_Compound aCompound;
     B.MakeCompound(aCompound);
-    for(int i=0; i<list->length(); i++) {
-      TopoDS_Shape aSubShape = anIndices.FindKey(list[i]); 
-      B.Add(aCompound, aSubShape);
+    for (int i = 0; i < list->length(); i++) {
+      if (0 < list[i] && list[i] <= anIndices.Extent()) {
+        TopoDS_Shape aSubShape = anIndices.FindKey(list[i]);
+        B.Add(aCompound, aSubShape);
+      }
     }
 
     S = aCompound;
   }
-  Bind(IOR, S); 
-  return S; 
-} 
-
+  Bind(IOR, S);
+  return S;
+}