summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmlight.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmlight.h')
-rw-r--r--kpovmodeler/pmlight.h372
1 files changed, 372 insertions, 0 deletions
diff --git a/kpovmodeler/pmlight.h b/kpovmodeler/pmlight.h
new file mode 100644
index 00000000..df40ec0a
--- /dev/null
+++ b/kpovmodeler/pmlight.h
@@ -0,0 +1,372 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+**************************************************************************
+
+**************************************************************************
+* *
+* 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 PMLIGHT_H
+#define PMLIGHT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmnamedobject.h"
+#include "pmvector.h"
+#include "pmcolor.h"
+
+class PMViewStructure;
+
+/**
+ * Class for povray light sources.
+ */
+
+class PMLight : public PMNamedObject
+{
+ typedef PMNamedObject Base;
+public:
+ enum PMLightType { PointLight=0, SpotLight=1, CylinderLight=2, ShadowlessLight=3 };
+ enum PMAreaType { Rectangular=0, Circular=1 };
+ /**
+ * Creates an empty PMLight
+ */
+ PMLight( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMLight( const PMLight& l );
+ /**
+ * deletes the PMLight
+ */
+ virtual ~PMLight( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMLight( *this ); }
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+
+ /**
+ * Returns a new @ref PMLightEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmlight" ); }
+
+ /**
+ * Returns the type
+ */
+ PMLightType lightType( ) const { return m_type; }
+ /**
+ * Sets the type
+ */
+ void setLightType( PMLightType t );
+
+ /**
+ * Returns the location
+ */
+ PMVector location( ) const { return m_location; }
+ /**
+ * Sets the location
+ */
+ void setLocation( const PMVector& p );
+
+ /**
+ * Returns the color
+ */
+ PMColor color( ) const { return m_color; }
+ /**
+ * Sets the color
+ */
+ void setColor( const PMColor& c );
+
+ /**
+ * Returns the radius for cylinder and spot lights
+ */
+ double radius( ) const { return m_radius; }
+ /**
+ * Sets the radius for cylinder and spot lights
+ */
+ void setRadius( double r );
+
+ /**
+ * Returns the falloff for cylinder and spot lights
+ */
+ double falloff( ) const { return m_falloff; }
+ /**
+ * Sets the falloff for cylinder and spot lights
+ */
+ void setFalloff( double f );
+
+ /**
+ * Returns the tightness for cylinder and spot lights
+ */
+ double tightness( ) const { return m_tightness; }
+ /**
+ * Sets the tightness for cylinder and spot lights
+ */
+ void setTightness( double r );
+
+ /**
+ * Returns the pointAt point for cylinder and spot lights
+ */
+ PMVector pointAt( ) const { return m_pointAt; }
+ /**
+ * Sets the pointAt for cylinder and spot lights
+ */
+ void setPointAt( const PMVector& p );
+
+ /**
+ * Return true if the light is a parallel light
+ */
+ bool parallel( ) const { return m_parallel; }
+ /**
+ * Sets the parallel light flag
+ */
+ void setParallel( bool p );
+
+ /**
+ * Returns true if the light is a area light
+ */
+ bool isAreaLight( ) const { return m_bAreaLight; }
+ /**
+ * Sets the area light flag
+ */
+ void setAreaLight( bool yes );
+
+ /**
+ * Returns the area light type
+ */
+ PMAreaType areaType( ) const { return m_areaType; }
+ /**
+ * Sets the area light type
+ */
+ void setAreaType( PMAreaType at );
+
+ /**
+ * Returns the axis1 for area lights
+ */
+ PMVector axis1( ) const { return m_areaAxis1; }
+ /**
+ * Sets the axis1 for area lights
+ */
+ void setAxis1( const PMVector& v );
+
+ /**
+ * Returns the axis2 for area lights
+ */
+ PMVector axis2( ) const { return m_areaAxis2; }
+ /**
+ * Sets the axis2 for area lights
+ */
+ void setAxis2( const PMVector& v );
+
+ /**
+ * Returns the size1 for area lights
+ */
+ int size1( ) const { return m_areaSize1; }
+ /**
+ * Sets the size1 for area lights
+ */
+ void setSize1( int s );
+
+ /**
+ * Returns the size2 for area lights
+ */
+ int size2( ) const { return m_areaSize2; }
+ /**
+ * Sets the size2 for area lights
+ */
+ void setSize2( int s );
+
+ /**
+ * Returns the adaptive parameter for area lights
+ */
+ int adaptive( ) const { return m_adaptive; }
+ /**
+ * Sets the adaptive parameter for area lights
+ */
+ void setAdaptive( int s );
+
+ /**
+ * Returns if the area light is orientated
+ */
+ bool orient( ) const { return m_orient; }
+ /**
+ * Sets the orient flag
+ */
+ void setOrient( bool o );
+
+ /**
+ * Returns the jitter parameter for area lights
+ */
+ bool jitter( ) const { return m_jitter; }
+ /**
+ * Sets the jitter parameter for area lights
+ */
+ void setJitter( bool j );
+
+ /**
+ * Returns true if light fading is enabled
+ */
+ bool fading( ) const { return m_bFading; }
+ /**
+ * Enables/Disables light fading
+ */
+ void setFading( bool yes );
+
+ /**
+ * Returns the fading distance
+ */
+ double fadeDistance( ) const { return m_fadeDistance; }
+ /**
+ * Sets the fading distance
+ */
+ void setFadeDistance( double d );
+
+ /**
+ * Returns the fading power
+ */
+ int fadePower( ) const { return m_fadePower; }
+ /**
+ * Sets the fading power
+ */
+ void setFadePower( int p );
+
+ /**
+ * Returns the media interaction flag
+ */
+ bool mediaInteraction( ) const { return m_bMediaInteraction; }
+ /**
+ * Sets the media interaction flag
+ */
+ void setMediaInteraction( bool yes );
+
+ /**
+ * Returns the media attenuation flag
+ */
+ bool mediaAttenuation( ) const { return m_bMediaAttenuation; }
+ /**
+ * Sets the media attenuation flag
+ */
+ void setMediaAttenuation( bool yes );
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+ /** */
+ virtual void controlPoints( PMControlPointList& list );
+ /** */
+ virtual void controlPointsChanged( PMControlPointList& list );
+ /** */
+ virtual void cleanUp( ) const;
+
+protected:
+ /** */
+ virtual bool isDefault( ) { return false; }
+ /** */
+ virtual void createViewStructure( );
+ /** */
+ virtual PMViewStructure* defaultViewStructure( ) const { return 0; }
+
+private:
+ /**
+ * Creates and returns the default view structure for point lights
+ */
+ PMViewStructure* defaultPointStructure( ) const;
+ /**
+ * Creates and returns the default view structure for spot lights
+ */
+ PMViewStructure* defaultSpotStructure( ) const;
+ /**
+ * Creates and returns the default view structure for cylindrical lights
+ */
+ PMViewStructure* defaultCylindricalStructure( ) const;
+
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMLightMementoID
+ { PMLocationID, PMColorID, PMRadiusID, PMFalloffID, PMTightnessID,
+ PMPointAtID, PMParallelID, PMAreaLightID, PMAreaTypeID, PMAreaAxis1ID,
+ PMAreaAxis2ID, PMAreaSize1ID, PMAreaSize2ID, PMAdaptiveID, PMOrientID,
+ PMJitterID, PMTypeID, PMFadingID, PMFadeDistanceID, PMFadePowerID,
+ PMInteractionID, PMAttenuationID };
+
+ PMLightType m_type;
+ PMVector m_location;
+ PMColor m_color;
+ double m_radius;
+ double m_falloff;
+ double m_tightness;
+ PMVector m_pointAt;
+ bool m_parallel;
+ bool m_bAreaLight;
+ PMAreaType m_areaType;
+ PMVector m_areaAxis1, m_areaAxis2;
+ int m_areaSize1, m_areaSize2;
+ int m_adaptive;
+ bool m_orient;
+ bool m_jitter;
+ bool m_bFading;
+ double m_fadeDistance;
+ int m_fadePower;
+ bool m_bMediaInteraction;
+ bool m_bMediaAttenuation;
+
+ /**
+ * The default view structure for point lights
+ */
+ static PMViewStructure* s_pDefaultPointStructure;
+ /**
+ * The default view structure for spot lights
+ */
+ static PMViewStructure* s_pDefaultSpotStructure;
+ /**
+ * The default view structure for cylindrical lights
+ */
+ static PMViewStructure* s_pDefaultCylindricalStructure;
+
+ /**
+ * The size of the point light for 3d views
+ */
+ static double s_pointLightSize;
+ /**
+ * Number of lines around the cylinder
+ */
+ static int s_nCylinderLines;
+ /**
+ * Number of lines around the spot
+ */
+ static int s_nSpotLines;
+ /**
+ * Length of the spot and cylinder
+ */
+ static double s_length;
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif