diff --git a/src/XCAFPrs/XCAFPrs_Style.cxx b/src/XCAFPrs/XCAFPrs_Style.cxx index 39e359e861..6cfb5ceea6 100644 --- a/src/XCAFPrs/XCAFPrs_Style.cxx +++ b/src/XCAFPrs/XCAFPrs_Style.cxx @@ -13,163 +13,56 @@ // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. - -#include #include //======================================================================= //function : XCAFPrs_Style -//purpose : +//purpose : //======================================================================= -XCAFPrs_Style::XCAFPrs_Style () : - defColorSurf(Standard_False), - defColorCurv(Standard_False), - myVisibility(Standard_True) +XCAFPrs_Style::XCAFPrs_Style() +: myHasColorSurf(Standard_False), + myHasColorCurv(Standard_False), + myIsVisible (Standard_True) { -} - -//======================================================================= -//function : IsSetColorSurf -//purpose : -//======================================================================= - -Standard_Boolean XCAFPrs_Style::IsSetColorSurf () const -{ - return defColorSurf; -} - -//======================================================================= -//function : GetColorSurf -//purpose : -//======================================================================= - -Quantity_Color XCAFPrs_Style::GetColorSurf () const -{ - return myColorSurf; + // } //======================================================================= //function : SetColorSurf -//purpose : +//purpose : //======================================================================= - -void XCAFPrs_Style::SetColorSurf (const Quantity_Color &col) +void XCAFPrs_Style::SetColorSurf (const Quantity_Color& theColor) { - myColorSurf = col; - defColorSurf = Standard_True; + myColorSurf = theColor; + myHasColorSurf = Standard_True; } //======================================================================= //function : UnSetColorSurf -//purpose : +//purpose : //======================================================================= - -void XCAFPrs_Style::UnSetColorSurf () +void XCAFPrs_Style::UnSetColorSurf() { - defColorSurf = Standard_False; - myColorSurf.SetValues ( Quantity_NOC_YELLOW ); -} - -//======================================================================= -//function : IsSetColorCurv -//purpose : -//======================================================================= - -Standard_Boolean XCAFPrs_Style::IsSetColorCurv () const -{ - return defColorCurv; -} - -//======================================================================= -//function : GetColorCurv -//purpose : -//======================================================================= - -Quantity_Color XCAFPrs_Style::GetColorCurv () const -{ - return myColorCurv; + myHasColorSurf = Standard_False; + myColorSurf.SetValues (Quantity_NOC_YELLOW); } //======================================================================= //function : SetColorCurv -//purpose : +//purpose : //======================================================================= - -void XCAFPrs_Style::SetColorCurv (const Quantity_Color &col) +void XCAFPrs_Style::SetColorCurv (const Quantity_Color& theColor) { - myColorCurv = col; - defColorCurv = Standard_True; + myColorCurv = theColor; + myHasColorCurv = Standard_True; } //======================================================================= //function : UnSetColorCurv -//purpose : +//purpose : //======================================================================= - -void XCAFPrs_Style::UnSetColorCurv () +void XCAFPrs_Style::UnSetColorCurv() { - defColorCurv = Standard_False; - myColorCurv.SetValues ( Quantity_NOC_YELLOW ); -} - -//======================================================================= -//function : SetVisibility -//purpose : -//======================================================================= - -void XCAFPrs_Style::SetVisibility (const Standard_Boolean visibility) -{ - myVisibility = visibility; - if ( ! visibility ) { UnSetColorSurf(); UnSetColorCurv(); } // for hash codes -} - -//======================================================================= -//function : IsVisible -//purpose : -//======================================================================= - -Standard_Boolean XCAFPrs_Style::IsVisible () const -{ - return myVisibility; -} - -//======================================================================= -//function : IsEqual -//purpose : -//======================================================================= - -Standard_Boolean XCAFPrs_Style::IsEqual (const XCAFPrs_Style &other) const -{ - return myVisibility == other.myVisibility && - ( ! myVisibility || - ( defColorSurf == other.defColorSurf && - defColorCurv == other.defColorCurv && - ( ! defColorSurf || myColorSurf == other.myColorSurf ) && - ( ! defColorCurv || myColorCurv == other.myColorCurv ) ) ); -} - -//======================================================================= -//function : HashCode -//purpose : -//======================================================================= - -Standard_Integer XCAFPrs_Style::HashCode (const XCAFPrs_Style& S, const Standard_Integer Upper) -{ - int *meintPtr = (int*)&S; - Standard_Integer aHashCode=0, i, aSize = sizeof(S) / sizeof(int); - - for (i = 0; i < aSize; i++, meintPtr++) { - aHashCode = aHashCode ^ *meintPtr; - } - return ::HashCode( aHashCode, Upper); -} - -//======================================================================= -//function : IsEqual -//purpose : -//======================================================================= - -Standard_Boolean XCAFPrs_Style::IsEqual (const XCAFPrs_Style& S1, const XCAFPrs_Style& S2) -{ - return S1.IsEqual(S2); + myHasColorCurv = Standard_False; + myColorCurv.SetValues (Quantity_NOC_YELLOW); } diff --git a/src/XCAFPrs/XCAFPrs_Style.hxx b/src/XCAFPrs/XCAFPrs_Style.hxx index 925461994f..7e5c57c6ea 100644 --- a/src/XCAFPrs/XCAFPrs_Style.hxx +++ b/src/XCAFPrs/XCAFPrs_Style.hxx @@ -19,92 +19,108 @@ #include #include #include +#include -#include -#include -#include -class Quantity_Color; - - -//! Represents a set of styling settings applicable to -//! a (sub)shape +//! Represents a set of styling settings applicable to a (sub)shape class XCAFPrs_Style { public: DEFINE_STANDARD_ALLOC - + //! Empty constructor - colors are unset, visibility is TRUE. Standard_EXPORT XCAFPrs_Style(); - - Standard_EXPORT Standard_Boolean IsSetColorSurf() const; - - Standard_EXPORT Quantity_Color GetColorSurf() const; - + + //! Return TRUE if surface color has been defined. + Standard_Boolean IsSetColorSurf() const { return myHasColorSurf; } + + //! Return surface color. + const Quantity_Color& GetColorSurf() const { return myColorSurf; } + + //! Set surface color. Standard_EXPORT void SetColorSurf (const Quantity_Color& col); //! Manage surface color setting Standard_EXPORT void UnSetColorSurf(); - Standard_EXPORT Standard_Boolean IsSetColorCurv() const; - - Standard_EXPORT Quantity_Color GetColorCurv() const; - + //! Return TRUE if curve color has been defined. + Standard_Boolean IsSetColorCurv() const { return myHasColorCurv; } + + //! Return curve color. + const Quantity_Color& GetColorCurv() const { return myColorCurv; } + + //! Set curve color. Standard_EXPORT void SetColorCurv (const Quantity_Color& col); //! Manage curve color setting Standard_EXPORT void UnSetColorCurv(); - - Standard_EXPORT void SetVisibility (const Standard_Boolean visibility); - - //! Manage visibility - //! Note: Setting visibility to False makes colors undefined - //! This is necessary for HashCode - Standard_EXPORT Standard_Boolean IsVisible() const; - - //! Returs True if styles are the same + + //! Assign visibility. + void SetVisibility (const Standard_Boolean theVisibility) { myIsVisible = theVisibility; } + + //! Manage visibility. + Standard_Boolean IsVisible() const { return myIsVisible; } + + //! Returns True if styles are the same //! Methods for using Style as key in maps - Standard_EXPORT Standard_Boolean IsEqual (const XCAFPrs_Style& other) const; -Standard_Boolean operator == (const XCAFPrs_Style& other) const -{ - return IsEqual(other); -} - - //! Returns a HasCode value for the Key in the - //! range 0..Upper. - Standard_EXPORT static Standard_Integer HashCode (const XCAFPrs_Style& S, const Standard_Integer Upper); - - //! Returns True when the two keys are the same. Two - //! same keys must have the same hashcode, the - //! contrary is not necessary. - Standard_EXPORT static Standard_Boolean IsEqual (const XCAFPrs_Style& S1, const XCAFPrs_Style& S2); + Standard_Boolean IsEqual (const XCAFPrs_Style& theOther) const + { + if (myIsVisible != theOther.myIsVisible) + { + return false; + } + else if (!myIsVisible) + { + return true; + } + return myHasColorSurf == theOther.myHasColorSurf + && myHasColorCurv == theOther.myHasColorCurv + && (!myHasColorSurf || myColorSurf == theOther.myColorSurf) + && (!myHasColorCurv || myColorCurv == theOther.myColorCurv); + } + //! Returns True if styles are the same. + Standard_Boolean operator== (const XCAFPrs_Style& theOther) const + { + return IsEqual (theOther); + } + //! Returns a HasCode value. + static Standard_Integer HashCode (const XCAFPrs_Style& theStyle, + const Standard_Integer theUpper) + { + if (!theStyle.myIsVisible) + { + return 1; + } + + int aHashCode = 0; + if (theStyle.myHasColorSurf) + { + aHashCode = aHashCode ^ Quantity_ColorHasher::HashCode (theStyle.myColorSurf, theUpper); + } + if (theStyle.myHasColorCurv) + { + aHashCode = aHashCode ^ Quantity_ColorHasher::HashCode (theStyle.myColorCurv, theUpper); + } + return ((aHashCode & 0x7fffffff) % theUpper) + 1; + } + + //! Returns True when the two keys are the same. + static Standard_Boolean IsEqual (const XCAFPrs_Style& theS1, const XCAFPrs_Style& theS2) + { + return theS1.IsEqual (theS2); + } protected: - - - - -private: - - - - Standard_Boolean defColorSurf; - Standard_Boolean defColorCurv; - Standard_Boolean myVisibility; - Quantity_Color myColorSurf; - Quantity_Color myColorCurv; - + Quantity_Color myColorSurf; + Quantity_Color myColorCurv; + Standard_Boolean myHasColorSurf; + Standard_Boolean myHasColorCurv; + Standard_Boolean myIsVisible; }; - - - - - - #endif // _XCAFPrs_Style_HeaderFile