/*
* surf - visualizing algebraic curves and algebraic surfaces
* Copyright (C) 1996-1997 Friedrich-Alexander-Universitaet
* Erlangen-Nuernberg
* 1997-2000 Johannes Gutenberg-Universitaet Mainz
* Authors: Stephan Endrass, Hans Huelf, Ruediger Oertel,
* Kai Schneider, Ralf Schmitt, Johannes Beigel
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef CLIP_H
#define CLIP_H
#include "WindowGeometry.h"
#include "gui_config.h"
class Position;
class Vector;
// class Mywindow;
// ----------------------------------------------------------------------------
// --------------- base for all clip classes ----------------------------------
// ----------------------------------------------------------------------------
class Clip
{
protected:
int ClipModus;
double Front;
double Back;
double Radius;
double Center[3];
double RadQuad;
double WinMin[2];
double WinMax[2];
public:
Clip( const int _ClipModus, const clip_numeric_t & _ClipData,
const double win_min_0, const double win_max_0,
const double win_min_1, const double win_max_1);
static Clip* create (const int, const int, const clip_numeric_t &,
const WindowGeometry &wingeo, const double, Position*,
int xmin, int xmax, int ymin, int ymax);
// replacement for operator new
virtual int ClipXY( int, double, double&, double& ) = 0;
virtual int ClipXYZ( double, double, double&, double& ) = 0;
// pure virtual functions
};
// ----------------------------------------------------------------------------
// --------------- base for central clip classes ------------------------------
// ----------------------------------------------------------------------------
class ClipCentral : public Clip
{
protected:
double SpectatorZ;
double ZDistance;
double ZDistSquare;
double CenterSquare[3];
double SpecZSquare;
public:
ClipCentral(const int, const clip_numeric_t &, const double, const double,
const double, const double, const double);
virtual int ClipXY( int, double, double&, double& ) = 0;
virtual int ClipXYZ( double ux, double uy, double &min, double &max ) = 0;
};
// ----------------------------------------------------------------------------
// --------------- clipping on sphere -- parallel projection ------------------
// ----------------------------------------------------------------------------
class ClipSphere : public Clip
{
public:
ClipSphere( const clip_numeric_t &, const double, const double, const double,
const double);
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double ux, double uy, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on horizontal cylinder -- parallel projection -----
// ----------------------------------------------------------------------------
class ClipCylH : public Clip
{
public:
ClipCylH( const clip_numeric_t &, const double, const double, const double,
const double);
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double uy, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on vertical cylinder -- parallel projection -------
// ----------------------------------------------------------------------------
class ClipCylV : public Clip
{
public:
ClipCylV( const clip_numeric_t &, const double, const double, const double,
const double);
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double ux, double, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on cylinder z direction-- parallel projection -----
// ----------------------------------------------------------------------------
class ClipCylZ : public Clip
{
public:
ClipCylZ( const clip_numeric_t &, const double, const double, const double,
const double);
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double ux, double uy, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on cube -- parallel projection --------------------
// --------------- cube is rotated with the surface ---------------------------
// ----------------------------------------------------------------------------
class ClipCube : public Clip
{
double Length[6];
Vector *CubeVec;
public:
ClipCube( const clip_numeric_t &, const double, const double, const double,
const double, Position*);
virtual ~ClipCube();
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double ux, double uy, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on view only -- parallel projection ---------------
// ----------------------------------------------------------------------------
class ClipNone : public Clip
{
public:
ClipNone( const clip_numeric_t &, const double, const double, const double,
const double);
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on spere -- central projection --------------------
// ----------------------------------------------------------------------------
class ClipSphereCentral : public ClipCentral
{
double *A;
double *B;
double *a;
double *Disc;
public:
ClipSphereCentral( const clip_numeric_t &, const double, const double, const double,
const double, const double );
virtual ~ClipSphereCentral();
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double, double&, double& );
};
// ----------------------------------------------------------------------------
// --------------- clipping on horizontal cylinder -- central projection ------
// ----------------------------------------------------------------------------
class ClipCylHCentral : public ClipCentral
{
double *A;
double *B;
double *a;
double *Disc;
public:
ClipCylHCentral( const clip_numeric_t &, const double, const double, const double,
const double, const double );
virtual ~ClipCylHCentral();
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double, double&, double& );
};
// ----------------------------------------------------------------------------
// --------------- clipping on vertical cylinder -- central projection --------
// ----------------------------------------------------------------------------
class ClipCylVCentral : public ClipCentral
{
double *A;
double *B;
double *a;
double *Disc;
public:
ClipCylVCentral( const clip_numeric_t &, const double, const double, const double,
const double, const double );
virtual ~ClipCylVCentral();
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double, double&, double& );
};
// ----------------------------------------------------------------------------
// --------------- clipping on cylinder in z direction -- central projection --
// ----------------------------------------------------------------------------
class ClipCylZCentral : public ClipCentral
{
public:
ClipCylZCentral( const clip_numeric_t &, const double, const double, const double,
const double, const double );
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double, double, double &min, double &max );
};
// ----------------------------------------------------------------------------
// --------------- clipping on cube -- central projection ---------------------
// --------------- cube is rotated with the surface ---------------------------
// ----------------------------------------------------------------------------
class ClipCubeCentral : public ClipCentral {
double Length[6];
Vector *CubeVec;
public:
ClipCubeCentral( const clip_numeric_t &, const double, const double, const double,
const double, const double, Position* );
virtual ~ClipCubeCentral();
virtual int ClipXY( int, double, double&, double& );
virtual int ClipXYZ( double ux, double uy, double &min, double &max );
};
#endif // CLIP_H
syntax highlighted by Code2HTML, v. 0.9.1