PeriDyno 1.0.0
Loading...
Searching...
No Matches
OBase.h
Go to the documentation of this file.
1
16#pragma once
17#include <iostream>
18#include "FBase.h"
19#include "Object.h"
20
21#ifdef VK_BACKEND
22#include "VkProgram.h"
23#endif // VK_BACKEND
24
25
26namespace dyno {
34
35 typedef std::string FieldID;
36 typedef std::string ProgramID;
37
38 class OBase : public Object
39 {
40 public:
41 typedef std::vector<FBase*> FieldVector;
42 typedef std::map<FieldID, FBase*> FieldMap;
43
44#ifdef VK_BACKEND
45 typedef std::map<ProgramID, std::shared_ptr<VkProgram>> ProgramMap;
46 typedef std::map<ProgramID, std::shared_ptr<VkMultiProgram>> MultiProgramMap;
47#endif // VK_BACKEND
48
49 OBase() : Object() {};
50 ~OBase() override;
51
57 virtual std::string caption();
58
64 virtual bool captionVisible();
65
69 virtual std::string description();
70
71 virtual std::string getName();
72
77 bool addField(FBase* data);
84 bool addField(FieldID name, FBase* data);
85 bool addFieldAlias(FieldID name, FBase* data);
86 bool addFieldAlias(FieldID name, FBase* data, FieldMap& fieldAlias);
87
93 bool findField(FBase* data);
99 bool findFieldAlias(const FieldID name);
107 bool findFieldAlias(const FieldID name, FieldMap& fieldAlias);
108
113 bool removeField(FBase* data);
118 bool removeFieldAlias(const FieldID name);
119 bool removeFieldAlias(const FieldID name, FieldMap& fieldAlias);
120
125 FBase* getField(const FieldID name);
126
127 std::vector<FBase*>& getAllFields();
128
139 virtual bool attachField(FBase* field, std::string name, std::string desc, bool autoDestroy = true);
140
141 template<typename T>
143 {
144 FieldMap::iterator iter = m_fieldAlias.find(name);
145 if (iter != m_fieldAlias.end())
146 {
147 return dynamic_cast<T*>(iter->second);
148 }
149 return nullptr;
150 }
151
155 bool isAllFieldsReady();
156
157 std::vector<FieldID> getFieldAlias(FBase* data);
158 int getFieldAliasCount(FBase* data);
159
160
161 inline void setBlockCoord(float x, float y) { block_x = x; block_y = y; }
162
163 inline float bx() { return block_x; }
164 inline float by() { return block_y; }
165
166
167 bool findInputField(FBase* field);
168 bool addInputField(FBase* field);
169 bool removeInputField(FBase* field);
170
171 std::vector<FBase*>& getInputFields() { return fields_input; }
172
173 bool findOutputField(FBase* field);
174 bool addOutputField(FBase* field);
175 bool addToOutput(FBase* field);
176 bool removeOutputField(FBase* field);
177 bool removeFromOutput(FBase* field);
178
179 std::vector<FBase*>& getOutputFields() { return fields_output; }
180
181 bool findParameter(FBase* field);
182 bool addParameter(FBase* field);
183 bool removeParameter(FBase* field);
184
185 std::vector<FBase*>& getParameters() { return fields_param; }
186
187#ifdef VK_BACKEND
188 std::shared_ptr<VkProgram> addKernel(ProgramID programId, std::shared_ptr<VkProgram> prog);
189
190 std::shared_ptr<VkProgram> kernel(ProgramID programId);
191
192 VkMultiProgram& createKernelGroup(ProgramID programId);
193
194 VkMultiProgram& kernelGroup(ProgramID programId);
195
196 protected:
197 ProgramMap Kernels;
198 MultiProgramMap MultiKernels;
199#endif
200
201 private:
202 float block_x = 0.0f;
203 float block_y = 0.0f;
204
207
208 protected:
209 std::vector<FBase*> fields_input;
210 std::vector<FBase*> fields_output;
211 std::vector<FBase*> fields_param;
212 };
213
214}
std::vector< FieldID > getFieldAlias(FBase *data)
Definition OBase.cpp:222
bool findOutputField(FBase *field)
Definition OBase.cpp:308
bool removeParameter(FBase *field)
Definition OBase.cpp:404
bool removeFieldAlias(const FieldID name)
Remove a field by its name.
Definition OBase.cpp:168
float by()
Definition OBase.h:164
virtual bool attachField(FBase *field, std::string name, std::string desc, bool autoDestroy=true)
Attach a field to Base.
Definition OBase.cpp:250
float bx()
Definition OBase.h:163
std::vector< FBase * > & getAllFields()
Definition OBase.cpp:202
bool findFieldAlias(const FieldID name)
Find a field by its name.
Definition OBase.cpp:120
std::vector< FBase * > fields_param
Definition OBase.h:211
std::vector< FBase * > FieldVector
Definition OBase.h:41
std::vector< FBase * > & getParameters()
Definition OBase.h:185
virtual bool captionVisible()
Whether to hide the caption in the GUI.
Definition OBase.cpp:24
bool removeInputField(FBase *field)
Definition OBase.cpp:290
bool addField(FBase *data)
Add a field to Base FieldID will be set to the name of Field by default.
Definition OBase.cpp:45
virtual std::string caption()
Return the caption.
Definition OBase.cpp:19
bool addParameter(FBase *field)
Definition OBase.cpp:390
std::vector< FBase * > & getOutputFields()
Definition OBase.h:179
bool addFieldAlias(FieldID name, FBase *data)
Definition OBase.cpp:69
float block_x
Definition OBase.h:202
FieldMap m_fieldAlias
Definition OBase.h:206
int getFieldAliasCount(FBase *data)
Definition OBase.cpp:236
bool removeOutputField(FBase *field)
Definition OBase.cpp:345
virtual std::string getName()
Definition OBase.cpp:40
FBase * getField(const FieldID name)
Return a field by its name.
Definition OBase.cpp:192
void setBlockCoord(float x, float y)
Definition OBase.h:161
bool findField(FBase *data)
Find a field by its pointer.
Definition OBase.cpp:109
std::vector< FBase * > & getInputFields()
Definition OBase.h:171
std::vector< FBase * > fields_output
Definition OBase.h:210
bool findParameter(FBase *field)
Definition OBase.cpp:379
std::map< FieldID, FBase * > FieldMap
Definition OBase.h:42
virtual std::string description()
Return a description for the node or module, override this function to support user-defined descripti...
Definition OBase.cpp:29
std::vector< FBase * > fields_input
Definition OBase.h:209
bool addOutputField(FBase *field)
Definition OBase.cpp:319
T * getField(FieldID name)
Definition OBase.h:142
bool findInputField(FBase *field)
Definition OBase.cpp:265
float block_y
Definition OBase.h:203
~OBase() override
Definition OBase.cpp:9
FieldVector m_field
Definition OBase.h:205
bool removeFromOutput(FBase *field)
Definition OBase.cpp:363
bool addInputField(FBase *field)
Definition OBase.cpp:276
bool isAllFieldsReady()
Check the completeness of all required fields.
Definition OBase.cpp:207
bool removeField(FBase *data)
Remove a field by its pointer.
Definition OBase.cpp:142
bool addToOutput(FBase *field)
Definition OBase.cpp:333
#define T(t)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
std::string ProgramID
Definition OBase.h:36
std::string FieldID
Base class for modules.
Definition OBase.h:35