File indexing completed on 2025-01-18 10:04:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef OpenGl_GraduatedTrihedron_HeaderFile
0017 #define OpenGl_GraduatedTrihedron_HeaderFile
0018
0019 #include <Graphic3d_GraduatedTrihedron.hxx>
0020 #include <NCollection_Array1.hxx>
0021 #include <OpenGl_Aspects.hxx>
0022 #include <OpenGl_Element.hxx>
0023 #include <OpenGl_PrimitiveArray.hxx>
0024 #include <OpenGl_Text.hxx>
0025
0026
0027
0028
0029
0030
0031 class OpenGl_GraduatedTrihedron : public OpenGl_Element
0032 {
0033 public:
0034
0035 DEFINE_STANDARD_ALLOC
0036
0037 public:
0038
0039
0040 Standard_EXPORT OpenGl_GraduatedTrihedron();
0041
0042
0043 Standard_EXPORT virtual ~OpenGl_GraduatedTrihedron();
0044
0045
0046 Standard_EXPORT virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const Standard_OVERRIDE;
0047
0048
0049 Standard_EXPORT virtual void Release (OpenGl_Context* theCtx) Standard_OVERRIDE;
0050
0051
0052 Standard_EXPORT void SetValues (const Graphic3d_GraduatedTrihedron& theData);
0053
0054
0055
0056
0057 Standard_EXPORT void SetMinMax (const OpenGl_Vec3& theMin,
0058 const OpenGl_Vec3& theMax);
0059
0060
0061 Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
0062
0063 private:
0064
0065
0066 class Axis
0067 {
0068 public:
0069
0070 OpenGl_Vec3 Direction;
0071 Quantity_Color NameColor;
0072 OpenGl_Aspects LineAspect;
0073 mutable OpenGl_Text Label;
0074 mutable OpenGl_PrimitiveArray Tickmark;
0075 mutable OpenGl_PrimitiveArray Line;
0076 mutable OpenGl_PrimitiveArray Arrow;
0077
0078 public:
0079
0080 Axis (const Graphic3d_GraduatedTrihedron::AxisAspect& theAspect =
0081 Graphic3d_GraduatedTrihedron::AxisAspect(),
0082 const OpenGl_Vec3& theDirection = OpenGl_Vec3 (1.0f, 0.0f, 0.0f));
0083
0084 ~Axis();
0085
0086 Axis& operator= (const Axis& theOther);
0087
0088 void InitArrow (const Handle(OpenGl_Context)& theContext,
0089 const Standard_ShortReal theLength,
0090 const OpenGl_Vec3& theNormal) const;
0091
0092 void InitTickmark (const Handle(OpenGl_Context)& theContext,
0093 const OpenGl_Vec3& theDir) const;
0094
0095 void InitLine (const Handle(OpenGl_Context)& theContext,
0096 const OpenGl_Vec3& theDir) const;
0097
0098 void Release (OpenGl_Context* theCtx);
0099
0100 };
0101
0102 private:
0103
0104
0105
0106
0107 struct GridAxes
0108 {
0109 public:
0110 GridAxes()
0111 : Origin (0, 0, 0)
0112 {
0113 Axes[0] = OpenGl_Vec3 (1.0f, 0.0f, 0.0f);
0114 Axes[1] = OpenGl_Vec3 (0.0f, 1.0f, 0.0f);
0115 Axes[2] = OpenGl_Vec3 (0.0f, 0.0f, 1.0f);
0116
0117 Ticks[0] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
0118 Ticks[1] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
0119 Ticks[2] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
0120 }
0121
0122 public:
0123 OpenGl_Vec3 Origin;
0124 OpenGl_Vec3 Axes[3];
0125
0126 public:
0127 OpenGl_Vec3 Ticks[3];
0128 };
0129
0130 private:
0131
0132
0133
0134 void initGlResources (const Handle(OpenGl_Context)& theContext) const;
0135
0136
0137
0138
0139
0140 Standard_ShortReal getNormal (const Handle(OpenGl_Context)& theContext,
0141 OpenGl_Vec3& theNormal) const;
0142
0143
0144
0145
0146
0147
0148
0149 Standard_ShortReal getDistanceToCorner (const OpenGl_Vec3& theNormal,
0150 const OpenGl_Vec3& theCenter,
0151 const Standard_ShortReal theX,
0152 const Standard_ShortReal theY,
0153 const Standard_ShortReal theZ) const;
0154
0155
0156
0157
0158 Standard_ExtCharacter getGridAxes (const Standard_ShortReal theCorners[8],
0159 GridAxes& theGridAxes) const;
0160
0161
0162
0163
0164
0165
0166
0167
0168 void renderLine (const OpenGl_PrimitiveArray& theLine,
0169 const Handle(OpenGl_Workspace)& theWorkspace,
0170 const OpenGl_Mat4& theMat,
0171 const Standard_ShortReal theXt,
0172 const Standard_ShortReal theYt,
0173 const Standard_ShortReal theZt) const;
0174
0175
0176
0177
0178
0179
0180
0181 void renderGridPlane (const Handle(OpenGl_Workspace)& theWorkspace,
0182 const Standard_Integer& theIndex,
0183 const GridAxes& theGridAxes,
0184 OpenGl_Mat4& theMat) const;
0185
0186
0187
0188
0189
0190
0191
0192 void renderAxis (const Handle(OpenGl_Workspace)& theWorkspace,
0193 const Standard_Integer& theIndex,
0194 const OpenGl_Mat4& theMat) const;
0195
0196
0197
0198
0199
0200
0201
0202
0203 void renderTickmarkLabels (const Handle(OpenGl_Workspace)& theWorkspace,
0204 const OpenGl_Mat4& theMat,
0205 const Standard_Integer theIndex,
0206 const GridAxes& theGridAxes,
0207 const Standard_ShortReal theDpix) const;
0208
0209 protected:
0210
0211 OpenGl_Vec3 myMin;
0212 OpenGl_Vec3 myMax;
0213
0214 protected:
0215
0216 mutable Axis myAxes[3];
0217 mutable Graphic3d_GraduatedTrihedron myData;
0218 mutable OpenGl_Aspects myGridLineAspect;
0219
0220 protected:
0221
0222 mutable OpenGl_Text myLabelValues;
0223 mutable OpenGl_Aspects myAspectLabels;
0224 mutable OpenGl_Aspects myAspectValues;
0225
0226 private:
0227
0228 mutable Standard_Boolean myIsInitialized;
0229
0230 enum AxisFlags
0231 {
0232 XOO_XYO = 1 << 1,
0233 XOO_XOZ = 1 << 2,
0234 OYO_OYZ = 1 << 3,
0235 OYO_XYO = 1 << 4,
0236 OOZ_XOZ = 1 << 5,
0237 OOZ_OYZ = 1 << 6,
0238 OYZ_XYZ = 1 << 7,
0239 XOZ_XYZ = 1 << 8,
0240 XYO_XYZ = 1 << 9
0241 };
0242 };
0243
0244 #endif