Skip to content

Commit

Permalink
CSV based 3d visualizer.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Nov 2, 2016
1 parent 13ca3e5 commit 174499f
Show file tree
Hide file tree
Showing 14 changed files with 468 additions and 224 deletions.
31 changes: 19 additions & 12 deletions OMEdit/OMEditGUI/Animation/AnimationUtil.h
Expand Up @@ -36,6 +36,9 @@
#ifndef ANIMATIONUTIL_H
#define ANIMATIONUTIL_H

#include <QString>
#include <QRegExp>

#include <sys/stat.h>
#include <string>

Expand All @@ -48,7 +51,9 @@ enum class VisType
FMU = 1,
FMU_REMOTE = 2,
MAT = 3,
MAT_REMOTE = 4
MAT_REMOTE = 4,
CSV = 5,
CSV_REMOTE = 6
};

/*!
Expand All @@ -69,23 +74,25 @@ inline bool isMAT(const std::string& fileIn){
return (mat != std::string::npos);
}

/*!
* \brief isCSV
* checks of the file is of type csv
*/
inline bool isCSV(const std::string& fileIn){
std::size_t csv = fileIn.find(".csv");
return (csv != std::string::npos);
}

/*!
* \brief assembleXMLFileName
* constructs the name of the corresponding xml file
*/
inline std::string assembleXMLFileName(const std::string& modelFile, const std::string& path){
int signsOff(0);
if (isFMU(modelFile))
signsOff = 4;
else if (isMAT(modelFile))
signsOff = 8;
else{
// todo: Handle this case.
}
// Cut off prefix [fmu|mat]
std::string fileName = modelFile.substr(0, modelFile.length() - signsOff);
QString fileName = QString(modelFile.c_str());
QRegExp fileTypeRegExp("(.fmu|.mat|.csv|_res.mat|_res.csv)");
fileName.remove(fileTypeRegExp);
// Construct XML file name
std::string xmlFileName = path + fileName + "_visual.xml";
std::string xmlFileName = path + fileName.toStdString() + "_visual.xml";
return xmlFileName;
}

Expand Down
6 changes: 5 additions & 1 deletion OMEdit/OMEditGUI/Animation/AnimationWindow.cpp
Expand Up @@ -252,12 +252,16 @@ void AnimationWindow::loadVisualization()
visType = VisType::FMU;
} else if (isMAT(mFileName)) {
visType = VisType::MAT;
} else if (isCSV(mFileName)) {
visType = VisType::CSV;
} else {
std::cout<<"unknown visualization type. "<<std::endl;
}
//init visualizer
if (visType == VisType::MAT) {
mpVisualizer = new VisualizerMAT(mFileName, mPathName);
} else if (visType == VisType::CSV) {
mpVisualizer = new VisualizerCSV(mFileName, mPathName);
} else {
std::cout<<"could not init "<<mPathName<<mFileName<<std::endl;
}
Expand Down Expand Up @@ -285,7 +289,7 @@ void AnimationWindow::loadVisualization()
void AnimationWindow::chooseAnimationFileSlotFunction()
{
QString fileName = StringHandler::getOpenFileName(this, QString("%1 - %2").arg(Helper::applicationName).arg(Helper::chooseFile),
NULL, Helper::matFileTypes, NULL);
NULL, Helper::visualizationFileTypes, NULL);
if (fileName.isEmpty()) {
return;
}
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Animation/AnimationWindow.h
Expand Up @@ -40,6 +40,7 @@
#include "OMPlot.h"
#include "Visualizer.h"
#include "VisualizerMAT.h"
#include "VisualizerCSV.h"

#include <iostream>
#include <string>
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Animation/Shapes.h
Expand Up @@ -37,6 +37,7 @@
#include <iostream>

