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