00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _PO_ANGULAR_AXIS_
00025 #define _PO_ANGULAR_AXIS_
00026
00027 #include <MeshViz/graph/PoAxis.h>
00028
00029 #include <Inventor/fields/SoSFEnum.h>
00030 #include <Inventor/fields/SoSFFloat.h>
00031
00032 #define PATH_HOR PATH_RIGHT
00033 #define PATH_RADIAL PATH_LEFT
00034 #define PATH_TANGENT PATH_UP
00035
00036 #define GRAD_INSIDE GRAD_ABOVE
00037 #define GRAD_OUTSIDE GRAD_BELOW
00038
00054 class PoAngularAxis : public PoAxis {
00055
00056 SO_KIT_HEADER(PoAngularAxis) ;
00057
00058
00059 public:
00060
00068 enum GradFit {
00072 GRAD_FIT,
00076 GRAD_UNFIT
00077 } ;
00078
00079
00080
00081
00082
00087 SoSFFloat offset ;
00088
00092 SoSFFloat startAngle ;
00093
00097 SoSFFloat endAngle ;
00098
00102 SoSFFloat radius ;
00103
00109 SoSFFloat angleStep ;
00110
00115 SoSFEnum gradFit ;
00116
00117
00118
00119
00120
00124 PoAngularAxis() ;
00125
00129 PoAngularAxis(float _offset, float _startAngle, float _endAngle, float _radius,
00130 float _angleStep)
00131 { init(_offset, _startAngle, _endAngle, _radius, _angleStep) ; }
00132
00136 virtual void rebuild() ;
00137
00142 float getAngleStep() const ;
00143
00144
00145
00146
00147 private:
00148 static void initClass() ;
00149 static void exitClass() ;
00150
00151 private:
00152 struct AngularAxisAttr {
00153 float angleStep ;
00154 float startAngle ;
00155 } ;
00156
00157
00158
00159
00160 ~PoAngularAxis() ;
00161 virtual SbBool setUpConnections(SbBool onOff, SbBool doItAlways = FALSE) ;
00162 virtual void setDefaultOnNonWritingFields() ;
00163
00164
00165 virtual void saveAxisAttr() ;
00166
00167 private:
00168
00169 virtual void computeGradLimit(float sAngle, float eAngle,
00170 float &smAngle, float &emAngle) ;
00171
00172
00173 virtual void computeAngularTickLen(size_t numGrad, float theta,
00174 float &mainTickLen, float &secdTickLen) ;
00175
00176
00177 virtual void setDefaultAttr(Plane plane = XY) ;
00178
00179
00180 virtual void buildArrow(float radius, float angle, SoGroup *group) ;
00181
00182
00183 void buildTitle(float start_angle, float theta, SoGroup *group) ;
00184
00185
00186 virtual void buildTick(const std::vector<float>& gradAngleList,
00187 float tickLen, SoGroup *group) ;
00188
00189
00190 virtual void buildGridLines(const std::vector<float>& gradAngleList,
00191 SoGroup *group) ;
00192
00193
00194 void computeGradStep(float _radius, float theta, float &step) ;
00195
00196
00197 void computeGradListStr(float theta_m, float start_angle_m, float s_angle_m,
00198 float angle_step, size_t &num_grad, std::vector<float>& grad_angle_list,
00199 char **grad_str) ;
00200
00201
00202
00203 virtual void buildGrads(const std::vector<float>& gradAngleList,
00204 const char **gradStr, SoGroup *group) ;
00205
00206
00207 void drawAngularText(PiText *text, TextPath path, GradPosition pos,
00208 float rad, float angle, const SbString& str) ;
00209
00210
00211 void init(float offset, float startAngle, float endAngle, float radius,
00212 float angleStep) ;
00213
00214
00215 AngularAxisAttr angularAxisAttr ;
00216
00217
00218 FieldSensorList fieldSensorList ;
00219
00220
00221 SoFieldList fieldList ;
00222
00223 } ;
00224
00225
00226
00227 #endif
00228
00229