#include "util/read_matlab4.h"
#include "util/read_csv.h"
#include "rapidxml.hpp"
//#include "fmilib.h"
#include <osg/Vec3f>
Expand Down
64 changes: 32 additions & 32 deletions OMEdit/OMEditGUI/Animation/Visualizer.cpp
Expand Up @@ -224,71 +224,71 @@ void OMVisualBase::appendVisVariable(const rapidxml::xml_node<>* node, std::vect

VisualizerAbstract::VisualizerAbstract()
: _visType(VisType::NONE),
_baseData(nullptr),
_viewerStuff(nullptr),
_nodeUpdater(nullptr)
mpOMVisualBase(nullptr),
mpOMVisScene(nullptr),
mpUpdateVisitor(nullptr)
{
_timeManager = new TimeManager(0.0, 0.0, 1.0, 0.0, 0.1, 0.0, 1.0);
mpTimeManager = new TimeManager(0.0, 0.0, 1.0, 0.0, 0.1, 0.0, 1.0);
}

VisualizerAbstract::VisualizerAbstract(const std::string& modelFile, const std::string& path, const VisType visType)
: _visType(visType),
_baseData(nullptr),
_viewerStuff(new OMVisScene()),
_nodeUpdater(new UpdateVisitor()),
_timeManager(new TimeManager(0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 100.0))
mpOMVisualBase(nullptr),
mpOMVisScene(new OMVisScene()),
mpUpdateVisitor(new UpdateVisitor()),
mpTimeManager(new TimeManager(0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 100.0))
{
_baseData = new OMVisualBase(modelFile, path);
_viewerStuff->getScene().setPath(path);
mpOMVisualBase = new OMVisualBase(modelFile, path);
mpOMVisScene->getScene().setPath(path);
}

void VisualizerAbstract::initData()
{
// In case of reloading, we need to make sure, that we have empty members.
_baseData->clearXMLDoc();
mpOMVisualBase->clearXMLDoc();
// Initialize XML file and get visAttributes.
_baseData->initXMLDoc();
_baseData->initVisObjects();
mpOMVisualBase->initXMLDoc();
mpOMVisualBase->initVisObjects();
}

void VisualizerAbstract::initVisualization()
{
initializeVisAttributes(_timeManager->getStartTime());
_timeManager->setVisTime(_timeManager->getStartTime());
_timeManager->setRealTimeFactor(0.0);
_timeManager->setPause(true);
initializeVisAttributes(mpTimeManager->getStartTime());
mpTimeManager->setVisTime(mpTimeManager->getStartTime());
mpTimeManager->setRealTimeFactor(0.0);
mpTimeManager->setPause(true);
}

TimeManager* VisualizerAbstract::getTimeManager() const
{
return _timeManager;
return mpTimeManager;
}

void VisualizerAbstract::sceneUpdate()
{
//measure realtime
_timeManager->updateTick();
mpTimeManager->updateTick();
//update scene and set next time step
if (!_timeManager->isPaused())
if (!mpTimeManager->isPaused())
{
updateScene(_timeManager->getVisTime());
double newTime = _timeManager->getVisTime() + (_timeManager->getHVisual()*_timeManager->getSpeedUp());
if (newTime <= _timeManager->getEndTime())
updateScene(mpTimeManager->getVisTime());
double newTime = mpTimeManager->getVisTime() + (mpTimeManager->getHVisual()*mpTimeManager->getSpeedUp());
if (newTime <= mpTimeManager->getEndTime())
{
_timeManager->setVisTime(newTime);
mpTimeManager->setVisTime(newTime);
}
//finish animation with pause when endtime is reached
else
{
_timeManager->setPause(true);
mpTimeManager->setPause(true);
}
}
}

void VisualizerAbstract::setUpScene()
{
// Build scene graph.
_viewerStuff->getScene().setUpScene(_baseData->_shapes);
mpOMVisScene->getScene().setUpScene(mpOMVisualBase->_shapes);
}

VisType VisualizerAbstract::getVisType() const
Expand All @@ -298,34 +298,34 @@ VisType VisualizerAbstract::getVisType() const

OMVisualBase* VisualizerAbstract::getBaseData() const
{
return _baseData;
return mpOMVisualBase;
}



OMVisScene* VisualizerAbstract::getOMVisScene() const
{
return _viewerStuff;
return mpOMVisScene;
}

std::string VisualizerAbstract::getModelFile() const
{
return _baseData->getModelFile();
return mpOMVisualBase->getModelFile();
}

void VisualizerAbstract::startVisualization()
{
if (_timeManager->getVisTime() < _timeManager->getEndTime() - 1.e-6)
if (mpTimeManager->getVisTime() < mpTimeManager->getEndTime() - 1.e-6)
{
_timeManager->setPause(false);
mpTimeManager->setPause(false);
}
else
std::cout<<"There is nothing left to visualize. Initialize the model first."<<std::endl;
}

void VisualizerAbstract::pauseVisualization()
{
_timeManager->setPause(true);
mpTimeManager->setPause(true);
}


Expand Down

0 comments on commit 174499f

Please sign in to comment.