]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Fix problem of displaying sub-objects of the main shape
authorvsr <vsr@opencascade.com>
Tue, 7 Dec 2010 13:24:27 +0000 (13:24 +0000)
committervsr <vsr@opencascade.com>
Tue, 7 Dec 2010 13:24:27 +0000 (13:24 +0000)
src/GEOMClient/GEOM_Client.cxx
src/GEOMClient/GEOM_Client.hxx

index 3e047e220b8c602fcef5c2db61a28967eaf2e872..6a89e6893a443d1d8c95f7ac56fa8ae7e7de05a5 100644 (file)
@@ -78,7 +78,7 @@ TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr a
     /* get sequence of bytes of resulting brep shape from GEOM server */
     TopoDS_Shape S;
     SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream();
-    int sizebuf = SeqFile->length();
+    /*int sizebuf = */SeqFile->length();
     char* buf;
     buf = (char*) &SeqFile[0];
     std::istringstream streamBrep(buf);
@@ -102,6 +102,19 @@ GEOM_Client::GEOM_Client()
 #endif
 }
 
+//=======================================================================
+// function : Create()
+// purpose  : Copy constructor
+//=======================================================================
+GEOM_Client::GEOM_Client(const GEOM_Client& client)
+{ 
+  myIORs = client.myIORs;
+  myShapes = client.myShapes;
+  _myIndexes = client._myIndexes;
+  _mySubShapes = client._mySubShapes;
+  pid_client = client.pid_client;
+}
+
 //=======================================================================
 // function : Create()
 // purpose  :
@@ -221,20 +234,20 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
   TopoDS_Shape aMainShape = GetShape (geom, aShape->GetMainShape());
   GEOM::ListOfLong_var list = aShape->GetSubShapeIndices();
 
-  TopTools_IndexedMapOfShape anIndices;
   CORBA::String_var aMainIOR = geom->GetStringFromIOR(aShape->GetMainShape());
   TCollection_AsciiString mainIOR = (char*)aMainIOR.in();
 
   //find subshapes only one time
   if(_mySubShapes.count(mainIOR)==0)
+  {
+    TopTools_IndexedMapOfShape anIndices;
+    TopExp::MapShapes(aMainShape, anIndices);
+    Standard_Integer ii = 1, nbSubSh = anIndices.Extent();
+    for (; ii <= nbSubSh; ii++) 
     {
-      TopExp::MapShapes(aMainShape, anIndices);
-      Standard_Integer ii = 1, nbSubSh = anIndices.Extent();
-      for (; ii <= nbSubSh; ii++) 
-        {
-          _mySubShapes[mainIOR].push_back(anIndices.FindKey(ii));
-        }
+      _mySubShapes[mainIOR].push_back(anIndices.FindKey(ii));
     }
+  }
 
   /* Case of only one subshape */
   if (list->length() == 1 && list[0] > 0) {
@@ -245,7 +258,7 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
     TopoDS_Compound aCompound;
     B.MakeCompound(aCompound);
     for (int i = 0; i < list->length(); i++) {
-      if (0 < list[i] && list[i] <= anIndices.Extent()) {
+      if (0 < list[i] && list[i] <= _mySubShapes[mainIOR].size()) {
         TopoDS_Shape aSubShape = _mySubShapes[mainIOR][list[i]-1];
         B.Add(aCompound, aSubShape);
       }
index d200297195aade71902ee05bde4f29da26f95e19..6b81488eea24262ec496ae065f146de8d65a84ad 100644 (file)
@@ -111,6 +111,8 @@ public:
   //Standard_EXPORT   
   GEOM_Client(Engines::Container_ptr client);
   //Standard_EXPORT   
+  GEOM_Client(const GEOM_Client& client);
+  //Standard_EXPORT   
   Standard_Integer Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) ;
   //Standard_EXPORT   
   Standard_Integer Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;