SceneGraphObject.h

Go to the documentation of this file.
00001 /* $Id: SceneGraphObject.h,v 1.3 2002/11/05 14:31:15 anonymous Exp $ */
00002 
00003 #ifndef __SCENE_GRAPH_OBJECT_H
00004 #define __SCENE_GRAPH_OBJECT_H
00005 
00006 #include <esg/Definitions.h>
00007 #include <esg/ESGObject.h>
00008 #include <esg/List.h>
00009 //#include <esg/metric/Metric.h>
00010 #include <esg/AutoPtr.h>
00011 #include <esg/SGAttribute.h>
00012 #include <esg/Material.h>
00013 #include <esg/brdf/SpecularBRDF.h>
00014 #include <esg/brdf/DiffuseBRDF.h>
00015 #include <esg/Transform.h>
00016 #include <esg/emittance/Emittance.h>
00017 #include <esg/visitor/Visitor.h>
00018 #include <esg/texture/Texture.h>
00019 #include <esg/geometry/Geometry.h>
00020 #include <esg/energy/EnergyCoat.h>
00021 
00022 namespace esg {
00023 
00024 class Visitor;
00025 class IteratorSDS;
00026 
00036 class OGSCENE_EXPORT SceneGraphObject : public ESGObject {
00037 public:
00038         typedef unsigned OID;
00039 
00040 protected:
00041         OID    _oid;      
00042         char * _name;     
00043         bool   _tangible; 
00044     
00045         AutoPtr<Geometry>*          _pAutoGeometry;
00046         Geometry*                   _pGeometry;
00047         AutoPtr<Emittance>*         _pAutoEmittance;
00048         Emittance*                  _pEmittance;
00049         AutoPtr<DiffuseBRDF>*       _pAutoDiffuseBRDF;
00050         DiffuseBRDF*                _pDiffuseBRDF;
00051         AutoPtr<SpecularBRDF>*      _pAutoSpecularBRDF;
00052         SpecularBRDF*               _pSpecularBRDF;
00053         AutoPtr<Transform>*         _pAutoTransformation;
00054         Transform*                  _pTransformation;
00055         AutoPtr<Texture>*           _pAutoTexture;
00056         Texture*                    _pTexture;
00057         List<Material>              _privateMaterials;
00058         List<AutoPtr<Material> >    _sharedMaterials;
00059         List<SGAttribute>           _privateAttributes;
00060         List<AutoPtr<SGAttribute> > _sharedAttributes;
00061 
00062 protected:
00063         inline bool _have_private_geometry       (void) const;
00064         inline bool _have_shared_geometry        (void) const;
00065         inline bool _have_geometry               (void) const;
00066         inline bool _have_private_emittance      (void) const;
00067         inline bool _have_shared_emittance       (void) const;
00068         inline bool _have_emittance              (void) const;
00069         inline bool _have_private_diff_brdf      (void) const;
00070         inline bool _have_shared_diff_brdf       (void) const;
00071         inline bool _have_private_spec_brdf      (void) const;
00072         inline bool _have_shared_spec_brdf       (void) const;
00073         inline bool _have_diff_brdf              (void) const;
00074         inline bool _have_spec_brdf              (void) const;
00075         inline bool _have_private_transformation (void) const;
00076         inline bool _have_shared_transformation  (void) const;
00077         inline bool _have_transformation         (void) const;
00078         inline bool _have_private_texture        (void) const;
00079         inline bool _have_shared_texture         (void) const;
00080         inline bool _have_texture                (void) const;
00081     
00082 public:
00089         SceneGraphObject (OID oid = 0, const char * name = "");
00090 
00094         virtual ~SceneGraphObject();
00095 
00096         void setOID (OID oid = 0) { _oid = oid; }
00097         OID  getOID () const      { return _oid;}
00098 
00099         void setName (const char* name = "") {
00100             if (_name) delete [] _name;
00101             _name = NULL;
00102             if (name) {
00103                 _name = new char [strlen(name) + 1];
00104                 strcpy(_name, name);
00105             }
00106         }
00107         const char* getName (void) const { return _name; }
00108 
00109         /*
00110          * Methods setting known (predefine) attributes.
00111          */
00112 
00113         virtual void setSharedGeometry        (AutoPtr<Geometry>*);
00114         virtual void setPrivateGeometry       (Geometry*);
00115         virtual void setSharedEmittance       (AutoPtr<Emittance>*);
00116         virtual void setPrivateEmittance      (Emittance*);
00117         virtual void setSharedDiffuseBRDF     (AutoPtr<DiffuseBRDF>*);
00118         virtual void setPrivateDiffuseBRDF    (DiffuseBRDF*);
00119         virtual void setSharedSpecularBRDF    (AutoPtr<SpecularBRDF>*);
00120         virtual void setPrivateSpecularBRDF   (SpecularBRDF*);
00121         virtual void setSharedTransformation  (AutoPtr<Transform>*);
00122         virtual void setPrivateTransformation (Transform*);
00123         virtual void setSharedTexture         (AutoPtr<Texture>*);
00124         virtual void setPrivateTexture        (Texture*);
00125 
00126         /*
00127          * Methods setting the visitor-based attributes
00128          */
00129         virtual void appendSharedMaterial   (AutoPtr<Material> *);
00130         virtual void appendPrivateMaterial  (Material *);
00131         virtual void appendSharedAttribute  (AutoPtr<SGAttribute> *);
00132         virtual void appendPrivateAttribute (SGAttribute *);
00133         
00134         /*
00135          * Inspection of known (predefined) attributes
00136          */
00137         virtual Geometry*     geometry       (void) { return _pGeometry;      }
00138         virtual Emittance*    emittance      (void) { return _pEmittance;     }
00139         virtual DiffuseBRDF*  diffuseBRDF    (void) { return _pDiffuseBRDF;   }
00140         virtual SpecularBRDF* specularBRDF   (void) { return _pSpecularBRDF;  }
00141         virtual Transform*    transformation (void) { return _pTransformation;}
00142         virtual Texture*      texture        (void) { return _pTexture;       }
00143     
00144         virtual const Geometry*     geometry       (void) const { return _pGeometry; }
00145         virtual const Emittance*    emittance      (void) const { return _pEmittance;}
00146         virtual const DiffuseBRDF*  diffuseBRDF    (void) const { return _pDiffuseBRDF;     }
00147         virtual const SpecularBRDF* specularBRDF   (void) const { return _pSpecularBRDF;     }
00148         virtual const Transform*    transformation (void) const { return _pTransformation; }
00149         virtual const Texture*      texture        (void) const { return _pTexture;  }
00150 
00151         /*
00152          * Inspection of visitor-based attributes
00153          */
00154         void inspectMaterials  (Visitor&);
00155         void inspectAttributes (Visitor&);
00156 
00157 
00163         virtual bool supportsEnergy (void) { return false; }
00164 
00168         virtual AutoPtr<EnergyCoat>* getEnergyState (void) { return NULL;  }
00169 
00175         virtual void setEnergyState (AutoPtr<EnergyCoat>* e) {}
00176 
00182         virtual bool hasSubnodes(void) const = 0;
00183 
00189         virtual IteratorSDS* traverseSubnodes (void) const = 0;
00190 
00197         virtual bool tangible (void) const { return _tangible; }
00198 
00199 
00203         virtual void __debug() {
00204             fprintf(stderr,"SceneGraphObject:\n   Attributes:\n");
00205             for (SGAttribute* a=_privateAttributes.firstItem();a;a=_privateAttributes.nextItem())
00206                 a->__debug();
00207         }
00208 };
00209 
00210 }; // namespace
00211 
00212 #endif // __SCENE_GRAPH_OBJECT_H

Generated on Wed Jun 28 12:24:28 2006 for esg by  doxygen 1.4.6