0030949: Foundation Classes - Dump improvement for OCCT classes
[occt.git] / src / Prs3d / Prs3d_DatumAspect.cxx
1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #include <Prs3d_DatumAspect.hxx>
16
17 #include <Standard_Dump.hxx>
18
19 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_DatumAspect, Prs3d_BasicAspect)
20
21 // =======================================================================
22 // function : Prs3d_DatumAspect
23 // purpose  :
24 // =======================================================================
25 Prs3d_DatumAspect::Prs3d_DatumAspect()
26 : myAxes (Prs3d_DA_XYZAxis),
27   myToDrawLabels (Standard_True),
28   myToDrawArrows (Standard_True)
29 {
30   Standard_Real aDefaultLength = 100.0; // default axis length, the same as in context
31   Quantity_Color aDefaultColor(Quantity_NOC_LIGHTSTEELBLUE4); // default axis color
32
33   myAttributes.Bind (Prs3d_DA_XAxisLength, aDefaultLength);
34   myAttributes.Bind (Prs3d_DA_YAxisLength, aDefaultLength);
35   myAttributes.Bind (Prs3d_DA_ZAxisLength, aDefaultLength);
36   myAttributes.Bind (Prs3d_DP_ShadingTubeRadiusPercent,   0.02);
37   myAttributes.Bind (Prs3d_DP_ShadingConeRadiusPercent,   0.04);
38   myAttributes.Bind (Prs3d_DP_ShadingConeLengthPercent,   0.1);
39   myAttributes.Bind (Prs3d_DP_ShadingOriginRadiusPercent, 0.015);
40   myAttributes.Bind (Prs3d_DP_ShadingNumberOfFacettes,    12.0);
41
42   Aspect_TypeOfLine aLineType = Aspect_TOL_SOLID;
43   Standard_Real aWidth = 1.0;
44   for (int aPartIter = Prs3d_DP_Origin; aPartIter <= Prs3d_DP_XOZAxis; ++aPartIter)
45   {
46     const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter;
47     if (aPart != Prs3d_DP_Origin) // origin point is used only in shading mode
48     {
49       myLineAspects.Bind (aPart, new Prs3d_LineAspect (aDefaultColor, aLineType, aWidth));
50     }
51
52     Handle(Prs3d_ShadingAspect) aShadingAspect = new Prs3d_ShadingAspect();
53     aShadingAspect->SetColor (aDefaultColor);
54     myShadedAspects.Bind (aPart, aShadingAspect);
55   }
56   myTextAspect  = new Prs3d_TextAspect();
57   myPointAspect = new Prs3d_PointAspect (Aspect_TOM_EMPTY, aDefaultColor, 1.0);
58   myArrowAspect = new Prs3d_ArrowAspect();
59 }
60
61 // =======================================================================
62 // function : LineAspect
63 // purpose  :
64 // =======================================================================
65 Handle(Prs3d_LineAspect) Prs3d_DatumAspect::LineAspect (Prs3d_DatumParts thePart) const
66 {
67   Handle(Prs3d_LineAspect) aLineAspect;
68   myLineAspects.Find (thePart, aLineAspect);
69   return aLineAspect;
70 }
71
72 // =======================================================================
73 // function : ShadingAspect
74 // purpose  :
75 // =======================================================================
76 Handle(Prs3d_ShadingAspect) Prs3d_DatumAspect::ShadingAspect (Prs3d_DatumParts thePart) const
77 {
78   Handle(Prs3d_ShadingAspect) aShadingAspect;
79   myShadedAspects.Find (thePart, aShadingAspect);
80   return aShadingAspect;
81 }
82
83 // =======================================================================
84 // function : SetDrawFirstAndSecondAxis
85 // purpose  :
86 // =======================================================================
87 void Prs3d_DatumAspect::SetDrawFirstAndSecondAxis (Standard_Boolean theToDraw)
88 {
89   if (theToDraw)
90   {
91     myAxes = ((myAxes & Prs3d_DA_ZAxis) != 0 ? Prs3d_DA_XYZAxis : Prs3d_DA_XYAxis);
92   }
93   else
94   {
95     myAxes = Prs3d_DA_ZAxis;
96   }
97 }
98
99 // =======================================================================
100 // function : SetDrawThirdAxis
101 // purpose  :
102 // =======================================================================
103 void Prs3d_DatumAspect::SetDrawThirdAxis (Standard_Boolean theToDraw)
104 {
105   if (theToDraw)
106   {
107     myAxes = ((myAxes & Prs3d_DA_XYAxis) != 0 ? Prs3d_DA_XYZAxis : Prs3d_DA_ZAxis);
108   }
109   else
110   {
111     myAxes = Prs3d_DA_XYAxis;
112   }
113 }
114
115 // =======================================================================
116 // function : DrawDatumPart
117 // purpose  :
118 // =======================================================================
119 bool Prs3d_DatumAspect::DrawDatumPart (Prs3d_DatumParts thePart) const
120 {
121   switch (thePart)
122   {
123     case Prs3d_DP_Origin:  return true;
124     case Prs3d_DP_XAxis:   return (myAxes & Prs3d_DA_XAxis) != 0;
125     case Prs3d_DP_XArrow:  return (myAxes & Prs3d_DA_XAxis) != 0 && myToDrawArrows;
126     case Prs3d_DP_YAxis:   return (myAxes & Prs3d_DA_YAxis) != 0;
127     case Prs3d_DP_YArrow:  return (myAxes & Prs3d_DA_YAxis) != 0 && myToDrawArrows;
128     case Prs3d_DP_ZAxis:   return (myAxes & Prs3d_DA_ZAxis) != 0;
129     case Prs3d_DP_ZArrow:  return (myAxes & Prs3d_DA_ZAxis) != 0 && myToDrawArrows;
130     case Prs3d_DP_XOYAxis: return DrawDatumPart (Prs3d_DP_XAxis)
131                                && DrawDatumPart (Prs3d_DP_YAxis);
132     case Prs3d_DP_YOZAxis: return DrawDatumPart (Prs3d_DP_YAxis)
133                                && DrawDatumPart (Prs3d_DP_ZAxis);
134     case Prs3d_DP_XOZAxis: return DrawDatumPart (Prs3d_DP_XAxis)
135                                && DrawDatumPart (Prs3d_DP_ZAxis);
136     default: break;
137   }
138   return false;
139 }
140
141 // =======================================================================
142 // function : AxisLength
143 // purpose  :
144 // =======================================================================
145 Standard_Real Prs3d_DatumAspect::AxisLength (Prs3d_DatumParts thePart) const
146 {
147   switch (thePart)
148   {
149     case Prs3d_DP_XAxis: return myAttributes.Find (Prs3d_DA_XAxisLength);
150     case Prs3d_DP_YAxis: return myAttributes.Find (Prs3d_DA_YAxisLength);
151     case Prs3d_DP_ZAxis: return myAttributes.Find (Prs3d_DA_ZAxisLength);
152     default: break;
153   }
154   return 0.0;
155 }
156
157 // =======================================================================
158 // function : ArrowPartForAxis
159 // purpose  :
160 // =======================================================================
161 Prs3d_DatumParts Prs3d_DatumAspect::ArrowPartForAxis (Prs3d_DatumParts thePart) const
162 {
163   switch (thePart)
164   {
165     case Prs3d_DP_XAxis: return Prs3d_DP_XArrow;
166     case Prs3d_DP_YAxis: return Prs3d_DP_YArrow;
167     case Prs3d_DP_ZAxis: return Prs3d_DP_ZArrow;
168     default: break;
169   }
170   return Prs3d_DP_None;
171 }
172
173 // =======================================================================
174 // function : DumpJson
175 // purpose  :
176 // =======================================================================
177 void Prs3d_DatumAspect::DumpJson (Standard_OStream& theOStream, const Standard_Integer theDepth) const
178 {
179   DUMP_CLASS_BEGIN (theOStream, Prs3d_DatumAspect);
180
181   DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myTextAspect.get());
182   DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPointAspect.get());
183   DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myArrowAspect.get());
184
185   DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAxes);
186   DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToDrawLabels);
187   DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToDrawArrows);
188 }
189