0025381: Visualization - XCAFPrs_AISObject ignores visibility flag for sub-shapes
authorkgv <kgv@opencascade.com>
Thu, 23 Oct 2014 10:15:59 +0000 (14:15 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 23 Oct 2014 12:20:39 +0000 (16:20 +0400)
Test case for issue CR25381

src/AIS/AIS_ColoredShape.cxx
src/AIS/AIS_ColoredShape.hxx
src/XCAFPrs/XCAFPrs_AISObject.cxx
tests/bugs/xde/bug25381 [new file with mode: 0644]

index 84e8afd..aa50d38 100644 (file)
@@ -312,7 +312,19 @@ void AIS_ColoredShape::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
     {
       const TopoDS_Shape&    aShapeKey  = aMapIter.Key();   // key shape with detailed color or a base shape
       const TopoDS_Compound& aShapeDraw = aMapIter.Value(); // compound of subshapes with <aShType> type
-      Handle(AIS_Drawer)     aDrawer    = !myShapeColors.Find (aShapeKey, aCustomDrawer) ? myDrawer : aCustomDrawer;
+      Handle(AIS_Drawer)     aDrawer;
+      if (myShapeColors.Find (aShapeKey, aCustomDrawer))
+      {
+        aDrawer = aCustomDrawer;
+        if (aCustomDrawer->IsHidden())
+        {
+          continue;
+        }
+      }
+      else
+      {
+        aDrawer = myDrawer;
+      }
 
       // Draw each kind of subshapes and personal-colored shapes in a separate group
       // since it's necessary to set transparency/material for all subshapes
index f116bab..c7b865f 100644 (file)
@@ -30,12 +30,15 @@ class AIS_ColoredDrawer : public AIS_Drawer
 public:
 
   AIS_ColoredDrawer (const Handle(AIS_Drawer)& theLink)
-  : myHasOwnColor (Standard_False),
+  : myIsHidden    (Standard_False),
+    myHasOwnColor (Standard_False),
     myHasOwnWidth (Standard_False)
   {
     Link (theLink);
   }
 
+  Standard_Boolean IsHidden()    const                              { return myIsHidden; }
+  void             SetHidden (const Standard_Boolean theToHide)     { myIsHidden = theToHide;  }
   Standard_Boolean HasOwnColor() const                              { return myHasOwnColor; }
   void             UnsetOwnColor()                                  { myHasOwnColor = Standard_False; }
   void             SetOwnColor (const Quantity_Color& /*theColor*/) { myHasOwnColor = Standard_True;  }
@@ -45,6 +48,7 @@ public:
 
 public:  //! @name list of overridden properties
 
+  Standard_Boolean myIsHidden;
   Standard_Boolean myHasOwnColor;
   Standard_Boolean myHasOwnWidth;
 
index 7848c23..464b8d7 100644 (file)
@@ -155,6 +155,7 @@ void XCAFPrs_AISObject::Compute (const Handle(PrsMgr_PresentationManager3d)& the
   {
     Handle(AIS_ColoredDrawer) aDrawer = CustomAspects (anIter.Key());
     const XCAFPrs_Style& aStyle = anIter.Value();
+    aDrawer->SetHidden (!aStyle.IsVisible());
 
     aColorCurv = aStyle.IsSetColorCurv() ? aStyle.GetColorCurv() : aDefStyle.GetColorCurv();
     aColorSurf = aStyle.IsSetColorSurf() ? aStyle.GetColorSurf() : aDefStyle.GetColorSurf();
diff --git a/tests/bugs/xde/bug25381 b/tests/bugs/xde/bug25381
new file mode 100644 (file)
index 0000000..a21bfb8
--- /dev/null
@@ -0,0 +1,23 @@
+puts "============"
+puts "CR25381"
+puts "============"
+puts ""
+######################################################
+# Visualization - XCAFPrs_AISObject ignores visibility flag for sub-shapes
+######################################################
+
+pload QAcommands
+
+ReadStep D [locate_data_file bug25381_test_assembly_invisible.step]
+XShow D
+vfit
+
+decho off
+if { [catch { QAGetPixelColor 198 172 1 1 1 }] != 0 } {
+   decho on
+   puts "OK : XCAFPrs_AISObject get visibility flag for sub-shapes"
+} else {
+   puts "Error : XCAFPrs_AISObject ignores visibility flag for sub-shapes"
+}
+
+set only_screen 1