You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.7 KiB

#ifndef __COORDSYS_H__
#define __COORDSYS_H__
#include "qwt3d_axis.h"
#include "qwt3d_colorlegend.h"
namespace Qwt3D
{
//! A coordinate system with different styles (BOX, FRAME)
class QWT3D_EXPORT CoordinateSystem : public Drawable
{
public:
explicit CoordinateSystem(Qwt3D::Triple blb = Qwt3D::Triple(0,0,0), Qwt3D::Triple ftr = Qwt3D::Triple(0,0,0), Qwt3D::COORDSTYLE = Qwt3D::BOX);
~CoordinateSystem();
void init(Qwt3D::Triple beg = Qwt3D::Triple(0,0,0), Qwt3D::Triple end = Qwt3D::Triple(0,0,0));
//! Set style for the coordinate system (NOCOORD, FRAME or BOX)
void setStyle(Qwt3D::COORDSTYLE s, Qwt3D::AXIS frame_1 = Qwt3D::X1,
Qwt3D::AXIS frame_2 = Qwt3D::Y1,
Qwt3D::AXIS frame_3 = Qwt3D::Z1);
Qwt3D::COORDSTYLE style() const { return style_;} //!< Return style oft the coordinate system
void setPosition(Qwt3D::Triple first, Qwt3D::Triple second); //!< first == front_left_bottom, second == back_right_top
void setAxesColor(Qwt3D::RGBA val); //!< Set common color for all axes
//! Set common font for all axis numberings
void setNumberFont(QString const& family, int pointSize, int weight = QFont::Normal, bool italic = false);
//! Set common font for all axis numberings
void setNumberFont(QFont const& font);
//! Set common color for all axis numberings
void setNumberColor(Qwt3D::RGBA val);
void setStandardScale(); //!< Sets an linear axis with real number items
void adjustNumbers(int val); //!< Fine tunes distance between axis numbering and axis body
void adjustLabels(int val); //!< Fine tunes distance between axis label and axis body
//! Sets color for the grid lines
void setGridLinesColor(Qwt3D::RGBA val) {gridlinecolor_ = val;}
//! Set common font for all axis labels
void setLabelFont(QString const& family, int pointSize, int weight = QFont::Normal, bool italic = false);
//! Set common font for all axis labels
void setLabelFont(QFont const& font);
//! Set common color for all axis labels
void setLabelColor(Qwt3D::RGBA val);
//! Set line width for tic marks and axes
void setLineWidth(double val, double majfac = 0.9, double minfac = 0.5);
//! Set length for tic marks
void setTicLength(double major, double minor);
//! Switch autoscaling of axes
void setAutoScale(bool val = true);
Qwt3D::Triple first() const { return first_;}
Qwt3D::Triple second() const { return second_;}
void setAutoDecoration(bool val = true) {autodecoration_ = val;}
bool autoDecoration() const { return autodecoration_;}
void setLineSmooth(bool val = true) {smooth_ = val;} //!< draw smooth axes
bool lineSmooth() const {return smooth_;} //!< smooth axes ?
void draw();
//! Defines whether a grid between the major and/or minor tics should be drawn
void setGridLines(bool majors, bool minors, int sides = Qwt3D::NOSIDEGRID);
int grids() const {return sides_;} //!< Returns grids switched on
//! The vector of all12 axes - use them to set axis properties individually.
std::vector<Axis> axes;
private:
void destroy();
Qwt3D::Triple first_, second_;
Qwt3D::COORDSTYLE style_;
Qwt3D::RGBA gridlinecolor_;
bool smooth_;
void chooseAxes();
void autoDecorateExposedAxis(Axis& ax, bool left);
void drawMajorGridLines(); //!< Draws a grid between the major tics on the site
void drawMinorGridLines(); //!< Draws a grid between the minor tics on the site
void drawMajorGridLines(Qwt3D::Axis&, Qwt3D::Axis&); //! Helper
void drawMinorGridLines(Qwt3D::Axis&, Qwt3D::Axis&); //! Helper
void recalculateAxesTics();
bool autodecoration_;
bool majorgridlines_, minorgridlines_;
int sides_;
};
} // ns
#endif