00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifndef _OSGDIRECTIONALLIGHTBASE_H_
00055 #define _OSGDIRECTIONALLIGHTBASE_H_
00056 #ifdef __sgi
00057 #pragma once
00058 #endif
00059
00060
00061 #include <OSGConfig.h>
00062 #include <OSGSystemDef.h>
00063
00064 #include <OSGBaseTypes.h>
00065 #include <OSGRefPtr.h>
00066 #include <OSGCoredNodePtr.h>
00067
00068 #include <OSGLight.h>
00069
00070 #include <OSGVec3fFields.h>
00071
00072 #include <OSGDirectionalLightFields.h>
00073
00074 OSG_BEGIN_NAMESPACE
00075
00076 class DirectionalLight;
00077 class BinaryDataHandler;
00078
00080
00081 class OSG_SYSTEMLIB_DLLMAPPING DirectionalLightBase : public Light
00082 {
00083 private:
00084
00085 typedef Light Inherited;
00086
00087
00088 public:
00089
00090 typedef DirectionalLightPtr Ptr;
00091
00092 enum
00093 {
00094 DirectionFieldId = Inherited::NextFieldId,
00095 NextFieldId = DirectionFieldId + 1
00096 };
00097
00098 static const OSG::BitVector DirectionFieldMask;
00099
00100
00101 static const OSG::BitVector MTInfluenceMask;
00102
00103
00107 static FieldContainerType &getClassType (void);
00108 static UInt32 getClassTypeId (void);
00109
00111
00115 virtual FieldContainerType &getType (void);
00116 virtual const FieldContainerType &getType (void) const;
00117
00118 virtual UInt32 getContainerSize(void) const;
00119
00121
00125 SFVec3f *getSFDirection (void);
00126
00127 Vec3f &getDirection (void);
00128 const Vec3f &getDirection (void) const;
00129
00131
00135 void setDirection ( const Vec3f &value );
00136
00138
00143
00147 virtual UInt32 getBinSize (const BitVector &whichField);
00148 virtual void copyToBin ( BinaryDataHandler &pMem,
00149 const BitVector &whichField);
00150 virtual void copyFromBin( BinaryDataHandler &pMem,
00151 const BitVector &whichField);
00152
00153
00155
00159 static DirectionalLightPtr create (void);
00160 static DirectionalLightPtr createEmpty (void);
00161
00164
00168 virtual FieldContainerPtr shallowCopy (void) const;
00169
00171
00172 protected:
00173
00174
00178 SFVec3f _sfDirection;
00179
00181
00185 DirectionalLightBase(void);
00186 DirectionalLightBase(const DirectionalLightBase &source);
00187
00189
00193 virtual ~DirectionalLightBase(void);
00194
00196
00200 #if !defined(OSG_FIXED_MFIELDSYNC)
00201 void executeSyncImpl( DirectionalLightBase *pOther,
00202 const BitVector &whichField);
00203
00204 virtual void executeSync( FieldContainer &other,
00205 const BitVector &whichField);
00206 #else
00207 void executeSyncImpl( DirectionalLightBase *pOther,
00208 const BitVector &whichField,
00209 const SyncInfo &sInfo );
00210
00211 virtual void executeSync( FieldContainer &other,
00212 const BitVector &whichField,
00213 const SyncInfo &sInfo);
00214
00215 virtual void execBeginEdit (const BitVector &whichField,
00216 UInt32 uiAspect,
00217 UInt32 uiContainerSize);
00218
00219 void execBeginEditImpl (const BitVector &whichField,
00220 UInt32 uiAspect,
00221 UInt32 uiContainerSize);
00222
00223 virtual void onDestroyAspect(UInt32 uiId, UInt32 uiAspect);
00224 #endif
00225
00227
00228 private:
00229
00230 friend class FieldContainer;
00231
00232 static FieldDescription *_desc[];
00233 static FieldContainerType _type;
00234
00235
00236
00237 void operator =(const DirectionalLightBase &source);
00238 };
00239
00240
00241
00242
00243
00244
00245 typedef DirectionalLightBase *DirectionalLightBaseP;
00246
00247 typedef osgIF<DirectionalLightBase::isNodeCore,
00248 CoredNodePtr<DirectionalLight>,
00249 FieldContainer::attempt_to_create_CoredNodePtr_on_non_NodeCore_FC
00250 >::_IRet DirectionalLightNodePtr;
00251
00252 typedef RefPtr<DirectionalLightPtr> DirectionalLightRefPtr;
00253
00254 OSG_END_NAMESPACE
00255
00256 #define OSGDIRECTIONALLIGHTBASE_HEADER_CVSID "@(#)$Id: FCBaseTemplate_h.h,v 1.38 2005/07/08 06:37:35 vossg Exp $"
00257
00258 #endif