PeriDyno 1.0.0
Loading...
Searching...
No Matches
Module.cpp
Go to the documentation of this file.
1#include "Module.h"
2#include "Node.h"
3#include "SceneGraph.h"
4
5namespace dyno
6{
7 Module::Module(std::string name)
8 : OBase()
9 , m_node(nullptr)
10 , m_initialized(false)
11 {
12 m_module_name = name;
13 }
14
16 {
17// //Before deallocating data, fields should be disconnected first
18// for each (auto f in fields_input)
19// {
20// FBase* src = f->getSource();
21// if (src != nullptr) {
22// src->disconnectField(f);
23// }
24// }
25//
26// for each (auto f in fields_output)
27// {
28// auto& sinks = f->getSinks();
29// for each (auto sink in sinks)
30// {
31// f->disconnectField(sink);
32// }
33// }
34 }
35
37 {
38 if (m_initialized)
39 {
40 return true;
41 }
43
44 return m_initialized;
45 }
46
48 {
49 if (!isInitialized())
50 {
51 bool ret = initialize();
52 if (ret == false)
53 return;
54 }
55
56 this->updateStarted();
57
58 if (!this->validateInputs()) {
59 return;
60 }
61
62 if (this->requireUpdate()) {
63
64 //pre processing
65 this->preprocess();
66
67 //do execution if any field is modified
68 this->updateImpl();
69
70 //post processing
71 this->postprocess();
72
73 //reset parameters
74 for(auto param : fields_param)
75 {
76 param->tack();
77 }
78
79 //reset input fields
80 for (auto f_in : fields_input)
81 {
82 f_in->tack();
83 }
84
85 //tag all output fields as modifed
86 for(auto f_out : fields_output)
87 {
88 f_out->tick();
89 }
90 }
91
92 if (!this->validateOutputs()) {
93 return;
94 }
95
96 this->updateEnded();
97 }
98
100 {
101 return isInputComplete();
102 }
103
105 {
106 //If any input field is empty, return false;
107 for(auto f_in : fields_input)
108 {
109 if (!f_in->isOptional() && f_in->isEmpty())
110 {
111 Node* par = this->getParentNode();
112 if (par != nullptr && par->getSceneGraph() != nullptr && par->getSceneGraph()->isValidationInfoPrintable())
113 {
114 std::string errMsg = std::string("The input field ") + f_in->getObjectName() +
115 std::string(" in Module ") + this->getClassInfo()->getClassName() + std::string(" is not set!");
116
118 }
119
120 return false;
121 }
122 }
123
124 return true;
125 }
126
128 {
129 //If any output field is empty, return false;
130 for(auto f_out : fields_output)
131 {
132 if (f_out->isEmpty())
133 {
134 Node* par = this->getParentNode();
135 if (par != nullptr && par->getSceneGraph() != nullptr && par->getSceneGraph()->isValidationInfoPrintable())
136 {
137 std::string errMsg = std::string("The output field ") + f_out->getObjectName() +
138 std::string(" in Module ") + this->getClassInfo()->getClassName() + std::string(" is not prepared!");
139
141 }
142 return false;
143 }
144 }
145
146 return true;
147 }
148
150 {
151
152 }
153
155 {
156
157 }
158
160 {
161 return isOutputCompete();
162 }
163
165 {
166 if (this->varForceUpdate()->getValue())
167 {
168 return true;
169 }
170
171 //check input fields
172 bool modified = false;
173 for(auto f_in : fields_input)
174 {
175 modified |= f_in->isModified();
176 }
177
178 //check control fields
179 for(auto var : fields_param)
180 {
181 modified |= var->isModified();
182 }
183
184 return modified;
185 }
186
187 void Module::setName(std::string name)
188 {
189 //m_module_name.setValue(name);
190 m_module_name = name;
191 }
192
194 {
195 m_node = node;
196 }
197
198 std::string Module::getName()
199 {
200 return m_module_name;
201 }
202
204 {
205 if (m_node == NULL) {
206 Log::sendMessage(Log::Error, "Parent node is not set!");
207 }
208
209 return m_node;
210 }
211
213 {
214 auto node = this->getParentNode();
215
216 if (node == NULL) return NULL;
217
218 return node->getSceneGraph();
219 }
220
222 {
223 this->varForceUpdate()->setValue(b);
224 }
225
227 {
228 return m_initialized;
229 }
230
232 {
233 return true;
234 }
235
237 {
238 }
239
240 bool Module::attachField(FBase* field, std::string name, std::string desc, bool autoDestroy)
241 {
242 field->setParent(this);
243 field->setObjectName(name);
244 field->setDescription(desc);
245 field->setAutoDestroy(autoDestroy);
246
247
248 bool ret = false;
249 auto fType = field->getFieldType();
250 switch (field->getFieldType())
251 {
253 ret = addInputField(field);
254 break;
255
257 ret = addInputField(field);
258 break;
259
261 ret = addOutputField(field);
262 break;
263
265 ret = addParameter(field);
266 break;
267
268 default:
269 break;
270 }
271
272 if (!ret)
273 {
274 Log::sendMessage(Log::Error, std::string("The field ") + name + std::string(" already exists!"));
275 }
276 return ret;
277 }
278
279}
FieldTypeEnum getFieldType()
Definition FBase.cpp:300
void setParent(OBase *owner)
Definition FBase.cpp:36
void setObjectName(std::string name)
Definition FBase.h:58
void setAutoDestroy(bool autoDestroy)
Definition FBase.cpp:155
void setDescription(std::string description)
Definition FBase.h:59
@ Error
Error information while executing something.
Definition Log.h:50
static void sendMessage(MessageType type, const std::string &text)
Add a new message to log.
Definition Log.cpp:41
virtual void updateImpl()
Definition Module.cpp:236
Node * m_node
Definition Module.h:119
SceneGraph * getSceneGraph()
Definition Module.cpp:212
void setName(std::string name)
Definition Module.cpp:187
bool isInitialized()
Definition Module.cpp:226
virtual bool validateOutputs()
Definition Module.cpp:159
~Module(void) override
Definition Module.cpp:15
virtual void setParentNode(Node *node)
Set the parent node.
Definition Module.cpp:193
Node * getParentNode()
Definition Module.cpp:203
virtual void preprocess()
Definition Module.h:102
bool isOutputCompete()
Definition Module.cpp:127
void setUpdateAlways(bool b)
Set the update strategy for the module.
Definition Module.cpp:221
void update()
Definition Module.cpp:47
virtual void postprocess()
Definition Module.h:104
bool initialize()
Definition Module.cpp:36
virtual bool initializeImpl()
Definition Module.cpp:231
bool isInputComplete()
Check the completeness of input fields.
Definition Module.cpp:104
std::string getName() override
Definition Module.cpp:198
virtual void updateStarted()
Two functions called at the beginning and end of update() used for debug.
Definition Module.cpp:149
Module(std::string name="default")
Definition Module.cpp:7
virtual bool requireUpdate()
Definition Module.cpp:164
std::string m_module_name
Definition Module.h:120
virtual void updateEnded()
Definition Module.cpp:154
virtual bool validateInputs()
Definition Module.cpp:99
bool attachField(FBase *field, std::string name, std::string desc, bool autoDestroy=true) override
Attach a field to Base.
Definition Module.cpp:240
bool m_initialized
Definition Module.h:121
SceneGraph * getSceneGraph()
Definition Node.cpp:108
std::vector< FBase * > fields_param
Definition OBase.h:211
bool addParameter(FBase *field)
Definition OBase.cpp:390
std::vector< FBase * > fields_output
Definition OBase.h:210
std::vector< FBase * > fields_input
Definition OBase.h:209
bool addOutputField(FBase *field)
Definition OBase.cpp:319
bool addInputField(FBase *field)
Definition OBase.cpp:276
bool isValidationInfoPrintable()
Definition SceneGraph.h:64
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
@ In
Definition FBase.h:31
@ Param
Definition FBase.h:34
@ Out
Definition FBase.h:32
@ IO
Definition FBase.h:33