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.
tdegraphics/kpovmodeler/pmcamera.h

293 lines
7.0 KiB

//-*-C++-*-
/*
**************************************************************************
description
--------------------
copyright : (C) 2000-2001 by Andreas Zehender
email : zehender@kde.org
**************************************************************************
**************************************************************************
* *
* 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 PMCAMERA_H
#define PMCAMERA_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "pmnamedobject.h"
#include "pmvector.h"
class PMViewStructure;
/**
* Class for povray cameras
*/
class PMCamera : public PMNamedObject
{
typedef PMNamedObject Base;
public:
/**
* Type of the camera
*/
enum CameraType { Perspective, Orthographic, FishEye, UltraWideAngle,
Omnimax, Panoramic, Cylinder };
/**
* Creates a default povray camera
*/
PMCamera( PMPart* part );
/**
* Copy constructor
*/
PMCamera( const PMCamera& c );
/**
* deletes the camera
*/
virtual ~PMCamera( );
/** */
virtual PMObject* copy( ) const { return new PMCamera( *this ); }
/** */
virtual TQString description( ) const;
/** */
virtual PMMetaObject* metaObject( ) const;
/** */
virtual void serialize( TQDomElement& e, TQDomDocument& doc ) const;
/** */
virtual void readAttributes( const PMXMLHelper& h );
/**
* Returns a new @ref PMCameraEdit
*/
virtual PMDialogEditBase* editWidget( TQWidget* parent ) const;
/** */
virtual TQString pixmap( ) const { return TQString( "pmcamera" ); }
/**
* Returns the location
*/
PMVector location( ) const { return m_location; }
/**
* Sets the location
*/
void setLocation( const PMVector& p );
/**
* Returns the look_at point
*/
PMVector lookAt( ) const { return m_lookAt; }
/**
* Sets the look_at point
*/
void setLookAt( const PMVector& p );
/**
* Returns the up vector
*/
PMVector up( ) const { return m_up; }
/**
* Sets the up vector
*/
void setUp( const PMVector& v );
/**
* Returns the right vector
*/
PMVector right( ) const { return m_right; }
/**
* Sets the right vector
*/
void setRight( const PMVector& v );
/**
* Returns the direction vector
*/
PMVector direction( ) const { return m_direction; }
/**
* Sets the direction vector
*/
void setDirection( const PMVector& v );
/**
* Returns the sky vector
*/
PMVector sky( ) const { return m_sky; }
/**
* Sets the sky vector
*/
void setSky( const PMVector& v );
/**
* Returns the aspect ratio
*/
double aspect( ) const;
/**
* Returns true if angle is enabled
*/
bool isAngleEnabled( ) const { return m_angleEnabled; }
/**
* Enables/Disables the use of angle
*/
void enableAngle( bool yes );
/**
* Returns the angle
*/
double angle( ) const { return m_angle; }
/**
* Sets the angle
*/
void setAngle( double a );
/**
* Returns the camera type
*/
CameraType cameraType( ) const { return m_cameraType; }
/**
* Sets the camera type
*/
void setCameraType( CameraType t );
/**
* Returns the cylinder type
*/
int cylinderType( ) const { return m_cylinderType; }
/**
* Sets the cylinder type. Valid values are 1-4
*/
void setCylinderType( int t );
/**
* Returns true if focal blur is enabled
*/
bool isFocalBlurEnabled( ) const { return m_focalBlurEnabled; }
/**
* Enables/Disables the focal blur
*/
void enableFocalBlur( bool yes );
/**
* Returns the aperture
*/
double aperture( ) const { return m_aperture; }
/**
* Sets the aperture. Has to be greater or equal 0
*/
void setAperture( double d );
/**
* Returns the number of blur samples
*/
int blurSamples( ) const { return m_blurSamples; }
/**
* Sets the number of blur samples
*/
void setBlurSamples( int s );
/**
* Returns the focal point
*/
PMVector focalPoint( ) const { return m_focalPoint; }
/**
* Sets the focal point
*/
void setFocalPoint( const PMVector& v );
/**
* Returns the confidence
*/
double confidence( ) const { return m_confidence;}
/**
* Sets the confidence
*/
void setConfidence( double c );
/**
* Returns the variance
*/
double variance( ) const { return m_variance; }
/**
* Sets the variance
*/
void setVariance( double v );
/**
* Returns the export flag
*/
virtual bool exportPovray( ) const { return m_export; }
/**
* Sets the export flag
*/
void setExportPovray( bool ex );
/** */
virtual void restoreMemento( PMMemento* s );
/** */
virtual void controlPoints( PMControlPointList& list );
/** */
virtual void controlPointsChanged( PMControlPointList& list );
/**
* Calculates the new right, up and direction vector with the
* look_at vector.
*/
void calculateLookAtAngle( PMVector& right, PMVector& up, PMVector& direction );
/**
* Converts the camera type to a string
*/
static TQString cameraTypeToString( CameraType t );
/**
* Converts a string to the camera type
*/
static CameraType stringToCameraType( const TQString& s );
/** */
virtual void cleanUp( ) const;
protected:
/** */
virtual bool isDefault( ) { return false; }
/** */
virtual void createViewStructure( );
/** */
virtual PMViewStructure* defaultViewStructure( ) const;
private:
/**
* IDs for @ref PMMementoData
*/
enum PMCameraMementoID { PMLocationID, PMLookAtID, PMDirectionID,
PMUpID, PMRightID, PMAngleID, PMSkyID,
PMCameraTypeID, PMCylinderTypeID,
PMFocalBlurID, PMBlurSamplesID, PMFocalPointID,
PMConfidenceID, PMVarianceID, PMApertureID,
PMAngleEnabledID, PMExportID };
PMVector m_location, m_lookAt, m_up, m_right, m_direction, m_sky;
bool m_angleEnabled;
double m_angle;
CameraType m_cameraType;
int m_cylinderType;
bool m_focalBlurEnabled;
double m_aperture;
int m_blurSamples;
PMVector m_focalPoint;
double m_confidence, m_variance;
bool m_export;
/**
* The default view structure. It can be shared between cameras
*/
static PMViewStructure* s_pDefaultViewStructure;
static PMMetaObject* s_pMetaObject;
};
#endif