cstool/meshobjtmpl.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2003 by Martin Geisse <[email protected]> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_MESHOBJTMPL_H__ 00020 #define __CS_MESHOBJTMPL_H__ 00021 00026 #include "csextern.h" 00027 00028 #include "csgeom/box.h" 00029 #include "cstool/objmodel.h" 00030 #include "csutil/flags.h" 00031 #include "csutil/refarr.h" 00032 #include "csutil/scf_implementation.h" 00033 00034 #include "ivideo/graph3d.h" 00035 #include "imesh/object.h" 00036 #include "iutil/comp.h" 00037 00038 struct iEngine; 00039 struct iMaterialWrapper; 00040 00041 //Deprecate these when possible! 00043 #define CS_DECLARE_SIMPLE_MESH_FACTORY(name,meshclass) \ 00044 class name : public csMeshFactory { \ 00045 public: \ 00046 name (iEngine *e, iObjectRegistry* reg, iMeshObjectType* type) \ 00047 : csMeshFactory (e, reg, type) {} \ 00048 virtual csPtr<iMeshObject> NewInstance () \ 00049 { return new meshclass (Engine, this); } \ 00050 virtual csPtr<iMeshObjectFactory> Clone () { return 0; } \ 00051 }; 00052 00054 #define CS_DECLARE_SIMPLE_MESH_PLUGIN(name,factclass) \ 00055 class name : public csMeshType { \ 00056 public: \ 00057 name (iBase *p) : csMeshType (p) {} \ 00058 virtual csPtr<iMeshObjectFactory> NewFactory () \ 00059 { return new factclass (Engine, object_reg, this); } \ 00060 }; 00061 00062 #include "csutil/win32/msvc_deprecated_warn_off.h" 00063 00075 class CS_CRYSTALSPACE_EXPORT csMeshObject : 00076 public scfImplementationExt1<csMeshObject, csObjectModel, iMeshObject> 00077 { 00078 protected: 00080 csRef<iMeshObjectDrawCallback> VisCallback; 00081 00083 iMeshWrapper *LogParent; 00084 00086 iEngine *Engine; 00087 00089 void WantToDie (); 00090 00092 csFlags flags; 00093 00095 csBox3 boundingbox; 00096 00097 public: 00098 00100 csMeshObject (iEngine *engine); 00101 00103 virtual ~csMeshObject (); 00104 00109 virtual iMeshObjectFactory* GetFactory () const = 0; 00110 00115 virtual csPtr<iMeshObject> Clone () { return 0; } 00116 00120 virtual csFlags& GetFlags () { return flags; } 00121 00126 virtual csRenderMesh** GetRenderMeshes (int& num, iRenderView*, iMovable*, 00127 uint32) 00128 { 00129 num = 0; 00130 return 0; 00131 } 00132 00138 virtual void SetVisibleCallback (iMeshObjectDrawCallback* cb); 00139 00144 virtual iMeshObjectDrawCallback* GetVisibleCallback () const; 00145 00150 virtual void NextFrame (csTicks current_time,const csVector3& pos, 00151 uint currentFrame); 00152 00157 virtual void HardTransform (const csReversibleTransform& t); 00158 00163 virtual bool SupportsHardTransform () const; 00164 00169 virtual bool HitBeamOutline (const csVector3& start, 00170 const csVector3& end, csVector3& isect, float* pr); 00171 00176 virtual bool HitBeamObject (const csVector3& start, const csVector3& end, 00177 csVector3& isect, float* pr, int* polygon_idx = 0, 00178 iMaterialWrapper** = 0); 00179 00184 virtual void SetMeshWrapper (iMeshWrapper* logparent); 00185 00190 virtual iMeshWrapper* GetMeshWrapper () const; 00191 00195 virtual iObjectModel* GetObjectModel () { return this; } 00196 00201 virtual bool SetColor (const csColor& color); 00202 00207 virtual bool GetColor (csColor& color) const; 00208 00213 virtual bool SetMaterialWrapper (iMaterialWrapper* material); 00214 00219 virtual iMaterialWrapper* GetMaterialWrapper () const; 00220 00222 virtual void SetMixMode (uint) { } 00224 virtual uint GetMixMode () const { return CS_FX_COPY; } 00225 00230 virtual void InvalidateMaterialHandles () { } 00231 00236 virtual void PositionChild (iMeshObject* /*child*/,csTicks /*current_time*/) { } 00237 00242 virtual void GetObjectBoundingBox (csBox3& bbox); 00243 00248 virtual const csBox3& GetObjectBoundingBox (); 00249 00254 virtual void SetObjectBoundingBox (const csBox3& bbox); 00255 00260 virtual void GetRadius (float& radius, csVector3& center); 00261 00266 virtual iTerraFormer* GetTerraFormerColldet () { return 0; } 00267 00268 }; 00269 00270 #include "csutil/win32/msvc_deprecated_warn_on.h" 00271 00276 class CS_CRYSTALSPACE_EXPORT csMeshFactory : 00277 public scfImplementation1<csMeshFactory, iMeshObjectFactory> 00278 { 00279 protected: 00281 iMeshFactoryWrapper *LogParent; 00282 00284 iMeshObjectType* mesh_type; 00285 00287 iEngine *Engine; 00288 00290 iObjectRegistry* object_reg; 00291 00293 csFlags flags; 00294 00295 public: 00296 00298 csMeshFactory (iEngine *engine, iObjectRegistry* object_reg, 00299 iMeshObjectType* parent); 00300 00302 iObjectRegistry* GetObjectRegistry () { return object_reg; } 00303 00305 virtual ~csMeshFactory (); 00306 00310 virtual csFlags& GetFlags () { return flags; } 00311 00316 virtual csPtr<iMeshObject> NewInstance () = 0; 00317 00322 virtual void HardTransform (const csReversibleTransform& t); 00323 00328 virtual bool SupportsHardTransform () const; 00329 00334 virtual void SetMeshFactoryWrapper (iMeshFactoryWrapper* logparent); 00335 00340 virtual iMeshFactoryWrapper* GetMeshFactoryWrapper () const; 00341 00345 virtual iMeshObjectType* GetMeshObjectType () const; 00346 00350 virtual iObjectModel* GetObjectModel () { return 0; } 00351 00352 virtual bool SetMaterialWrapper (iMaterialWrapper*) { return false; } 00353 virtual iMaterialWrapper* GetMaterialWrapper () const { return 0; } 00354 virtual void SetMixMode (uint) { } 00355 virtual uint GetMixMode () const { return 0; } 00356 }; 00357 00361 class CS_CRYSTALSPACE_EXPORT csMeshType : 00362 public scfImplementation2<csMeshType, iMeshObjectType, iComponent> 00363 { 00364 protected: 00366 iEngine *Engine; 00367 00369 iObjectRegistry* object_reg; 00370 00371 public: 00372 00374 csMeshType (iBase *p); 00375 00377 virtual ~csMeshType (); 00378 00382 bool Initialize (iObjectRegistry* reg); 00383 00388 virtual csPtr<iMeshObjectFactory> NewFactory () = 0; 00389 00390 }; 00391 00392 #endif // __CS_MESHOBJTMPL_H__
Generated for Crystal Space by doxygen 1.4.7