Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

xyax.h

Go to the documentation of this file.
00001 //* Módulo   : xyax.h                                                           
00002 // _Desc_    : Declara classe XYAxis.
00003 // _Autores_ : Carlos Henrique Levy e Jaudênia Cavalcante.                       
00004 // _Data_    : 27 fev 96.                                                        
00005 
00006 #ifndef __XYAXIS_H
00007 #define __XYAXIS_H
00008 
00009 #include "xyobj.h"
00010 #include "xytext.h"
00011 #include "xymath.h"
00012 
00013 class XYScaleDecorator;
00014 class XYGraph;
00015 
00016 //* XYAxis                                                                
00017 //    Classe abstrata que define as características de um eixo. Um eixo   
00018 // representa a escala de um tipo de coordenada. A sua representação visual é  
00019 // composta de uma linha reta podendo ter ou não terminador (seta), textos   
00020 // próximo a reta indicando a escala e por último um título para o eixo.     
00021 class XYAxis : public XYObject
00022 {
00023    public:
00024 
00025  //* Construtores e Destrutor
00026    //* Construtor A
00027    XYAxis (
00028         double mn,      // valor mínimo que o eixo representa (assume)
00029         double mx,      // valor máximo que o eixo representa (assume)
00030         XYCoordinate x, // referência para a coordenada x
00031         XYCoordinate y, // referência para a coordenada y
00032         long color,     // cor do eixo
00033         double size,    // tamanho normalizado do eixo
00034         double rot,     // ângulo, em graus, no sentido anti-horário
00035         double step,    // passo normalizado dos ticks da escala
00036         XYScaleDecorator* decor, // decorador da escala
00037         XYText* title,           // texto a ser desenhado com o eixo
00038         xybool arrow = xytrue,       // seta terminadora (xytrue or xyfalse)
00039         xybool visible = xytrue);    // visibilidade
00040 
00041    //* Construtor B
00042    XYAxis (
00043         double mn,      // valor mínimo que o eixo representa (assume)
00044         double mx,      // valor máximo que o eixo representa (assume)
00045         XYCoordinate x, // referência para a coordenada x
00046         XYCoordinate y, // referência para a coordenada y
00047         long color,     // cor do eixo
00048         double size,    // tamanho normalizado do eixo
00049         double rot,     // ângulo, em graus, no sentido anti-horário
00050         xybool arrow = xytrue,    // seta terminadora (xytrue or xyfalse)
00051         xybool visible = xytrue); // visibilidade
00052       
00053    //* Construtor C
00054    XYAxis (
00055         double mn,      // valor mínimo que o eixo representa (assume)
00056         double mx,      // valor máximo que o eixo representa (assume)
00057         XYCoordinate x, // referência para a coordenada x
00058         XYCoordinate y, // referência para a coordenada y
00059         long color,     // cor do eixo
00060         double size,    // tamanho normalizado do eixo
00061         double rot,     // ângulo, em graus, no sentido anti-horário
00062         double step,    // passo normalizado dos ticks da escala
00063         xybool arrow = xytrue,    // seta terminadora (xytrue or xyfalse)
00064         xybool visible = xytrue); // visibilidade
00065       
00066    //* Destrutor da classe XYAxis
00067    virtual ~XYAxis (void) {};
00068 
00069  //* Mínimos/Máximos
00070    //* Calcula valores melhores para mínimos, máximos e passos dos eixos
00071    virtual void calcMinMax (double *min, double* max, double* step) const;
00072 
00073 #ifdef min
00074 #undef min
00075 #endif
00076    //* Define valor mínimo que o eixo representa (assume)
00077    virtual void   min (double m);
00078    //* Consulta valor mínimo que o eixo representa (assume)
00079    virtual double min (void) const;
00080 
00081 #ifdef max
00082 #undef max
00083 #endif
00084    //* Define valor máximo que o eixo representa (assume)
00085    virtual void   max (double m);
00086    //* Consulta valor máximo que o eixo representa (assume)
00087    virtual double max (void) const;
00088 
00089    //* Método que calcula o valor mínimo do eixo quando um determinado valor  sobre ele, anteriormente numa determinada posição, é deslocado para a nova posição (x0, y0)
00090    virtual double defineMinPoint(double value, int x0, int y0) const;
00091 
00092    //* Método que calcula o valor máximo do eixo quando um determinado valor sobre ele, anteriormente numa determinada posição, é deslocado para a nova posição (x0, y0)
00093    virtual double defineMaxPoint(double value, int x0, int y0) const;
00094 
00095  //* Define/Consulta atributos
00096    //* Define a cor do eixo
00097    virtual void color (long c);
00098    //* Consulta a cor do eixo
00099    virtual long color (void) const;
00100 
00101    //* Define a posição de desenho do tick: xytrue (default) tick é desenhado a esquerda do eixo; xyfalse tick é desenhado a direita
00102    virtual void leftTick (xybool left);
00103    //* Retorna xytrue se tick é desenhado a esquerda do eixo, xyfalse a direita
00104    virtual xybool leftTick (void) const;
00105 
00106    //* Define o tamanho do eixo entre [0.0, 1.0], onde 1.0 significa tamanho da área de visualização
00107    virtual void size (double sz);
00108    //* Consulta o tamanho do eixo entre [0.0, 1.0], onde 1.0 significa tamanho da área de visualização
00109    virtual double size (void) const;
00110 
00111    //* Define a rotação do eixo
00112    virtual void rotation (double rot);
00113    //* Consulta a rotação do eixo
00114    virtual double rotation (void) const;
00115 
00116    //* Define o valor normalizado do passo dos ticks da escala
00117    virtual void step (double s);
00118    //* Consulta o valor normalizado do passo dos ticks da escala
00119    virtual double step (void) const;
00120 
00121    //* Define a posição de referência para o desenho dos ticks
00122    virtual void referenceTick (double f);
00123    //* Consulta a posição de referência para o desenho dos ticks
00124    virtual double referenceTick (void) const;
00125 
00126    //* Consulta a primeira posição para desenho dos ticks da escala entre os valores mínimo e máximo que o eixo representa é o primeiro tick após o valor mínimo do eixo
00127    virtual double first (void) const;
00128 
00129    //* Define o decorador da escala
00130    virtual void scaleDecorator(XYScaleDecorator* decor);
00131    //* Consulta o decorador da escala
00132    virtual XYScaleDecorator* scaleDecorator(void) const;
00133 
00134    //* Define presença de seta terminadora
00135    virtual void arrow (xybool a);
00136    //* Consulta presença de seta terminadora
00137    virtual xybool arrow (void) const;
00138 
00139    //* Define título de um eixo
00140    virtual void title (XYText* t);
00141    //* Consulta título de um eixo
00142    virtual XYText* title (void) const;
00143 
00144    //* Ajusta tamanho do eixo para evitar erros na aplicação da função scroll, através do aumento ou redução no valor desse atributo de modo a permitir o casamento dos ticks sobre o eixo qualquer que seja o deslocamento definido pelo usuário para essa função 
00145    virtual void adjustSize (void);
00146 
00147    //* Retorna a coordenada do primeiro tick do eixo
00148    virtual void firstTick (double& tx1, double& ty1, double& tx2, double& ty2) const;
00149 
00150    //* Acao realizado quando da insercao de uma mascara no grafico
00151    virtual void insertAction (XYGraph* /* graph */ ) {};
00152 
00153    //* Acao realizado quando da romcao de uma mascara no grafico
00154    virtual void removeAction (XYGraph* /* graph */ ) {};
00155 
00156    //* Métodos de Pick
00157    //* Retorna xytrue se o ponto estiver sobre o eixo
00158    virtual xybool pick (int px, int py);
00159 
00160    //* Retorna xytrue se o eixo estiver interior a região de "fence"
00161    virtual xybool fence (int x0, int y0, int x1, int y1);
00162 
00163  //* Axis Arrow
00164    //* Desenha seta do eixo
00165    virtual void drawArrow (double x0, double y0, double x1, double y1) const;
00166 
00167    //* Retorna menor retângulo que contém a seta do eixo
00168    virtual void boxArrow(double x0, double y0, double x1, double y1, double&
00169                                 xmin, double& ymin, double& xmax, double& ymax) const;
00170 
00171  //* Transformações   
00172    //* Transforma coordenada de acordo com o tipo do eixo envolvido
00173    virtual double transform (double e) const;
00174 
00175    //* Método que retorna o valor sobre o eixo no ponto dado
00176    virtual double valueInPoint(int x0, int y0) const;
00177    //* Método que retorna o valor sobre o eixo no ponto dado
00178    virtual double valueInPoint(double x0, double y0) const;
00179    //* Método que retorna o ponto sobre o eixo no valor dado
00180    virtual void pointInValue(double , int& , int&) const {};
00181    //* Método que retorna o ponto sobre o eixo no valor dado
00182    virtual void pointInValue(double, double&, double&) const {};
00183 
00184    protected:
00185 
00186    static const double _arrow_size; // tamanho da seta terminadora
00187    double  _mn, _mx;         // valores que o eixo representa (assume)
00188    long    _color;           // cor do eixo
00189    double  _size;            // tamanho do eixo, em coordenadas normalizadas
00190    double  _rot;             // ângulo do eixo, em graus, sentido anti-horário
00191    double  _step;            // passo dos ticks em coordendas normalizadas
00192    double  _referenceTick;   // posição de referência para desenho dos ticks
00193    XYScaleDecorator* _decor; // define o decorador da escala
00194    XYText* _title;           // texto a ser desenhado com o eixo
00195    xybool    _arrow;           // indica se a seta deve ser desenhada
00196    xybool    _leftTick;        // indica se o tick e'desenhado a esq. (xytrue) ou a dir. (xyfalse) do eixo
00197 
00198 };              
00199 
00200 #endif
00201 

XY
Tecgraf / PUC-Rio - Computer Graphics Technology Group