void Visitor<Reader<JSONObject>>::readFrom(const ScenarioModel& scenario) { m_obj["PluginsMetadata"] = toJsonValue(*scenario.pluginModelList); m_obj["StartTimeNodeId"] = toJsonValue(scenario.m_startTimeNodeId); m_obj["EndTimeNodeId"] = toJsonValue(scenario.m_endTimeNodeId); m_obj["StartEventId"] = toJsonValue(scenario.m_startEventId); m_obj["EndEventId"] = toJsonValue(scenario.m_endEventId); m_obj["TimeNodes"] = toJsonArray(scenario.timeNodes()); m_obj["Events"] = toJsonArray(scenario.events()); m_obj["States"] = toJsonArray(scenario.states()); m_obj["Constraints"] = toJsonArray(scenario.constraints()); }
void Visitor<Reader<DataStream>>::readFrom(const ScenarioModel& scenario) { readFrom(*scenario.pluginModelList); m_stream << scenario.m_startTimeNodeId << scenario.m_endTimeNodeId; m_stream << scenario.m_startEventId << scenario.m_endEventId; // Timenodes const auto& timenodes = scenario.timeNodes(); m_stream << (int) timenodes.size(); for(const auto& timenode : timenodes) { readFrom(*timenode); } // Events const auto& events = scenario.events(); m_stream << (int) events.size(); for(const auto& event : events) { readFrom(*event); } // States const auto& states = scenario.states(); m_stream << (int) states.size(); for(const auto& state : states) { readFrom(*state); } // Constraints const auto& constraints = scenario.constraints(); m_stream << (int) constraints.size(); for(const auto& constraint : constraints) { readFrom(*constraint); } insertDelimiter(); }
void updatePositions( ScenarioModel& scenario, const QVector<id_type<TimeNodeModel> >& translatedTimeNodes, const TimeValue& deltaTime, ProcessScaleMethod&& scaleMethod) { for (const auto& timeNode_id : translatedTimeNodes) { auto& timeNode = scenario.timeNode(timeNode_id); timeNode.setDate(timeNode.date() + deltaTime); for (const auto& event : timeNode.events()) { scenario.event(event).setDate(timeNode.date()); } } for(const auto& constraint : scenario.constraints()) { const auto& startDate = scenario.event(scenario.state(constraint->startState()).eventId()).date(); const auto& endDate = scenario.event(scenario.state(constraint->endState()).eventId()).date(); TimeValue newDuration = endDate - startDate; if (!(constraint->startDate() - startDate).isZero()) { constraint->setStartDate(startDate); } if(!(constraint->defaultDuration() - newDuration).isZero()) { ConstraintModel::Algorithms::setDurationInBounds(*constraint, newDuration); for(const auto& process : constraint->processes()) { scaleMethod(process, newDuration); } } emit scenario.constraintMoved(constraint->id()); } }