1 #ifndef __AXIS_H__ 2 #define __AXIS_H__ 3 4 #include "qwt3d_autoptr.h" 5 #include "qwt3d_label.h" 6 #include "qwt3d_scale.h" 7 #include "qwt3d_autoscaler.h" 8 9 namespace Qwt3D 10 { 11 12 //! Autoscalable axis with caption. 13 /*! 14 Axes are highly customizable especially in terms 15 of labeling and scaling. 16 */ 17 class QWT3D_EXPORT Axis : public Drawable 18 { 19 20 public: 21 22 Axis(); //!< Constructs standard axis 23 Axis(Qwt3D::Triple beg, Qwt3D::Triple end); //!< Constructs a new axis with specified limits 24 virtual ~Axis(); // dtor 25 26 virtual void draw(); //!< Draws axis 27 28 void setPosition(const Qwt3D::Triple& beg, const Qwt3D::Triple& end); //!< Positionate axis position(Qwt3D::Triple & beg,Qwt3D::Triple & end)29 void position(Qwt3D::Triple& beg, Qwt3D::Triple& end) const {beg = beg_; end = end_;} //!< Returns axis' position begin()30 Qwt3D::Triple begin() const { return beg_; } //!< Returns axis' beginning position end()31 Qwt3D::Triple end() const { return end_; } //!< Returns axis' ending position length()32 double length() const { return (end_-beg_).length(); } //!< Returns axis' length 33 decorate()34 bool decorate() const { return decorate_; } //! whether or not labels/tics will be drawn (overrides individual flags) setDecorate(bool on)35 void setDecorate(bool on) { decorate_ = on; } //! toggle whether or not labels/tics will be drawn (overrides individual flags) 36 37 void setTicLength(double majorl, double minorl); //!< Sets tics lengths in world coordinates 38 //! Returns tics lengths ticLength(double & majorl,double & minorl)39 void ticLength(double& majorl, double& minorl) const {majorl = lmaj_; minorl = lmin_;} 40 void setTicOrientation(double tx, double ty, double tz); //!< Sets tic orientation 41 void setTicOrientation(const Qwt3D::Triple& val); //!< Same function as above ticOrientation()42 Qwt3D::Triple ticOrientation() const { return orientation_; } //!< Returns tic orientation setSymmetricTics(bool b)43 void setSymmetricTics( bool b) { symtics_ = b; } //!< Sets two-sided tics (default is false) 44 45 //! Sets font for axis label 46 void setLabelFont(QString const& family, int pointSize, int weight = QFont::Normal, bool italic = false); 47 void setLabelFont(QFont const& font); //!< Sets font for axis label labelFont()48 QFont const& labelFont() const { return labelfont_; } //!< Returns current label font 49 50 void setLabelString(QString const& name); //!< Sets label content labelString()51 const QString& labelString() const { return label_.string(); } //!< Gets label content 52 53 void setLabelPosition(const Qwt3D::Triple& pos, Qwt3D::ANCHOR); 54 void setLabelColor(Qwt3D::RGBA col); setLabel(bool d)55 void setLabel(bool d) { drawLabel_ = d; } //!< Turns label drawing on or off label()56 bool label() const { return drawLabel_; } //!< Whether label drawing is on or off adjustLabel(int val)57 void adjustLabel(int val) { labelgap_ = val; } //!< Shifts label in device coordinates dependent on anchor; 58 setScaling(bool d)59 void setScaling(bool d) { drawTics_ = d; } //!< Turns scale drawing on or off scaling()60 bool scaling() const { return drawTics_; } //!< Returns, if scale drawing is on or off 61 void setScale(Qwt3D::SCALETYPE); 62 void setScale(Scale* item); 63 setNumbers(bool d)64 void setNumbers(bool d) { drawNumbers_ = d; } //!< Turns number drawing on or off numbers()65 bool numbers() const { return drawNumbers_; } //!< Returns, if number drawing is on or off 66 void setNumberColor(Qwt3D::RGBA col); //!< Sets the color for axes numbers numberColor()67 Qwt3D::RGBA numberColor() const { return numbercolor_; } //!< Returns the color for axes numbers 68 //! Sets font for numbering 69 void setNumberFont(QString const& family, int pointSize, int weight = QFont::Normal, bool italic = false); 70 void setNumberFont(QFont const&); //!< Overloaded member, works like the above function numberFont()71 QFont const& numberFont() const { return numberfont_; } //!< Returns current numbering font setNumberAnchor(Qwt3D::ANCHOR a)72 void setNumberAnchor(Qwt3D::ANCHOR a) { scaleNumberAnchor_ = a; } //!< Sets anchor position for numbers adjustNumbers(int val)73 void adjustNumbers(int val) { numbergap_ = val; } //!< Shifts axis numbers in device coordinates dependent on anchor; 74 75 void setAutoScale(bool val = true) { autoscale_ = val; } //!< Turns Autoscaling on or off autoScale()76 bool autoScale() const { return autoscale_; } //!< actual Autoscaling mode 77 78 void setMajors(int val); //!< Requests major intervals (maybe changed, if autoscaling is present) 79 void setMinors(int val); //!< Requests minor intervals majors()80 int majors() const { return majorintervals_; } //!< Returns number of major intervals minors()81 int minors() const { return minorintervals_; } //!< Returns number of minor intervals majorPositions()82 Qwt3D::TripleField const& majorPositions() const {return majorpos_; } //!< Returns positions for actual major tics (also if invisible) minorPositions()83 Qwt3D::TripleField const& minorPositions() const {return minorpos_; } //!< Returns positions for actual minor tics (also if invisible) 84 85 //! Sets line width for axis components 86 void setLineWidth(double val, double majfac = 0.9, double minfac = 0.5); lineWidth()87 double lineWidth() const { return lineWidth_; } //!< Returns line width for axis body majLineWidth()88 double majLineWidth() const { return majLineWidth_; } //!< Returns Line width for major tics minLineWidth()89 double minLineWidth() const { return minLineWidth_; } //!< Returns Line width for minor tics 90 setLimits(double start,double stop)91 void setLimits(double start, double stop) {start_=start; stop_=stop;} //!< Sets interval limits(double & start,double & stop)92 void limits(double& start, double& stop) const {start = start_; stop = stop_;} //!< Returns axis interval 93 void recalculateTics(); //!< Enforces recalculation of ticmark positions 94 numericPrecision()95 int numericPrecision(){return scale_->numericPrecision();};//!< Returns numeric precision for tick labels numericFormat()96 Qwt3D::Scale::NumericFormat numericFormat(){return scale_->numericFormat();};//!< Returns numeric format for tick labels setNumericFormat(const Qwt3D::Scale::NumericFormat & fmt,int prec)97 void setNumericFormat(const Qwt3D::Scale::NumericFormat& fmt, int prec){scale_->setNumericFormat(fmt, prec);}; 98 99 private: 100 101 void init(); 102 void drawBase(); 103 void drawTics(); 104 void drawTicLabel(Qwt3D::Triple Pos, int mtic); 105 Qwt3D::Triple drawTic(Qwt3D::Triple nadir, double length); 106 void drawLabel(); 107 bool prepTicCalculation(Triple& startpoint); 108 109 Qwt3D::ANCHOR scaleNumberAnchor_; 110 Qwt3D::Label label_; 111 std::vector<Qwt3D::Label> markerLabel_; 112 113 Qwt3D::Triple beg_, end_; 114 Qwt3D::TripleField majorpos_, minorpos_; //! vectors, holding major resp. minor tic positions; 115 116 Qwt3D::Triple ncube_beg_, ncube_end_; //!< enclosing parallelepiped for axis numbering 117 118 double start_, stop_, autostart_, autostop_; 119 double lmaj_, lmin_; 120 Qwt3D::Triple orientation_; 121 122 int majorintervals_, minorintervals_; 123 124 double lineWidth_, majLineWidth_, minLineWidth_; 125 bool symtics_; 126 bool drawNumbers_, drawTics_, drawLabel_; 127 bool autoscale_; 128 QFont numberfont_, labelfont_; 129 Qwt3D::RGBA numbercolor_; 130 131 int numbergap_, labelgap_; 132 133 Qwt3D::qwt3d_ptr<Qwt3D::Scale> scale_; 134 135 bool decorate_; 136 }; 137 138 } // ns 139 140 #endif 141