Partio
PartioSe.h
Go to the documentation of this file.
1 
35 #include <Partio.h>
36 #include <SeExpression.h>
37 #include <algorithm>
38 #include <map>
39 #include <vector>
40 
41 namespace Partio{
42 
43 template<class T>
44 class AttribVar:public SeExprVarRef
45 {
50 public:
54  {}
55 
56  bool isVec(){return attr.count!=1;}
57  void eval(const SeExprVarNode* node,SeVec3d& result){
58  const T* ptr=parts->data<T>(attr,currentIndex);
59  //std::cerr<<"in eval for "<<attr.name<<" count is "<<clampedCount<<" cur "<<currentIndex<<std::endl;
60  for(int k=0;k<clampedCount;k++){
61  result[k]=ptr[k];
62  }
63  // set any remaining fields (i.e. if clampedCount is 2)
64  for(int k=clampedCount;k<3;k++){
65  result[k]=0;
66  }
67  }
68 };
69 
70 struct SimpleVar:public SeExprVarRef{
71  double val;
72  SimpleVar():val(0){}
73  bool isVec(){return false;}
74  void eval(const SeExprVarNode* node,SeVec3d& result){
75  result[0]=result[1]=result[2]=val;
76  }
77 };
78 
80 template<class T> class VarToPartio;
81 
83 class PartioSe:public SeExpression{
84  bool isPaired;
90  typedef std::map<std::string,AttribVar<int>*> IntVarMap;
91  mutable IntVarMap intVars;
92  typedef std::map<std::string,AttribVar<float>*> FloatVarMap;
94 
95  typedef std::vector<VarToPartio<int>*> IntVarToPartio;
96  typedef std::vector<VarToPartio<float>*> FloatVarToPartio;
99 
101 
102 public:
103  typedef SeExpression::LocalVarTable::const_iterator LocalVarTableIterator;
104 
105  PartioSe(Partio::ParticlesDataMutable* parts,const char* expr);
107  void addSet(const char* prefix,Partio::ParticlesDataMutable* parts,int& setIndex);
108  void addExport(const std::string& name,LocalVarTableIterator it,Partio::ParticlesDataMutable* parts,int& setIndex);
109  virtual ~PartioSe();
110  bool runAll();
111  bool runRandom();
112  void run(int i);
113  bool runRange(int istart,int iend);
114  void setTime(float val);
115  SeExprVarRef* resolveVar(const std::string& s) const;
116 private:
117  PartioSe(const PartioSe&);
118  PartioSe& operator=(const PartioSe&);
119 };
120 }
bool isPaired
Definition: PartioSe.h:84
IntVarToPartio intVarToPartio
Definition: PartioSe.h:97
bool runRange(int istart, int iend)
Definition: PartioSe.cpp:188
Partio::ParticleAttribute pairH2
Definition: PartioSe.h:86
void eval(const SeExprVarNode *node, SeVec3d &result)
Definition: PartioSe.h:74
Partio::ParticlesDataMutable * parts
Definition: PartioSe.h:46
bool runAll()
Definition: PartioSe.cpp:154
bool isVec()
Definition: PartioSe.h:56
void data(const ParticleAttribute &attribute, const int indexCount, const ParticleIndex *particleIndices, const bool sorted, T *values)
Definition: Partio.h:113
void run(int i)
Definition: PartioSe.cpp:164
FloatVarMap floatVars
Definition: PartioSe.h:93
std::map< std::string, AttribVar< int > * > IntVarMap
Definition: PartioSe.h:90
int clampedCount
Definition: PartioSe.h:49
void addExport(const std::string &name, LocalVarTableIterator it, Partio::ParticlesDataMutable *parts, int &setIndex)
Definition: PartioSe.cpp:136
virtual ~PartioSe()
Definition: PartioSe.cpp:242
Partio::ParticleAttribute pairH1
Definition: PartioSe.h:86
PartioSe(Partio::ParticlesDataMutable *parts, const char *expr)
Definition: PartioSe.cpp:122
void addSet(const char *prefix, Partio::ParticlesDataMutable *parts, int &setIndex)
Definition: PartioSe.cpp:68
bool isVec()
Definition: PartioSe.h:73
SeExpression::LocalVarTable::const_iterator LocalVarTableIterator
Definition: PartioSe.h:103
void setTime(float val)
Definition: PartioSe.cpp:159
NOTE: This class is experimental and may be deleted/modified in future versions.
Definition: PartioSe.h:83
int & currentIndex
Definition: PartioSe.h:48
SeExprVarRef * resolveVar(const std::string &s) const
Definition: PartioSe.cpp:226
SimpleVar countVar
Definition: PartioSe.h:100
IntVarMap intVars
Definition: PartioSe.h:91
Particle Mutable Data Interface.
Definition: Partio.h:194
Definition: PartioSe.h:70
FloatVarToPartio floatVarToPartio
Definition: PartioSe.h:98
double val
Definition: PartioSe.h:71
bool runRandom()
Definition: PartioSe.cpp:206
SimpleVar timeVar
Definition: PartioSe.h:100
AttribVar(Partio::ParticlesDataMutable *parts, Partio::ParticleAttribute attr, int &currentIndex)
Definition: PartioSe.h:51
Partio::ParticleAttribute attr
Definition: PartioSe.h:47
void eval(const SeExprVarNode *node, SeVec3d &result)
Definition: PartioSe.h:57
Partio::ParticlesDataMutable * partsPairing
Definition: PartioSe.h:89
PartioSe & operator=(const PartioSe &)
Definition: PartioSe.h:44
SimpleVar indexVar
Definition: PartioSe.h:100
std::vector< VarToPartio< int > * > IntVarToPartio
Definition: PartioSe.h:95
Particle Collection Interface.
Definition: PartioAttribute.h:96
Definition: Partio.h:51
SimpleVar()
Definition: PartioSe.h:72
std::map< std::string, AttribVar< float > * > FloatVarMap
Definition: PartioSe.h:92
std::vector< VarToPartio< float > * > FloatVarToPartio
Definition: PartioSe.h:96
int currentIndex
Definition: PartioSe.h:85
Partio::ParticlesDataMutable * parts
Definition: PartioSe.h:88
int count
Number of entries, should be 3 if type is VECTOR.
Definition: PartioAttribute.h:103
int pairIndex2
Definition: PartioSe.h:87
int pairIndex1
Definition: PartioSe.h:87