From af9983f08feeb36cf224065085cf9e19e0fbf58c Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 9 Nov 2000 17:06:45 +0000 Subject: Implementation of light classes git-svn-id: http://svn.leocad.org/trunk@153 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/light.h | 115 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 35 deletions(-) (limited to 'common/light.h') diff --git a/common/light.h b/common/light.h index e110799..f40118d 100644 --- a/common/light.h +++ b/common/light.h @@ -1,18 +1,29 @@ #ifndef _LIGHT_H_ #define _LIGHT_H_ +#include "opengl.h" #include "object.h" -#define LC_LIGHT_HIDDEN 0x01 -#define LC_LIGHT_SELECTED 0x02 -#define LC_LIGHT_FOCUSED 0x04 +#define LC_LIGHT_HIDDEN 0x01 +#define LC_LIGHT_SELECTED 0x02 +#define LC_LIGHT_FOCUSED 0x04 #define LC_LIGHT_TARGET_SELECTED 0x08 #define LC_LIGHT_TARGET_FOCUSED 0x10 -#define LC_LIGHT_ENABLED 0x20 +#define LC_LIGHT_ENABLED 0x20 class Light; class LightTarget; +typedef enum { LK_POSITION, LK_TARGET, LK_COLOR } LK_TYPES; + +typedef struct LC_LIGHT_KEY +{ + unsigned short time; + float param[3]; + unsigned char type; + LC_LIGHT_KEY* next; +} LC_LIGHT_KEY; + class LightTarget : public Object { public: @@ -34,40 +45,74 @@ class LightTarget : public Object class Light : public Object { -public: - Light(); - ~Light(); - - Light* m_pNext; - - bool IsVisible() - { return (m_nState & LC_LIGHT_HIDDEN) == 0; } - bool IsSelected() - { return (m_nState & (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED)) != 0; } - void Select() - { m_nState |= (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED); } - void UnSelect() - { m_nState &= ~(LC_LIGHT_SELECTED|LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_SELECTED|LC_LIGHT_TARGET_FOCUSED); } - void UnFocus() - { m_nState &= ~(LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_FOCUSED); } - void FocusEye() - { m_nState |= (LC_LIGHT_FOCUSED|LC_LIGHT_SELECTED); } - void FocusTarget() - { m_nState |= (LC_LIGHT_TARGET_FOCUSED|LC_LIGHT_TARGET_SELECTED); } - const char* GetName() - { return m_strName; } - - void MinIntersectDist(LC_CLICKLINE* Line); - void UpdatePosition(unsigned short nTime, bool bAnimation); + public: + Light (float px, float py, float pz); + Light (float px, float py, float pz, float tx, float ty, float tz); + virtual ~Light (); -protected: - void RemoveKeys(); - // BoundingBox m_BoundingBox; - // BoundingBox m_TargetBoundingBox; - unsigned char m_nState; - char m_strName[81]; + + + public: + Light* m_pNext; + + bool IsVisible() + { return (m_nState & LC_LIGHT_HIDDEN) == 0; } + bool IsSelected() + { return (m_nState & (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED)) != 0; } + bool IsEyeSelected() + { return (m_nState & LC_LIGHT_SELECTED) != 0; } + bool IsTargetSelected() + { return (m_nState & LC_LIGHT_TARGET_SELECTED) != 0; } + void Select() + { m_nState |= (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED); } + void UnSelect() + { m_nState &= ~(LC_LIGHT_SELECTED|LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_SELECTED|LC_LIGHT_TARGET_FOCUSED); } + void UnFocus() + { m_nState &= ~(LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_FOCUSED); } + void FocusEye() + { m_nState |= (LC_LIGHT_FOCUSED|LC_LIGHT_SELECTED); } + void FocusTarget() + { m_nState |= (LC_LIGHT_TARGET_FOCUSED|LC_LIGHT_TARGET_SELECTED); } + const char* GetName() + { return m_strName; } + void GetTargetPos (float *pos) const + { memcpy (pos, m_fTarget, sizeof (float[3])); } + + void Render (float fLineWidth); + void MinIntersectDist (LC_CLICKLINE* Line); + void UpdatePosition (unsigned short nTime, bool bAnimation); + void CalculatePosition (unsigned short nTime, bool bAnimation, float pos[3], float target[3], float color[3]); + void Move (unsigned short nTime, bool bAnimation, bool bAddKey, float dx, float dy, float dz); + void ChangeKey (unsigned short nTime, bool bAnimation, bool bAddKey, float param[3], unsigned char nKeyType); + void Setup (int index); + +protected: + void RemoveKeys (); + void Initialize (); + + // Camera target + LightTarget* m_pTarget; + + // Position + LC_LIGHT_KEY* m_pAnimationKeys; + LC_LIGHT_KEY* m_pInstructionKeys; + + // Attributes + float m_fCone; + unsigned char m_nState; + char m_strName[81]; + bool m_bEnabled; + + GLuint m_nList; + static GLuint m_nSphereList; + static GLuint m_nTargetList; + + // Temporary position + float m_fPos[4]; + float m_fTarget[4]; + float m_fColor[4]; }; #endif // _LIGHT_H_ -- cgit v1.2.3