0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / Prs3d / Prs3d_DatumAspect.cxx
index 4736cf5..db7b7e1 100644 (file)
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement.
 
-
 #include <Prs3d_DatumAspect.hxx>
-#include <Prs3d_LineAspect.hxx>
-#include <Standard_Type.hxx>
 
-IMPLEMENT_STANDARD_RTTIEXT(Prs3d_DatumAspect,Prs3d_BasicAspect)
+#include <Standard_Dump.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Prs3d_DatumAspect, Prs3d_BasicAspect)
 
+// =======================================================================
+// function : Prs3d_DatumAspect
+// purpose  :
+// =======================================================================
 Prs3d_DatumAspect::Prs3d_DatumAspect()
-: myDrawFirstAndSecondAxis (Standard_True),
-  myDrawThirdAxis (Standard_True),
+: myAxes (Prs3d_DA_XYZAxis),
   myToDrawLabels (Standard_True),
-  myFirstAxisLength (10.0),
-  mySecondAxisLength (10.0),
-  myThirdAxisLength (10.0)
+  myToDrawArrows (Standard_True)
 {
-  myFirstAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
-  mySecondAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
-  myThirdAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
-}
-
-Handle(Prs3d_LineAspect) Prs3d_DatumAspect::FirstAxisAspect() const {
-
-  return myFirstAxisAspect;
+  Standard_Real aDefaultLength = 100.0; // default axis length, the same as in context
+  Quantity_Color aDefaultColor(Quantity_NOC_LIGHTSTEELBLUE4); // default axis color
+
+  myAttributes.Bind (Prs3d_DA_XAxisLength, aDefaultLength);
+  myAttributes.Bind (Prs3d_DA_YAxisLength, aDefaultLength);
+  myAttributes.Bind (Prs3d_DA_ZAxisLength, aDefaultLength);
+  myAttributes.Bind (Prs3d_DP_ShadingTubeRadiusPercent,   0.02);
+  myAttributes.Bind (Prs3d_DP_ShadingConeRadiusPercent,   0.04);
+  myAttributes.Bind (Prs3d_DP_ShadingConeLengthPercent,   0.1);
+  myAttributes.Bind (Prs3d_DP_ShadingOriginRadiusPercent, 0.015);
+  myAttributes.Bind (Prs3d_DP_ShadingNumberOfFacettes,    12.0);
+
+  Aspect_TypeOfLine aLineType = Aspect_TOL_SOLID;
+  Standard_Real aWidth = 1.0;
+  for (int aPartIter = Prs3d_DP_Origin; aPartIter <= Prs3d_DP_XOZAxis; ++aPartIter)
+  {
+    const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter;
+    if (aPart != Prs3d_DP_Origin) // origin point is used only in shading mode
+    {
+      myLineAspects.Bind (aPart, new Prs3d_LineAspect (aDefaultColor, aLineType, aWidth));
+    }
+
+    Handle(Prs3d_ShadingAspect) aShadingAspect = new Prs3d_ShadingAspect();
+    aShadingAspect->SetColor (aDefaultColor);
+    myShadedAspects.Bind (aPart, aShadingAspect);
+  }
+  myTextAspect  = new Prs3d_TextAspect();
+  myPointAspect = new Prs3d_PointAspect (Aspect_TOM_EMPTY, aDefaultColor, 1.0);
+  myArrowAspect = new Prs3d_ArrowAspect();
 }
 
-Handle(Prs3d_LineAspect) Prs3d_DatumAspect::SecondAxisAspect()  const {
-
-  return mySecondAxisAspect;
-}
-
-Handle(Prs3d_LineAspect) Prs3d_DatumAspect::ThirdAxisAspect()  const {
-
-  return myThirdAxisAspect;
-
-}
-Standard_Boolean Prs3d_DatumAspect::DrawFirstAndSecondAxis () const {
-
-  return myDrawFirstAndSecondAxis;
-
-}
-
-void Prs3d_DatumAspect::SetDrawFirstAndSecondAxis (const Standard_Boolean draw)
+// =======================================================================
+// function : LineAspect
+// purpose  :
+// =======================================================================
+Handle(Prs3d_LineAspect) Prs3d_DatumAspect::LineAspect (Prs3d_DatumParts thePart) const
 {
-  myDrawFirstAndSecondAxis = draw;
+  Handle(Prs3d_LineAspect) aLineAspect;
+  myLineAspects.Find (thePart, aLineAspect);
+  return aLineAspect;
 }
 
-Standard_Boolean Prs3d_DatumAspect::DrawThirdAxis () const {
-
-  return myDrawThirdAxis;
-
-}
-
-void Prs3d_DatumAspect::SetDrawThirdAxis (const Standard_Boolean draw)
+// =======================================================================
+// function : ShadingAspect
+// purpose  :
+// =======================================================================
+Handle(Prs3d_ShadingAspect) Prs3d_DatumAspect::ShadingAspect (Prs3d_DatumParts thePart) const
 {
-  myDrawThirdAxis = draw;
+  Handle(Prs3d_ShadingAspect) aShadingAspect;
+  myShadedAspects.Find (thePart, aShadingAspect);
+  return aShadingAspect;
 }
 
-void Prs3d_DatumAspect::SetAxisLength (const Quantity_Length L1,
-                                      const Quantity_Length L2,
-                                      const Quantity_Length L3) {
-
-  myFirstAxisLength = L1;
-  mySecondAxisLength = L2;
-  myThirdAxisLength = L3;
+// =======================================================================
+// function : SetDrawFirstAndSecondAxis
+// purpose  :
+// =======================================================================
+void Prs3d_DatumAspect::SetDrawFirstAndSecondAxis (Standard_Boolean theToDraw)
+{
+  if (theToDraw)
+  {
+    myAxes = ((myAxes & Prs3d_DA_ZAxis) != 0 ? Prs3d_DA_XYZAxis : Prs3d_DA_XYAxis);
+  }
+  else
+  {
+    myAxes = Prs3d_DA_ZAxis;
+  }
 }
 
-
-Quantity_Length Prs3d_DatumAspect::FirstAxisLength () const {
-
-  return myFirstAxisLength;
-
+// =======================================================================
+// function : SetDrawThirdAxis
+// purpose  :
+// =======================================================================
+void Prs3d_DatumAspect::SetDrawThirdAxis (Standard_Boolean theToDraw)
+{
+  if (theToDraw)
+  {
+    myAxes = ((myAxes & Prs3d_DA_XYAxis) != 0 ? Prs3d_DA_XYZAxis : Prs3d_DA_ZAxis);
+  }
+  else
+  {
+    myAxes = Prs3d_DA_XYAxis;
+  }
 }
 
-Quantity_Length Prs3d_DatumAspect::SecondAxisLength () const {
-
-  return mySecondAxisLength;
-
+// =======================================================================
+// function : DrawDatumPart
+// purpose  :
+// =======================================================================
+bool Prs3d_DatumAspect::DrawDatumPart (Prs3d_DatumParts thePart) const
+{
+  switch (thePart)
+  {
+    case Prs3d_DP_Origin:  return true;
+    case Prs3d_DP_XAxis:   return (myAxes & Prs3d_DA_XAxis) != 0;
+    case Prs3d_DP_XArrow:  return (myAxes & Prs3d_DA_XAxis) != 0 && myToDrawArrows;
+    case Prs3d_DP_YAxis:   return (myAxes & Prs3d_DA_YAxis) != 0;
+    case Prs3d_DP_YArrow:  return (myAxes & Prs3d_DA_YAxis) != 0 && myToDrawArrows;
+    case Prs3d_DP_ZAxis:   return (myAxes & Prs3d_DA_ZAxis) != 0;
+    case Prs3d_DP_ZArrow:  return (myAxes & Prs3d_DA_ZAxis) != 0 && myToDrawArrows;
+    case Prs3d_DP_XOYAxis: return DrawDatumPart (Prs3d_DP_XAxis)
+                               && DrawDatumPart (Prs3d_DP_YAxis);
+    case Prs3d_DP_YOZAxis: return DrawDatumPart (Prs3d_DP_YAxis)
+                               && DrawDatumPart (Prs3d_DP_ZAxis);
+    case Prs3d_DP_XOZAxis: return DrawDatumPart (Prs3d_DP_XAxis)
+                               && DrawDatumPart (Prs3d_DP_ZAxis);
+    default: break;
+  }
+  return false;
 }
 
-Quantity_Length Prs3d_DatumAspect::ThirdAxisLength () const {
-
-  return myThirdAxisLength;
-
+// =======================================================================
+// function : AxisLength
+// purpose  :
+// =======================================================================
+Standard_Real Prs3d_DatumAspect::AxisLength (Prs3d_DatumParts thePart) const
+{
+  switch (thePart)
+  {
+    case Prs3d_DP_XAxis: return myAttributes.Find (Prs3d_DA_XAxisLength);
+    case Prs3d_DP_YAxis: return myAttributes.Find (Prs3d_DA_YAxisLength);
+    case Prs3d_DP_ZAxis: return myAttributes.Find (Prs3d_DA_ZAxisLength);
+    default: break;
+  }
+  return 0.0;
 }
 
-//=======================================================================
-//function : SetToDrawLabels
-//purpose  : 
-//=======================================================================
-void Prs3d_DatumAspect::SetToDrawLabels (const Standard_Boolean theToDraw)
+// =======================================================================
+// function : ArrowPartForAxis
+// purpose  :
+// =======================================================================
+Prs3d_DatumParts Prs3d_DatumAspect::ArrowPartForAxis (Prs3d_DatumParts thePart) const
 {
-  myToDrawLabels = theToDraw;
+  switch (thePart)
+  {
+    case Prs3d_DP_XAxis: return Prs3d_DP_XArrow;
+    case Prs3d_DP_YAxis: return Prs3d_DP_YArrow;
+    case Prs3d_DP_ZAxis: return Prs3d_DP_ZArrow;
+    default: break;
+  }
+  return Prs3d_DP_None;
 }
 
-//=======================================================================
-//function : ToDrawLabels
-//purpose  : 
-//=======================================================================
-Standard_Boolean Prs3d_DatumAspect::ToDrawLabels() const
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Prs3d_DatumAspect::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
 {
-  return myToDrawLabels;
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myTextAspect.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPointAspect.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myArrowAspect.get())
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAxes)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToDrawLabels)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToDrawArrows)
 }