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

xygra.h

Go to the documentation of this file.
00001 //* Módulo   : xygra.h                                                            
00002 // _Desc_    : Declara classe XYGraph. 
00003 // _Autores_ : Carlos Henrique Levy e Jaudênia Cavalcante.                       
00004 // _Data_    : 26 fev 96.                                                           
00005 
00006 #ifndef __XYGRAPH_H
00007 #define __XYGRAPH_H
00008 
00009 #ifndef NOIUP
00010 #include <iup.h>
00011 #endif
00012 #include <cd.h>
00013 #include <cdiup.h>
00014 #include <cdimage.h>
00015 #include <wd.h>
00016 #include "xysl.h"
00017 #include "xyar.h"
00018 #include "xyleg.h"
00019 
00020 class XYObject;
00021 
00022 //* XYGraph 
00023 //    Classe abstrata que manipula de forma única um conjunto de eixos,      
00024 // (XYAxis), marcadores (XYMarker), regiões (XYSlice), decoracoes (XYObject),
00025 // curvas (XYMask),      
00026 // legenda (XYLegend) e títulos (XYText) numa área de um canvas do CD.       
00027 // O layout básico de um gráfico é os títulos, um embaixo do outro começando 
00028 // pelo topo da área gerenciada pelo gráfico, a legenda e os eixos limitando 
00029 // uma região (mask area) onde curvas, marcadores e regiões são desenhados.  
00030 class XYGraph : public XYObject
00031 {
00032    public:
00033 
00034  //* Construtores e Destrutor
00035 #ifndef NOIUP
00036    //* Construtor da classe XYGraph que recebe canvas IUP
00037    XYGraph (
00038         Ihandle* canvas,  // indica o canvas IUP onde o canvas CD será
00039                           // mapeado
00040         // as coordenadas a seguir são normalizadas em relação ao canvas do CD
00041         XYCoordinate x,   // referência para a coordenada x
00042         XYCoordinate y,   // referência para a coordenada y
00043         double width,     // largura da região ocupada pelo gráfico
00044         double height,    // altura da região ocupada pelo gráfico
00045         xybool visible = xytrue);  // visibilidade
00046 #endif
00047 
00048    //* Construtor da classe XYGraph que recebe canvas CD
00049    XYGraph (
00050         cdCanvas* cdcanvas, // define o canvas CD onde o gráfico será
00051                             // desenhado
00052         // as coordenadas a seguir são normalizadas em relação ao canvas do CD
00053         XYCoordinate x,     // referência para a coordenada x
00054         XYCoordinate y,     // referência para a coordenada y
00055         double width,       // largura da região ocupada pelo gráfico
00056         double height,      // altura da região ocupada pelo gráfico
00057         xybool visible = xytrue);  // visibilidade
00058 
00059    //* Destrutor da classe XYGraph
00060    virtual ~XYGraph (void);
00061 
00062  //* Define/Consulta atributos
00063    //* Define a posição do objeto
00064    virtual void position (double x, double y);
00065    virtual void position (int xp, int yp);
00066    //* Consulta a posição do objeto
00067    virtual void position (double* x, double* y) const;
00068    virtual void position (int* xp, int* yp) const;
00069    virtual XYCoordinate* position (void);
00070 
00071    //* Define canvas CD onde o gráfico será desenhado
00072    virtual void setCdCanvas (cdCanvas* c);
00073    //* Consulta canvas CD onde o gráfico será desenhado
00074    virtual cdCanvas* getCdCanvas (void) const;
00075 
00076    //* Define canvas para imagem e retorna canvas anterior
00077    virtual cdCanvas* canvasImage (cdCanvas*);
00078    //* Consulta canvas da imagem
00079    virtual cdCanvas* canvasImage (void);
00080 
00081    //* Define imagem com largura e altura dados
00082    virtual void createImage (int w, int h);
00083 
00084    //* Insere um texto na lista de títulos
00085    virtual void insert (XYText* text);
00086    //* Insere um eixo na lista de eixos
00087    virtual void insert (XYAxis* axis);
00088    //* Insere uma máscara na lista de máscaras
00089    virtual void insert (XYMask* mask);
00090    //* Insere um marcador na lista de marcadores
00091    virtual void insert (XYMarker* marker);
00092    //* Insere um "slice" na lista de regiões
00093    virtual void insert (XYSlice* slice);
00094    //* Insere uma area na lista de areas
00095    virtual void insert (XYArea* area);
00096    //* Insere um "decorator" na lista de decorações
00097    virtual void insert (XYObject* object);
00098 
00099    //* Remove um texto da lista de títulos
00100    virtual void remove (XYText* text);
00101    //* Remove um eixo da lista de eixos
00102    virtual void remove (XYAxis* axis);
00103    //* Remove uma máscara da lista de máscaras
00104    virtual void remove (XYMask* mask);
00105    //* Remove um marcador da lista de marcadores
00106    virtual void remove (XYMarker* marker);
00107    //* Remove um "slice" na lista de regiões
00108    virtual void remove (XYSlice* slice);
00109    //* Remove um "decorator" na lista de decorações
00110    virtual void remove (XYArea* area);
00111    //* Remove um "decorator" na lista de decorações
00112    virtual void remove (XYObject* object);
00113 
00114    //* Consulta lista de títulos
00115    virtual XYList<XYText>& text (void);
00116    //* Consulta lista de eixos
00117    virtual XYList<XYAxis>& axis (void);
00118    //* Consulta lista de máscaras
00119    virtual XYList<XYMask>& mask (void);
00120    //* Consulta lista de marcadores
00121    virtual XYList<XYMarker>& marker (void);
00122    //* Consulta lista de "slices"
00123    virtual XYList<XYSlice>& slice (void);
00124    //* Consulta lista de "decoradores"
00125    virtual XYList<XYObject>& decorator (void);
00126    //* Consulta lista de "areas"
00127    virtual XYList<XYArea>& area (void);
00128 
00129    //* Retorna máscara da lista que está na posição indicada
00130    virtual XYMask& mask(unsigned m);
00131 
00132    //* Define a legenda do gráfico
00133    virtual void legend (XYLegend* leg);
00134    //* Consulta a legenda do gráfico
00135    virtual XYLegend* legend (void) const;
00136 
00137    //* Cria um marcador como novo elemento pertencente ao gráfico
00138    virtual XYObject* markerCreate(int x0, int y0, const XYAxis* master) = 0;
00139 
00140    //* Define cor de fundo para o gráfico
00141    virtual void backgroundColor(long color);
00142    //* Consulta cor de fundo para o gráfico
00143    virtual long backgroundColor(void) const;
00144 
00145    //* Define largura da região ocupada pelo gráfico
00146    virtual void width (double w);
00147    //* Consulta largura da região ocupada pelo gráfico
00148    virtual double width (void) const;
00149 
00150    //* Define altura da região ocupada pelo gráfico
00151    virtual void height (double h);
00152    //* Consulta altura da região ocupada pelo gráfico
00153    virtual double height (void) const;
00154 
00155    //* Define se distorce a área gráfica ou não
00156    virtual void distortion (xybool d);
00157    //* Consulta se distorce a área gráfica ou não
00158    virtual xybool distortion (void) const;
00159                                                         
00160    //* Define se existe "doublebuferring" ou não, retorna status anterior
00161    virtual xybool doubleBuffering (xybool on);
00162    //* Consulta se existe "doublebuferring" ou não
00163    virtual xybool doubleBuffering (void) const;
00164 
00165  //* Mask Area
00166    //* Define cor da região de desenho das máscaras
00167    virtual void maskAreaColor(long color);
00168    //* Consulta cor da região de desenho das máscaras
00169    virtual long maskAreaColor(void) const;
00170 
00171    //* Define região para desenho das máscaras com coordenadas normalizadas em relação a área do gráfico
00172    virtual void setMaskArea (double xmin, double ymin, double xmax,
00173                              double ymax);
00174    //* Consulta região de desenho das máscaras
00175    virtual void getMaskArea (double& xmn, double& ymn, double& xmx,
00176                              double& ymx) const;
00177    virtual void getMaskArea (int& xmn, int& ymn, int& xmx, int& ymx) const;
00178 
00179    //* Calcula região para desenho das máscaras
00180    virtual void calcMaskArea (void) = 0;
00181 
00182  //* Métodos de Pick
00183    //* Retorna "xytrue" se o gráfico passivo contém o objeto especificado
00184    virtual xybool contains(const XYObject* obj);
00185 
00186    //* Verifica se o ponto (x, y) está sobre um elemento do gráfico
00187    virtual XYObject* pick (int x, int y);
00188 
00189    //* Verifica se o ponto (x, y) está sobre um títulos
00190    virtual XYText* pickText (int x, int y);
00191    //* Verifica se o ponto (x, y) está sobre um eixo
00192    virtual XYAxis* pickAxis (int x, int y);
00193    //* Verifica se o ponto (x, y) está sobre uma máscara
00194    virtual XYMask* pickMask (int x, int y);
00195    //* Verifica se o ponto (x, y) está sobre um marcador
00196    virtual XYMarker* pickMarker (int x, int y);
00197    //* Verifica se o ponto (x, y) está sobre um "slice"
00198    virtual XYSlice* pickSlice (int x, int y);
00199    //* Verifica se o ponto (x, y) está sobre um "area"
00200    virtual XYArea* pickArea (int x, int y);
00201    //* Verifica se o ponto (x, y) está sobre a legenda
00202    virtual XYLegend* pickLegend (int x, int y);
00203 
00204    //* Retorna lista de elementos do gráfico que estão totalmente dentro da região de "fence"
00205    virtual XYList<XYObject>* fence (int x0, int y0, int x1, int y1);
00206 
00207  //* Métodos de Draw
00208    //* Imprime
00209    virtual void print (void);
00210  
00211    //* Se houver "doublebuffering" troca buffer
00212    virtual void flush (void) const;
00213 
00214    //* Move o conteúdo da região de desenho das máscaras: direção positiva será esquerda/baixo
00215    virtual void scroll (int dx, int dy);
00216  
00217    //* Limpa    região ocupada pelo gráfico
00218    virtual void clear (void);
00219    //* Limpa uma região
00220    virtual void clear (int xmin, int ymin, int xmax, int ymax) const;
00221    //* Limpa a região do gráfico        onde as máscaras são desenhadas
00222    virtual void maskAreaClear (void) const;
00223 
00224    //* Desenha
00225    virtual void draw (void);
00226    //* Desenha numa região
00227    virtual void draw (int xmin, int ymin, int xmax, int ymax) const;
00228 
00229    //* Desenha a "mask area"
00230    virtual void drawMaskArea (void) const = 0;
00231    virtual void drawMaskArea (int xmin, int ymin, int xmax, int ymax) const;
00232 
00233    //* Verifica existência de canvas: ativa se ele já existe e cria-o, caso não exista, antes de ativá-lo tambem define a viewport, chamando o metodo defineViewport
00234    virtual int activateCanvas (void) const;
00235 
00236  //* BoundingBox
00237    //* Retorna menor retângulo que contém o gráfico, suas coordenadas são dadas em pixel
00238    virtual void boundingBox (int& /*bxmin*/, int& /*bymin*/, int& /*bxmax*/,
00239                              int& /*bymax*/) const {};
00240 
00241    protected:
00242 
00243    // define, em pixel, a região de desenho dos elementos componentes do
00244    // gráfico
00245    virtual void propagateViewport (void) const;
00246 
00247    // calcula e define a viewport da area do grafico
00248    virtual void defineViewport (void);
00249 
00250 #ifndef NOIUP
00251    Ihandle*  _canvas;         // define o canvas do IUP
00252 #else
00253    void*     _canvas;         // define o canvas do IUP
00254 #endif
00255    cdCanvas* _cdcanvas;       // define o canvas do CD
00256    cdCanvas* _cvimage;        // canvas para imagem
00257    void*     _image;            // imagem criada a partir do canvas ativo
00258    int       _image_w;        // largura da imagem
00259    int       _image_h;        // altura da imagem
00260    XYList<XYText>   _titles;  // lista de títulos
00261    XYList<XYAxis>   _axes;    // lista de eixos
00262    XYList<XYMask>   _masks;   // lista de máscaras
00263    XYList<XYMarker> _markers; // lista de marcadores
00264    XYList<XYSlice>  _slices;  // lista de "slices"
00265    XYList<XYArea>   _areas;  // lista de "areas"
00266    XYList<XYObject> _decorators;  // lista de "decoradores"
00267    XYLegend* _legend;         // ponteiro para a legenda
00268    long   _color;             // cor de fundo do gráfico
00269    long   _ma_color;          // cor da região de desenho das máscaras
00270    double _width;             // largura da região ocupada pelo gráfico
00271    double _height;            // altura da região ocupada pelo gráfico
00272    double _ma_xmin, _ma_xmax, // região de desenho das máscaras,
00273           _ma_ymin, _ma_ymax; // (normalizada).
00274    xybool   _distortion;        // distorção do gráfico
00275    xybool   _doublebuffering;   // determina se existe "doublebuffering"
00276 
00277    private:
00278 
00279    xybool   _dont_destroy_cdcanvas;   // determina que cdcanvas nao deve ser destruido
00280    XYList<XYSlice> _aux_slices;   // lista auxiliar de "slices"
00281 };
00282 
00283 #endif
00284 

XY
Tecgraf / PUC-Rio - Computer Graphics Technology Group