openscad/src/parameter/parameterextractor.cpp
2016-09-25 06:01:28 -04:00

63 lines
1.7 KiB
C++

#include "parameterextractor.h"
#include "modcontext.h"
ParameterExtractor::ParameterExtractor()
{
resetPara = false;
}
ParameterExtractor::~ParameterExtractor()
{
}
void ParameterExtractor::applyParameters(FileModule *fileModule)
{
if (!fileModule) return;
for (auto &assignment : fileModule->scope.assignments) {
auto entry = entries.find(assignment.name);
if (entry != entries.end()) {
entry->second->applyParameter(assignment);
entry->second->set = false;
}
}
}
void ParameterExtractor::setParameters(const FileModule* module)
{
if (!module) return;
ModuleContext ctx;
for (auto &assignment : module->scope.assignments) {
const Annotation *param = assignment.annotation("Parameter");
if (!param) continue;
const ValuePtr defaultValue = assignment.expr->evaluate(&ctx);
if (defaultValue->type() == Value::UNDEFINED) continue;
ParameterObject *entryObject = new ParameterObject();
entryObject->setAssignment(&ctx, &assignment, defaultValue);
//check whether object exist or not previously
if (entries.find(assignment.name) == entries.end() || resetPara) {
//if object doen't exist
//or we have reset Parameters then add new entry
entries[assignment.name] = entryObject;
} else {
//if entry object is already exist we check if its modified
//or not
if (*entryObject == *entries[assignment.name]) {
//if entry is not modified then we don't add new entry
entryObject = entries[assignment.name];
} else {
//if entry is modified then we add new entry
entries[assignment.name] = entryObject;
}
}
entryObject->set = true;
}
connectWidget();
this->resetPara = false;
}