Atoms Crowd  4.1.0
CurvePairLayoutGenerator.h
1 #pragma once
2 #include <Atoms/LayoutGenerators/DynamicLayoutGenerator.h>
3 #include <AtomsUtils/Curve.h>
4 
5 namespace Atoms
6 {
7  class ATOMS_EXPORT CurvePairLayoutGenerator : public DynamicLayoutGenerator
8  {
9  public:
10 
12 
13  virtual ~CurvePairLayoutGenerator();
14 
15  // the generator function
16  virtual std::vector<AgentInitData> generate(double time)
17  #ifdef __APPLE__
18  override
19  #endif
20  ;
21 
22  inline void setCurves(AtomsUtils::Curve& curve1, AtomsUtils::Curve& curve2) { m_curve1 = curve1; m_curve2 = curve2; }
23 
24  inline void setDirection(AtomsCore::Vector3& dir) { m_direction = dir; }
25 
26  inline void setUpVector(AtomsCore::Vector3& dir) { m_upVector = dir; }
27 
28  inline void setSeed(const int value) { m_seed = value; }
29 
30  inline void setRandomRange(const int minValue, const int maxValue) { m_minRandomRange = minValue; m_maxRandomRange = maxValue; }
31 
32  inline void setNumberOfAgents(size_t value1, size_t value2) { m_numberOfAgents1 = value1; m_numberOfAgents2 = value2; }
33 
34  inline void setNumberOfRows(size_t value) { m_numberOfRows = value; }
35 
36  inline void setUseCVs(bool value) { m_useCVs = value; }
37 
38  inline void setDirectionType(short value) { m_directionType = value; }
39 
40  inline void setInvertDirection(bool value) { m_invertDirection = value; }
41 
42  inline void setAgentTypeOverride(const std::map<int, std::string>& value) { m_agentTypeOverride = value; }
43 
44  inline void setDirectionOverride(const std::map<int, AtomsCore::Vector3>& value) { m_directionOverride = value; }
45 
46  inline void setRandomDistribution(const bool randomDistribution) { m_randomDistribution = randomDistribution;}
47 
48  inline void setRandomDistributionRange(const float minValue, const float maxValue) { m_minRandomDistribution = minValue; m_maxRandomDistribution = maxValue; }
49 
50  inline const char* typeName() override { return "curvePairLayout"; };
51 
52  inline void setOffset(const AtomsCore::Vector3& offset) { m_offset = offset; };
53 
54 
55  private:
56 
57  // Input curve
58  AtomsUtils::Curve m_curve1;
59  AtomsUtils::Curve m_curve2;
60 
61  // Agent direction
62  AtomsCore::Vector3 m_direction;
63 
64  // Up vector
65  AtomsCore::Vector3 m_upVector;
66 
67  // Offset
68  AtomsCore::Vector3 m_offset;
69 
70  // Agent direction override
71  std::map<int, AtomsCore::Vector3> m_directionOverride;
72 
73  // Agent type override
74  std::map<int, std::string> m_agentTypeOverride;
75 
76  // Number of agents along the curves
77  size_t m_numberOfAgents1;
78  size_t m_numberOfAgents2;
79 
80  // Number of rows
81  size_t m_numberOfRows;
82 
83  // Direction type: 0 - tangent, 1 - normal, 2 - custom
84  short m_directionType;
85 
86  // Invert the direction
87  bool m_invertDirection;
88 
89  // Use cvs instead num agents
90  bool m_useCVs;
91 
92  // seed for random generation
93  int m_seed;
94 
95  // Random range values
96  int m_minRandomRange;
97  int m_maxRandomRange;
98 
99  // Random distribution flag
100  bool m_randomDistribution;
101  float m_minRandomDistribution;
102  float m_maxRandomDistribution;
103  };
104 }
Atoms::CurvePairLayoutGenerator
Definition: CurvePairLayoutGenerator.h:8
Atoms::CurvePairLayoutGenerator::typeName
const char * typeName() override
Get the type name for this generator.
Definition: CurvePairLayoutGenerator.h:50
AtomsCore::Vector3
AtomsMath::Vector3 Vector3
Vector3 class.
Definition: AtomsMath.h:57
AtomsUtils::Curve
Nurbs curve.
Definition: Curve.h:18
Atoms::CurvePairLayoutGenerator::generate
virtual std::vector< AgentInitData > generate(double time)
Generate a vector of agent init data.
Atoms
Atoms namespace.
Definition: Agent.h:28
Atoms::DynamicLayoutGenerator
Definition: DynamicLayoutGenerator.h:15