Atoms Crowd  4.1.0
AtomsClothCache.h
1 #pragma once
2 // ===========================================================================
3 // Copyright (c) 2015 Toolchefs Ltd. All rights reserved.
4 //
5 // Use of this software is subject to the terms of the Toolchefs license
6 // agreement provided at the time of installation or download, or which
7 // otherwise accompanies this software in either electronic or hard copy form.
8 // ===========================================================================
9 
10 
11 #include <Atoms/Globals.h>
12 #include <Atoms/AgentGroup.h>
13 
14 namespace Atoms
15 {
16  class ATOMS_EXPORT AtomsClothCache
17  {
18  public:
19 
22 
24  /*
25  \param cachePath cache folder path
26  \param cacheName cache name without .clothcache
27  */
28  AtomsClothCache(const std::string& cachePath, const std::string& cacheName);
29 
31  /*
32  \param cachePath cache folder path
33  \param cacheName cache name without .atoms
34  \param agents Agents ids, it loads only those agents form the cache
35  */
36  AtomsClothCache(const std::string& cachePath, const std::string& cacheName, const std::vector<int>& agents);
37 
40 
42 
44  bool openCache(const std::string& cachePath, const std::string& cacheName);
45 
47 
50  bool openCache(const std::string& cachePath, const std::string& cacheName, const std::vector<int>& agents);
51 
53  void loadPrevFrame(int frame);
54 
56 
57  void loadFrame(int frame);
58 
60  void loadNextFrame(int frame);
61 
63  int startFrame() const;
64 
66  int endFrame() const;
67 
69  int currentFrame() const;
70 
72  int prevFrame() const;
73 
75  int nextFrame() const;
76 
78  AtomsPtr<AtomsCore::MapMetadata>& prevFrameData();
79 
81  AtomsPtr<AtomsCore::MapMetadata>& frameData();
82 
84  AtomsPtr<AtomsCore::MapMetadata>& nextFrameData();
85 
87 
91  void loadBoundingBox(double time, AtomsCore::Box3& box) const;
92 
94 
99  void loadAgentClothBoundingBox(double time, unsigned int agentId, AtomsCore::Box3& box) const;
100 
102 
108  void loadAgentClothMeshBoundingBox(double time, unsigned int agentId, const std::string& meshName, AtomsCore::Box3& box) const;
109 
111 
118  void loadAgentClothMesh(double time,
119  unsigned int agentId,
120  const std::string& meshName,
121  std::vector<AtomsCore::Vector3>& points,
122  std::vector<AtomsCore::Vector3>& normals
123  ) const;
124 
126 
131  std::string getAgentClothMeshStackOrder(double time,
132  unsigned int agentId,
133  const std::string& meshName
134  ) const;
135 
137 
142  bool hasAgentClothMesh(double time, unsigned int agentId, const std::string& meshName) const;
143 
145  void clear();
146 
148  void processPoints(std::vector<AtomsCore::Vector3>& outPoints, std::vector<const std::vector<AtomsCore::Vector3>*> &inPoints, const std::vector<double> &inputWeightVector) const;
149 
150  void processNormals(std::vector<AtomsCore::Vector3>& outNormals, std::vector<const std::vector<AtomsCore::Vector3>*> &inNormals, const std::vector<double> &inputWeightVector) const;
151 
153  std::vector<int> agentIds(double time) const;
154 
156  std::vector<std::string> agentClothMeshNames(double time, unsigned int agentId) const;
157 
159  size_t numAgents(double time) const;
160 
161  void setAgentsToLoad(const std::vector<int>& agents);
162 
163  const std::string& cacheName() const;
164 
165  const std::string& cachePath() const;
166 
167  private:
168 
170  void readData(AtomsPtr<AtomsCore::MapMetadata>& data, int frame, int& m_currentFrame);
171 
172  void readDataKeys(AtomsPtr<AtomsCore::MapMetadata>& data, int frame, std::vector<std::string>& keys, int& m_currentFrame);
173 
174  private:
175 
177  AtomsCore::MapMetadata m_header;
178 
180  AtomsPtr<AtomsCore::MapMetadata> m_prevFrameData;
181 
183  AtomsPtr<AtomsCore::MapMetadata> m_currentFrameData;
184 
186  AtomsPtr<AtomsCore::MapMetadata> m_nextFrameData;
187 
188  std::vector<std::string> m_agentIdsToLoad;
189 
191  std::string m_cachePath;
192 
194  std::string m_cacheName;
195 
197  int m_startFrame;
198 
200  int m_endFrame;
201 
203  int m_prevFrame;
204 
206  int m_currentFrame;
207 
209  int m_nextFrame;
210  };
211 }
Atoms::AtomsClothCache::numAgents
size_t numAgents(double time) const
Gets the number of agents created.
Atoms::AtomsClothCache::hasAgentClothMesh
bool hasAgentClothMesh(double time, unsigned int agentId, const std::string &meshName) const
Check if a mesh for an egent exist inside the cache.
Atoms::AtomsClothCache::prevFrame
int prevFrame() const
Get the previous frame.
Atoms::AtomsClothCache::nextFrame
int nextFrame() const
Get the next frame.
Atoms::AtomsClothCache::loadAgentClothBoundingBox
void loadAgentClothBoundingBox(double time, unsigned int agentId, AtomsCore::Box3 &box) const
Loads an agent bbox.
Atoms::AtomsClothCache::prevFrameData
AtomsPtr< AtomsCore::MapMetadata > & prevFrameData()
Get the previous frame data.
Atoms::AtomsClothCache::openCache
bool openCache(const std::string &cachePath, const std::string &cacheName, const std::vector< int > &agents)
Opens a cache.
Atoms::AtomsClothCache::loadAgentClothMeshBoundingBox
void loadAgentClothMeshBoundingBox(double time, unsigned int agentId, const std::string &meshName, AtomsCore::Box3 &box) const
Loads an agent bbox.
Atoms::AtomsClothCache::openCache
bool openCache(const std::string &cachePath, const std::string &cacheName)
Opens a cache.
Atoms::AtomsClothCache::frameData
AtomsPtr< AtomsCore::MapMetadata > & frameData()
Get the current frame data.
Atoms::AtomsClothCache::AtomsClothCache
AtomsClothCache(const std::string &cachePath, const std::string &cacheName, const std::vector< int > &agents)
Constructor.
Atoms::AtomsClothCache::loadPrevFrame
void loadPrevFrame(int frame)
Loads a cache frame and store in the previous frame (usually used for the previous frame during the m...
AtomsCore::Box3
AtomsMath::Box3 Box3
Bounding box class.
Definition: AtomsMath.h:74
Atoms::AtomsClothCache::loadFrame
void loadFrame(int frame)
Loads a cache frame and stores the current frame data.
Atoms::AtomsClothCache::AtomsClothCache
AtomsClothCache(const std::string &cachePath, const std::string &cacheName)
Constructor.
Atoms::AtomsClothCache::endFrame
int endFrame() const
Get the end frame.
Atoms::AtomsClothCache::loadBoundingBox
void loadBoundingBox(double time, AtomsCore::Box3 &box) const
Loads bbox.
Atoms
Atoms namespace.
Definition: Agent.h:28
Atoms::AtomsClothCache::loadNextFrame
void loadNextFrame(int frame)
Loads a cache frame and stores the next frame data (usually used for the next frame during the motion...
Atoms::AtomsClothCache::agentClothMeshNames
std::vector< std::string > agentClothMeshNames(double time, unsigned int agentId) const
Gets agent cloth mesh names.
AtomsCore::MapMetadata
MapMetadata class.
Definition: MapMetadata.h:24
Atoms::AtomsClothCache::getAgentClothMeshStackOrder
std::string getAgentClothMeshStackOrder(double time, unsigned int agentId, const std::string &meshName) const
Get cloth mesh stack order.
Atoms::AtomsClothCache::AtomsClothCache
AtomsClothCache()
Constructor.
Atoms::AtomsClothCache::clear
void clear()
Clear all the loaded frames.
Atoms::AtomsClothCache::agentIds
std::vector< int > agentIds(double time) const
Gets agent ids.
Atoms::AtomsClothCache::loadAgentClothMesh
void loadAgentClothMesh(double time, unsigned int agentId, const std::string &meshName, std::vector< AtomsCore::Vector3 > &points, std::vector< AtomsCore::Vector3 > &normals) const
Loads all data for an agent.
Atoms::AtomsClothCache
Definition: AtomsClothCache.h:17
Atoms::AtomsClothCache::nextFrameData
AtomsPtr< AtomsCore::MapMetadata > & nextFrameData()
Get the next frame data.
Atoms::AtomsClothCache::currentFrame
int currentFrame() const
Get the current frame.
Atoms::AtomsClothCache::~AtomsClothCache
~AtomsClothCache()
Destructor.
Atoms::AtomsClothCache::startFrame
int startFrame() const
Get the start frame.
Atoms::AtomsClothCache::processPoints
void processPoints(std::vector< AtomsCore::Vector3 > &outPoints, std::vector< const std::vector< AtomsCore::Vector3 > * > &inPoints, const std::vector< double > &inputWeightVector) const
Blends multiple mapmetadata.