]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
bos #23963 - EDF 22935 : Extrusion3D, submesh problem. Fix groups handling with ticks
authorjfa <jfa@opencascade.com>
Wed, 17 Feb 2021 10:18:13 +0000 (13:18 +0300)
committerjfa <jfa@opencascade.com>
Wed, 17 Feb 2021 10:18:13 +0000 (13:18 +0300)
src/GEOMClient/GEOM_Client.cxx

index 897a475414249833e3c76f586c53ea8d1546a54b..d9796231422eabaf100851c864b9fc6f1f86f0b1 100644 (file)
@@ -201,13 +201,27 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
 {
   CORBA::String_var     anIOR = geom->GetStringFromIOR(aShape);
   TCollection_AsciiString IOR = anIOR.in();
+
+  // Special treatment for groups: group value (shape) is computed on
+  // first demand, and its tick is set to main shape's tick after that;
+  // tick of modified group is decremented.
+  // There is a not fixed problem: if anyone modifies a group and updates
+  // it before call to this method, the group will not be changed in the buffer
+  bool isModifiedSubShape = false;
   int aShapeTick = aShape->GetTick();
+  if ( !aShape->IsMainShape() ) {
+    int anOldTick = aShapeTick;
+    aShape->GetShapeType(); // compute subshape and update its tick, if not yet
+    aShapeTick = aShape->GetTick();
+    isModifiedSubShape = (anOldTick != aShapeTick);
+  }
 
   std::map< TCollection_AsciiString , int >::iterator i2t = myTicksMap.find( IOR );
   if ( i2t != myTicksMap.end() ) {
-    // The shape was modified, clean the stored one
-    if (i2t->second != aShapeTick)
+    if (i2t->second != aShapeTick || isModifiedSubShape) {
+      // The shape was modified, clean the stored one
       RemoveShapeFromBuffer(IOR);
+    }
   }
 
   TopoDS_Shape S;
@@ -255,6 +269,7 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
 
     S = aCompound;
   }
+
   Bind(IOR, S, aShapeTick);
   return S;
 }