diff --git a/src/Graphic3d/Graphic3d_GraduatedTrihedron.hxx b/src/Graphic3d/Graphic3d_GraduatedTrihedron.hxx index 6aee4b3a46..9cbe30c285 100644 --- a/src/Graphic3d/Graphic3d_GraduatedTrihedron.hxx +++ b/src/Graphic3d/Graphic3d_GraduatedTrihedron.hxx @@ -26,19 +26,27 @@ class Graphic3d_CView; -//! Class that stores style for one graduated trihedron axis such as colors, lengths and customization flags. -//! It is used in Graphic3d_GraduatedTrihedron. -class Graphic3d_AxisAspect +//! Defines the class of a graduated trihedron. +//! It contains main style parameters for implementation of graduated trihedron +//! @sa OpenGl_GraduatedTrihedron +class Graphic3d_GraduatedTrihedron { + +public: + + //! Class that stores style for one graduated trihedron axis such as colors, lengths and customization flags. + //! It is used in Graphic3d_GraduatedTrihedron. + class AxisAspect + { public: - Graphic3d_AxisAspect (const TCollection_ExtendedString theName = "", const Quantity_Color theNameColor = Quantity_NOC_BLACK, - const Quantity_Color theColor = Quantity_NOC_BLACK, - const Standard_Integer theValuesOffset = 10, const Standard_Integer theNameOffset = 30, - const Standard_Integer theTickmarksNumber = 5, const Standard_Integer theTickmarksLength = 10, - const Standard_Boolean theToDrawName = Standard_True, - const Standard_Boolean theToDrawValues = Standard_True, - const Standard_Boolean theToDrawTickmarks = Standard_True) + AxisAspect (const TCollection_ExtendedString theName = "", const Quantity_Color theNameColor = Quantity_NOC_BLACK, + const Quantity_Color theColor = Quantity_NOC_BLACK, + const Standard_Integer theValuesOffset = 10, const Standard_Integer theNameOffset = 30, + const Standard_Integer theTickmarksNumber = 5, const Standard_Integer theTickmarksLength = 10, + const Standard_Boolean theToDrawName = Standard_True, + const Standard_Boolean theToDrawValues = Standard_True, + const Standard_Boolean theToDrawTickmarks = Standard_True) : myName (theName), myToDrawName (theToDrawName), myToDrawTickmarks (theToDrawTickmarks), @@ -51,42 +59,42 @@ class Graphic3d_AxisAspect myNameOffset (theNameOffset) { } -public: + public: - void SetName (const TCollection_ExtendedString& theName) { myName = theName; } - const TCollection_ExtendedString& Name() const { return myName; } + void SetName (const TCollection_ExtendedString& theName) { myName = theName; } + const TCollection_ExtendedString& Name() const { return myName; } - Standard_Boolean ToDrawName() const { return myToDrawName; } - void SetDrawName (const Standard_Boolean theToDraw) { myToDrawName = theToDraw; } + Standard_Boolean ToDrawName() const { return myToDrawName; } + void SetDrawName (const Standard_Boolean theToDraw) { myToDrawName = theToDraw; } - Standard_Boolean ToDrawTickmarks() const { return myToDrawTickmarks; } - void SetDrawTickmarks (const Standard_Boolean theToDraw) { myToDrawTickmarks = theToDraw; } + Standard_Boolean ToDrawTickmarks() const { return myToDrawTickmarks; } + void SetDrawTickmarks (const Standard_Boolean theToDraw) { myToDrawTickmarks = theToDraw; } - Standard_Boolean ToDrawValues() const { return myToDrawValues; } - void SetDrawValues (const Standard_Boolean theToDraw) { myToDrawValues = theToDraw; } + Standard_Boolean ToDrawValues() const { return myToDrawValues; } + void SetDrawValues (const Standard_Boolean theToDraw) { myToDrawValues = theToDraw; } - const Quantity_Color& NameColor() const { return myNameColor; } - void SetNameColor (const Quantity_Color& theColor) { myNameColor = theColor; } + const Quantity_Color& NameColor() const { return myNameColor; } + void SetNameColor (const Quantity_Color& theColor) { myNameColor = theColor; } - //! Color of axis and values - const Quantity_Color& Color() const { return myColor; } + //! Color of axis and values + const Quantity_Color& Color() const { return myColor; } - //! Sets color of axis and values - void SetColor (const Quantity_Color& theColor) { myColor = theColor; } + //! Sets color of axis and values + void SetColor (const Quantity_Color& theColor) { myColor = theColor; } - Standard_Integer TickmarksNumber() const { return myTickmarksNumber; } - void SetTickmarksNumber (const Standard_Integer theValue) { myTickmarksNumber = theValue; } + Standard_Integer TickmarksNumber() const { return myTickmarksNumber; } + void SetTickmarksNumber (const Standard_Integer theValue) { myTickmarksNumber = theValue; } - Standard_Integer TickmarksLength() const { return myTickmarksLength; } - void SetTickmarksLength (const Standard_Integer theValue) { myTickmarksLength = theValue; } + Standard_Integer TickmarksLength() const { return myTickmarksLength; } + void SetTickmarksLength (const Standard_Integer theValue) { myTickmarksLength = theValue; } - Standard_Integer ValuesOffset() const { return myValuesOffset; } - void SetValuesOffset (const Standard_Integer theValue) { myValuesOffset = theValue; } + Standard_Integer ValuesOffset() const { return myValuesOffset; } + void SetValuesOffset (const Standard_Integer theValue) { myValuesOffset = theValue; } - Standard_Integer NameOffset() const { return myNameOffset; } - void SetNameOffset (const Standard_Integer theValue) { myNameOffset = theValue; } + Standard_Integer NameOffset() const { return myNameOffset; } + void SetNameOffset (const Standard_Integer theValue) { myNameOffset = theValue; } -protected: + protected: TCollection_ExtendedString myName; @@ -102,13 +110,8 @@ protected: Standard_Integer myValuesOffset; //!< Offset for drawing values Standard_Integer myNameOffset; //!< Offset for drawing name of axis -}; + }; -//! Defines the class of a graduated trihedron. -//! It contains main style parameters for implementation of graduated trihedron -//! @sa OpenGl_GraduatedTrihedron -class Graphic3d_GraduatedTrihedron -{ public: typedef void (*MinMaxValuesCallback) (Graphic3d_CView*); @@ -123,7 +126,8 @@ public: const Font_FontAspect& theValuesStyle = Font_FA_Regular, const Standard_Integer theValuesSize = 12, const Standard_ShortReal theArrowsLength = 30.0f, const Quantity_Color theGridColor = Quantity_NOC_WHITE, const Standard_Boolean theToDrawGrid = Standard_True, const Standard_Boolean theToDrawAxes = Standard_True) - : myNamesFont (theNamesFont), + : myCubicAxesCallback (NULL), + myNamesFont (theNamesFont), myNamesStyle (theNamesStyle), myNamesSize (theNamesSize), myValuesFont (theValuesFont), @@ -135,29 +139,28 @@ public: myToDrawAxes (theToDrawAxes), myAxes(0, 2) { - myAxes (0) = Graphic3d_AxisAspect ("X", Quantity_NOC_RED, Quantity_NOC_RED); - myAxes (1) = Graphic3d_AxisAspect ("Y", Quantity_NOC_GREEN, Quantity_NOC_GREEN); - myAxes (2) = Graphic3d_AxisAspect ("Z", Quantity_NOC_BLUE1, Quantity_NOC_BLUE1); - PtrView = NULL; + myAxes (0) = AxisAspect ("X", Quantity_NOC_RED, Quantity_NOC_RED); + myAxes (1) = AxisAspect ("Y", Quantity_NOC_GREEN, Quantity_NOC_GREEN); + myAxes (2) = AxisAspect ("Z", Quantity_NOC_BLUE1, Quantity_NOC_BLUE1); } public: - Graphic3d_AxisAspect& ChangeXAxisAspect() { return myAxes(0); } - Graphic3d_AxisAspect& ChangeYAxisAspect() { return myAxes(1); } - Graphic3d_AxisAspect& ChangeZAxisAspect() { return myAxes(2); } + AxisAspect& ChangeXAxisAspect() { return myAxes(0); } + AxisAspect& ChangeYAxisAspect() { return myAxes(1); } + AxisAspect& ChangeZAxisAspect() { return myAxes(2); } - Graphic3d_AxisAspect& ChangeAxisAspect (const Standard_Integer theIndex) + AxisAspect& ChangeAxisAspect (const Standard_Integer theIndex) { Standard_OutOfRange_Raise_if (theIndex < 0 || theIndex > 2, "Graphic3d_GraduatedTrihedron::ChangeAxisAspect: theIndex is out of bounds [0,2]."); return myAxes (theIndex); } - const Graphic3d_AxisAspect& XAxisAspect() const { return myAxes(0); } - const Graphic3d_AxisAspect& YAxisAspect() const { return myAxes(1); } - const Graphic3d_AxisAspect& ZAxisAspect() const { return myAxes(2); } + const AxisAspect& XAxisAspect() const { return myAxes(0); } + const AxisAspect& YAxisAspect() const { return myAxes(1); } + const AxisAspect& ZAxisAspect() const { return myAxes(2); } - const Graphic3d_AxisAspect& AxisAspect (const Standard_Integer theIndex) const + const AxisAspect& AxisAspectAt (const Standard_Integer theIndex) const { Standard_OutOfRange_Raise_if (theIndex < 0 || theIndex > 2, "Graphic3d_GraduatedTrihedron::AxisAspect: theIndex is out of bounds [0,2]."); return myAxes (theIndex); @@ -193,13 +196,21 @@ public: Standard_Integer ValuesSize() const { return myValuesSize; } void SetValuesSize (const Standard_Integer theValue) { myValuesSize = theValue; } -public: - - MinMaxValuesCallback CubicAxesCallback; //!< Callback function to define boundary box of displayed objects - Graphic3d_CView* PtrView; + Standard_Boolean CubicAxesCallback(Graphic3d_CView* theView) const + { + if (myCubicAxesCallback != NULL) + { + myCubicAxesCallback (theView); + return Standard_True; + } + return Standard_False; + } + void SetCubicAxesCallback (const MinMaxValuesCallback theCallback) { myCubicAxesCallback = theCallback; } protected: + MinMaxValuesCallback myCubicAxesCallback; //!< Callback function to define boundary box of displayed objects + TCollection_AsciiString myNamesFont; //!< Font name of names of axes: Courier, Arial, ... Font_FontAspect myNamesStyle; //!< Style of names of axes: OSD_FA_Regular, OSD_FA_Bold,.. Standard_Integer myNamesSize; //!< Size of names of axes: 8, 10,.. @@ -218,7 +229,7 @@ protected: Standard_Boolean myToDrawGrid; Standard_Boolean myToDrawAxes; - NCollection_Array1 myAxes; //!< X, Y and Z axes parameters + NCollection_Array1 myAxes; //!< X, Y and Z axes parameters }; #endif // Graphic3d_GraduatedTrihedron_HeaderFile diff --git a/src/OpenGl/OpenGl_GraduatedTrihedron.cxx b/src/OpenGl/OpenGl_GraduatedTrihedron.cxx index d599a153e2..813f840185 100755 --- a/src/OpenGl/OpenGl_GraduatedTrihedron.cxx +++ b/src/OpenGl/OpenGl_GraduatedTrihedron.cxx @@ -355,7 +355,7 @@ void OpenGl_GraduatedTrihedron::renderGridPlane (const Handle(OpenGl_Workspace)& const GridAxes& theGridAxes, OpenGl_Mat4& theMat) const { - const Graphic3d_AxisAspect& aCurAspect = myData.AxisAspect (theIndex); + const Graphic3d_GraduatedTrihedron::AxisAspect& aCurAspect = myData.AxisAspectAt (theIndex); if (aCurAspect.TickmarksNumber() <= 0) { return; @@ -475,7 +475,7 @@ void OpenGl_GraduatedTrihedron::renderTickmarkLabels (const Handle(OpenGl_Worksp const GridAxes& theGridAxes, const Standard_ShortReal theDpix) const { - const Graphic3d_AxisAspect& aCurAspect = myData.AxisAspect (theIndex); + const Graphic3d_GraduatedTrihedron::AxisAspect& aCurAspect = myData.AxisAspectAt (theIndex); if (!aCurAspect.ToDrawName() && !aCurAspect.ToDrawValues()) { return; @@ -566,9 +566,8 @@ void OpenGl_GraduatedTrihedron::Render (const Handle(OpenGl_Workspace)& theWorks OpenGl_Vec3 anOldMin = myMin; OpenGl_Vec3 anOldMax = myMax; - if (myData.CubicAxesCallback) + if (myData.CubicAxesCallback(theWorkspace->View())) { - myData.CubicAxesCallback (myData.PtrView); if (!myAxes[0].Line.IsInitialized() || !myAxes[1].Line.IsInitialized() || !myAxes[2].Line.IsInitialized() @@ -719,7 +718,7 @@ void OpenGl_GraduatedTrihedron::SetMinMax (const OpenGl_Vec3& theMin, const Open // method : OpenGl_GraduatedTrihedron::Axis constructor // purpose : // ======================================================================= -OpenGl_GraduatedTrihedron::Axis::Axis (const Graphic3d_AxisAspect& theAspect, +OpenGl_GraduatedTrihedron::Axis::Axis (const Graphic3d_GraduatedTrihedron::AxisAspect& theAspect, const OpenGl_Vec3& theDirection) : Direction (theDirection), Tickmark (NULL), diff --git a/src/OpenGl/OpenGl_GraduatedTrihedron.hxx b/src/OpenGl/OpenGl_GraduatedTrihedron.hxx index c18c94efc6..68dad06789 100755 --- a/src/OpenGl/OpenGl_GraduatedTrihedron.hxx +++ b/src/OpenGl/OpenGl_GraduatedTrihedron.hxx @@ -81,7 +81,8 @@ private: public: - Axis (const Graphic3d_AxisAspect& theAspect = Graphic3d_AxisAspect(), + Axis (const Graphic3d_GraduatedTrihedron::AxisAspect& theAspect = + Graphic3d_GraduatedTrihedron::AxisAspect(), const OpenGl_Vec3& theDirection = OpenGl_Vec3 (1.0f, 0.0f, 0.0f)); ~Axis(); diff --git a/src/OpenGl/OpenGl_View.cxx b/src/OpenGl/OpenGl_View.cxx index 4e3293828f..bc45b81c19 100644 --- a/src/OpenGl/OpenGl_View.cxx +++ b/src/OpenGl/OpenGl_View.cxx @@ -433,8 +433,7 @@ static void SetMinMaxValuesCallback (Graphic3d_CView* theView) void OpenGl_View::GraduatedTrihedronDisplay (const Graphic3d_GraduatedTrihedron& theTrihedronData) { myGTrihedronData = theTrihedronData; - myGTrihedronData.PtrView = this; - myGTrihedronData.CubicAxesCallback = SetMinMaxValuesCallback; + myGTrihedronData.SetCubicAxesCallback (SetMinMaxValuesCallback); myGraduatedTrihedron.SetValues (myGTrihedronData); myToShowGradTrihedron = true; } @@ -445,7 +444,6 @@ void OpenGl_View::GraduatedTrihedronDisplay (const Graphic3d_GraduatedTrihedron& // ======================================================================= void OpenGl_View::GraduatedTrihedronErase() { - myGTrihedronData.PtrView = NULL; myGraduatedTrihedron.Release (myWorkspace->GetGlContext().operator->()); myToShowGradTrihedron = false; }