My Project
CadModel.h
1 #pragma once
2 
3 #include "AssetEntity.h"
4 #include "ParameterBlock.h"
5 #include "CadModelNode.h"
6 #include "CadContentLoader.h"
7 
8 namespace ParaEngine
9 {
11  {
12  public:
13  Vector3 Position;
14  Vector3 Normal;
15  static const D3DVERTEXELEMENT9 g_VertexDesc[3];
16 
18  VertexPositionNormal(const Vector3 &pos,const Vector3 &normal);
19  VertexPositionNormal(float pX,float pY,float pZ,float nX,float nY,float nZ);
20  };
21 
23  {
24  public:
25  Vector3 Position;
26  static const D3DVERTEXELEMENT9 g_VertexDesc[2];
27 
29  VertexPosition(const Vector3 &pos);
30  VertexPosition(float pX,float pY,float pZ);
31  };
32 
33  class CadModelProcessor;
34  class CadModelNode;
35  class CadModel;
36 
38  {
39  friend CadModelProcessor;
40 
41  public:
42  CadModelPart(CadModel *m_pParent,IDirect3DVertexBuffer9* vb,IDirect3DIndexBuffer9* ib,IDirect3DVertexDeclaration9* layout,
43  bool sharedBuffer,D3DPRIMITIVETYPE primitiveType,uint16_t vertexStride,uint32_t vertexOfs,
44  uint32_t indexOfs,uint32_t primitiveCount,uint32_t vertexCount);
45  ~CadModelPart();
46 
47  CParameterBlock* GetParamBlock();
48  const LinearColor& GetDiffuseColor(){return m_diffuseColor;}
49  int32 GetEffectPassId(){return m_effectPassId;}
50  void SubmitGeometry(IDirect3DDevice9* pDevice);
51 
52  private:
53  char* m_name;
54  CadModel *m_pParent;
55 
56  bool m_useSharedBuffer;
57  uint16_t m_paramBlockIndex;
58  uint16_t m_vertexStride;
59  uint32_t m_vertexOffset;
60  uint32_t m_indexOffset;
61  uint32_t m_primitiveCount;
62  uint32_t m_vertexCount;
63 
64 
65  int m_nTechniqueHandle;
66  uint8 m_effectPassId;
67  LinearColor m_diffuseColor;
68 
69  D3DPRIMITIVETYPE m_primitiveType;
70  IDirect3DVertexDeclaration9* m_pVertexLayout;
71  IDirect3DVertexBuffer9* m_pVertexBuffer;
72  IDirect3DIndexBuffer9* m_pIndexBuffer;
73 
74  };
75 
76 
77  class CadModel :public AssetEntity
78  {
79  friend CadModelNode;
80  friend CadModelProcessor;
81  public:
82  CadModel(const AssetKey& key)
83  :AssetEntity(key),m_pVertexLayout(NULL),m_pSharedIndexBuffer(NULL),m_pSharedVertexBuffer(NULL)
84  {
85 
86  }
87 
88  virtual AssetEntity::AssetType GetType(){return AssetEntity::cadMesh;};
89 
90  void Refresh(const char* fileName=NULL,bool loayLoad=false);
91 
92  virtual bool IsLoaded();
93 
94  const std::string& GetFileName();
95 
96  virtual CParameterBlock* GetParamBlock(bool bCreateIfNotExist = false);
97 
98  virtual HRESULT InitDeviceObjects();
99  virtual HRESULT RestoreDeviceObjects();
100  virtual HRESULT InvalidateDeviceObjects();
101  virtual HRESULT DeleteDeviceObjects();
102  virtual void Cleanup();
103  void Init(const char* fileName=NULL);
104 
105  CParameterBlock* GetParamBlockByIndex_(int16_t index);
106  HRESULT CreateFromFile_Async(void* pContext, IDirect3DDevice9* pDev=NULL, const char* sFileName=NULL);
107 
108  CadModelPart* CreateCadModelPart(IDirect3DVertexBuffer9* sharedVB,IDirect3DIndexBuffer9* sharedIB,IDirect3DVertexDeclaration9* sharedLayout,
109  D3DPRIMITIVETYPE primitiveType,uint16_t vertexStride,uint32_t vertexOfs,uint32_t indexOfs,uint32_t primitiveCount,uint32_t vertexCount);
110 
111  int GetPrimaryTechniqueHandle(){return m_nTechniqueHandle;}
112 
113  void SetPrimaryTechniqueHandle(int nHandle){m_nTechniqueHandle = nHandle;}
114 
115  const static std::string g_gridModelName;
116 
117  static bool IsStepFile(const char* fileName);
118  static bool IsIgesFile(const char* fileName);
119 
120  private:
121  std::vector<CadModelPart*> m_modelParts;
122  std::vector<CParameterBlock> m_paramBlocks;
123  IDirect3DVertexDeclaration9* m_pVertexLayout;
124  IDirect3DIndexBuffer9* m_pSharedIndexBuffer;
125  IDirect3DVertexBuffer9* m_pSharedVertexBuffer;
126  int m_nTechniqueHandle;
127  Vector3 m_vMin;
128  Vector3 m_vMax;
129  };
130 }
Definition: CadModel.h:22
AssetType
each asset type has a unique asset type number
Definition: AssetEntity.h:82
different physics engine has different winding order.
Definition: EventBinding.h:32
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
static const std::string g_gridModelName
CadModel.
Definition: CadModel.h:115
Definition: CadContentLoader.h:34
Definition: CadModel.h:37
Definition: CadModelNode.h:10
std::string AssetKey
the unique key object for asset entity.
Definition: AssetEntity.h:13
Definition: CadModel.h:10
A linear, 32-bit/component floating point RGBA color.
Definition: ParaColor.h:12
Base class for managed asset entity in ParaEngine.
Definition: AssetEntity.h:25
Definition: CadModel.h:77
a list of CParameter{name, value} pairs of anything.
Definition: ParameterBlock.h:108