From: kgv Date: Thu, 23 Oct 2014 10:15:59 +0000 (+0400) Subject: 0025381: Visualization - XCAFPrs_AISObject ignores visibility flag for sub-shapes X-Git-Tag: V6_8_0~75 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=86766b0ee04313231405759b4054acbaee96d5d2 0025381: Visualization - XCAFPrs_AISObject ignores visibility flag for sub-shapes Test case for issue CR25381 --- diff --git a/src/AIS/AIS_ColoredShape.cxx b/src/AIS/AIS_ColoredShape.cxx index 84e8afd594..aa50d38bbe 100644 --- a/src/AIS/AIS_ColoredShape.cxx +++ b/src/AIS/AIS_ColoredShape.cxx @@ -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 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 diff --git a/src/AIS/AIS_ColoredShape.hxx b/src/AIS/AIS_ColoredShape.hxx index f116bab7f6..c7b865fe4d 100644 --- a/src/AIS/AIS_ColoredShape.hxx +++ b/src/AIS/AIS_ColoredShape.hxx @@ -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; diff --git a/src/XCAFPrs/XCAFPrs_AISObject.cxx b/src/XCAFPrs/XCAFPrs_AISObject.cxx index 7848c231f2..464b8d78b2 100644 --- a/src/XCAFPrs/XCAFPrs_AISObject.cxx +++ b/src/XCAFPrs/XCAFPrs_AISObject.cxx @@ -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 index 0000000000..a21bfb84e1 --- /dev/null +++ b/tests/bugs/xde/bug25381 @@ -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