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.
150 lines
3.4 KiB
150 lines
3.4 KiB
/***************************************************************************
|
|
qssurface.h
|
|
-------------------
|
|
begin : 01-January-2000
|
|
|
|
copyright : (C) 2000 by Kamil Dobkowski
|
|
email : kamildobk@poczta.onet.pl
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef __QSSURFACE_H
|
|
#define __QSSURFACE_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include"qsplot.h"
|
|
#include"qsaxes.h"
|
|
|
|
|
|
|
|
/**
|
|
* \brief Dataset: Draws 3d carpet plots
|
|
*
|
|
* Data format is described in QSSurface::Channels . See also QSAxes::plotAdd() .
|
|
*/
|
|
class QSSurface : public QSPlot3D
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY( int xGridStep READ xGridStep WRITE setXGridStep )
|
|
Q_PROPERTY( int yGridStep READ yGridStep WRITE setYGridStep )
|
|
|
|
public:
|
|
/**
|
|
* Descriptive names of data channels. See QSData::setMatrix().
|
|
* XVector ( optional ) contains x coordinates of a grid, YVector ( optional ) contains y coordinates of a grid.
|
|
* cols(XVector) == cols(ZData) and rows(YVector) == rows(ZData), both vectors must be monotone.
|
|
*/
|
|
enum Channels {
|
|
XVector=0,
|
|
YVector=1,
|
|
ZData = 2,
|
|
VData =3 };
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
QSSurface(QSAxes* parent, const char * name=0);
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~QSSurface();
|
|
void setXGridStep( int step );
|
|
void setYGridStep( int step );
|
|
int xGridStep() const { return m_x_grid_step; }
|
|
int yGridStep() const { return m_y_grid_step; }
|
|
virtual QString posInfo( QSPt2f& pos );
|
|
virtual QSPt2f legendItemSize( QSDrv *drv );
|
|
virtual void drawLegendItem( const QSPt2f& pos, QSDrv *drv );
|
|
virtual void loadStateFromStream( QDataStream& stream, QSObjectFactory *factory );
|
|
virtual void saveStateToStream( QDataStream& stream, QSObjectFactory *factory );
|
|
virtual ColumnType columnType( int channel, int column ) const;
|
|
virtual QString channelVariable( int channel ) const;
|
|
|
|
protected:
|
|
virtual void dataChanged( int channel = -1 );
|
|
virtual void allocRuntimeData();
|
|
virtual void freeRuntimeData();
|
|
virtual bool getAxisRange( QSAxis *axis, double& min, double& max );
|
|
virtual bool start();
|
|
virtual bool step();
|
|
virtual void end();
|
|
|
|
private:
|
|
struct surface_runtime_data;
|
|
struct surface_runtime_data *d;
|
|
bool m_minmax_z_valid;
|
|
bool m_minmax_v_valid;
|
|
double m_max_z;
|
|
double m_min_z;
|
|
double m_min_v;
|
|
double m_max_v;
|
|
int m_x_grid_step;
|
|
int m_y_grid_step;
|
|
|
|
void init_loops();
|
|
void prepare_quarter();
|
|
void draw_polygon( const QSPt3f pts[], QSPt3f *norm, const double *values=NULL, const bool *edges=NULL );
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|