From 5ed4e96a1dcb2c2ca80f333cb454e18eaa99e6d3 Mon Sep 17 00:00:00 2001 From: James Alliban Date: Sat, 11 Jan 2014 19:50:28 +0000 Subject: [PATCH] New graph type in place - Separate Body Graph --- of/Active Tripod/Active_Tripod.vcxproj | 2 + .../Active_Tripod.vcxproj.filters | 6 + of/Active Tripod/bin/Active_Tripod.lib | Bin 78700 -> 78700 bytes .../data/GUI/GRAPH GLOBALguiPagesettings.xml | 6 +- ...ARATE BODY GRAPH DESIGNguiPagesettings.xml | 70 +++++++ of/Active Tripod/src/data/DataManager.cpp | 9 +- of/Active Tripod/src/gui/GUI.cpp | 35 +++- of/Active Tripod/src/gui/GUI.h | 1 + of/Active Tripod/src/testApp.cpp | 4 +- of/Active Tripod/src/visual/Scene.cpp | 3 + of/Active Tripod/src/visual/Scene.h | 3 + .../src/visual/graph/AbstractGraph.cpp | 1 - .../src/visual/graph/SeparateBodyGraph.cpp | 171 ++++++++++++++++++ .../src/visual/graph/SeparateBodyGraph.h | 24 +++ 14 files changed, 320 insertions(+), 15 deletions(-) create mode 100644 of/Active Tripod/bin/data/GUI/SEPARATE BODY GRAPH DESIGNguiPagesettings.xml create mode 100644 of/Active Tripod/src/visual/graph/SeparateBodyGraph.cpp create mode 100644 of/Active Tripod/src/visual/graph/SeparateBodyGraph.h diff --git a/of/Active Tripod/Active_Tripod.vcxproj b/of/Active Tripod/Active_Tripod.vcxproj index 22e3020..253b3d6 100644 --- a/of/Active Tripod/Active_Tripod.vcxproj +++ b/of/Active Tripod/Active_Tripod.vcxproj @@ -112,6 +112,7 @@ + @@ -190,6 +191,7 @@ + diff --git a/of/Active Tripod/Active_Tripod.vcxproj.filters b/of/Active Tripod/Active_Tripod.vcxproj.filters index 6a65e08..5d435a6 100644 --- a/of/Active Tripod/Active_Tripod.vcxproj.filters +++ b/of/Active Tripod/Active_Tripod.vcxproj.filters @@ -76,6 +76,9 @@ src\visual\graph + + src\visual\graph + @@ -374,6 +377,9 @@ src\visual\graph + + src\visual\graph + diff --git a/of/Active Tripod/bin/Active_Tripod.lib b/of/Active Tripod/bin/Active_Tripod.lib index d300a2151735386f38ec5974b9775e6a7bdb6c99..84da7584136da718faa53321b08661a5edb3cf77 100644 GIT binary patch delta 7248 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 delta 7248 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 YOuBnwwA@!K%50Ln-e8b5b>g!B0s%l 2 Bar graph - 1 + 0 2 @@ -10,8 +10,8 @@ 2 - Line fade graph - 0 + Separate Body graph + 1 6 diff --git a/of/Active Tripod/bin/data/GUI/SEPARATE BODY GRAPH DESIGNguiPagesettings.xml b/of/Active Tripod/bin/data/GUI/SEPARATE BODY GRAPH DESIGNguiPagesettings.xml new file mode 100644 index 0000000..7b88529 --- /dev/null +++ b/of/Active Tripod/bin/data/GUI/SEPARATE BODY GRAPH DESIGNguiPagesettings.xml @@ -0,0 +1,70 @@ + + 2 + Toggle Draw Lines + 1 + + + 4 + Graph Item X Gap + 6.480263233 + + + 4 + Line width + 5.190789700 + + + 4 + Graph Height Max + 325.000000000 + + + 4 + Graph bottom end (percent) + 0.875000000 + + + 4 + Data send speed (seconds) + 3.045723677 + + + 4 + Data0 red + 0.000000000 + + + 4 + Data0 green + 72.138153076 + + + 4 + Data0 blue + 164.407897949 + + + 4 + Data0 alpha + 179.506576538 + + + 4 + Data1 red + 187.894729614 + + + 4 + Data1 green + 46.134868622 + + + 4 + Data1 blue + 32.713817596 + + + 4 + Data1 alpha + 187.894729614 + diff --git a/of/Active Tripod/src/data/DataManager.cpp b/of/Active Tripod/src/data/DataManager.cpp index 3181095..9209d60 100644 --- a/of/Active Tripod/src/data/DataManager.cpp +++ b/of/Active Tripod/src/data/DataManager.cpp @@ -47,7 +47,6 @@ void DataManager::setupSpacebrew() void DataManager::update() { - if (isDataSimulated) { if (ofGetFrameNum() % (int)simulationSpeed == 0) @@ -118,22 +117,22 @@ void DataManager::onMessage( Spacebrew::Message & m ) { if (data[i].substr(0, 5) == "info:") { - printf("- - info = %s\n", data[i].substr(5, -1).c_str()); + //printf("- - info = %s\n", data[i].substr(5, -1).c_str()); dataObject.info = data[i].substr(5, -1).c_str(); } if (data[i].substr(0, 6) == "value:") { - printf("- - value = %s\n", data[i].substr(6, -1).c_str()); + //printf("- - value = %s\n", data[i].substr(6, -1).c_str()); dataObject.value = ofToFloat(data[i].substr(6, -1).c_str()); } if (data[i].substr(0, 4) == "min:") { - printf("- - min = %s\n", data[i].substr(4, -1).c_str()); + //printf("- - min = %s\n", data[i].substr(4, -1).c_str()); dataObject.min = ofToFloat(data[i].substr(4, -1).c_str()); } if (data[i].substr(0, 4) == "max:") { - printf("- - max = %s\n", data[i].substr(4, -1).c_str()); + //printf("- - max = %s\n", data[i].substr(4, -1).c_str()); dataObject.max = ofToFloat(data[i].substr(4, -1).c_str()); } } diff --git a/of/Active Tripod/src/gui/GUI.cpp b/of/Active Tripod/src/gui/GUI.cpp index a5687b1..7840194 100644 --- a/of/Active Tripod/src/gui/GUI.cpp +++ b/of/Active Tripod/src/gui/GUI.cpp @@ -21,6 +21,7 @@ void GUI::setup() addGraphGlobalGUI(); addBarGraphDesignGUI(); addBodyGraphDesignGUI(); + addSeparateBodyGraphDesignGUI(); addGraphSimulationGUI(); addBackgroundGUI(); addHUDTextGUI(); @@ -59,7 +60,7 @@ void GUI::addGraphGlobalGUI() vector graphNames; graphNames.push_back("Bar graph"); graphNames.push_back("Solid Body graph"); - graphNames.push_back("Line fade graph"); + graphNames.push_back("Separate Body graph"); gui->addRadio("Graph Selection", graphNames, OFX_UI_ORIENTATION_VERTICAL, dim*2, dim*2); @@ -127,6 +128,34 @@ void GUI::addBodyGraphDesignGUI() } +void GUI::addSeparateBodyGraphDesignGUI() +{ + string title = "SEPARATE BODY GRAPH DESIGN"; + ofxUICanvas* gui = getNewGUI(title); + + gui->addToggle("Toggle Draw Lines", &app->scene.separateBodyGraph.isDrawLines, toggleDim, toggleDim); + gui->addSlider("Graph Item X Gap", 5, 50, &app->scene.separateBodyGraph.graphItemXGap, length, dim); + gui->addSlider("Line width", 1, 50, &app->scene.separateBodyGraph.lineWidth, length, dim); + gui->addSlider("Graph Height Max", 100, 1000, &app->scene.separateBodyGraph.graphHeightMax, length, dim); + gui->addSlider("Graph bottom end (percent)", 0, 2, &app->scene.separateBodyGraph.graphEndPercent, length, dim); + gui->addSlider("Data send speed (seconds)", 0.1, 20, &app->scene.separateBodyGraph.sendDataSpeed, length, dim); + + gui->addSpacer(length, 1); + gui->addSlider("Data0 red", 0, 255, &app->scene.separateBodyGraph.col0[0], length, dim); + gui->addSlider("Data0 green", 0, 255, &app->scene.separateBodyGraph.col0[1], length, dim); + gui->addSlider("Data0 blue", 0, 255, &app->scene.separateBodyGraph.col0[2], length, dim); + gui->addSlider("Data0 alpha", 0, 255, &app->scene.separateBodyGraph.col0[3], length, dim); + + gui->addSpacer(length, 1); + gui->addSlider("Data1 red", 0, 255, &app->scene.separateBodyGraph.col1[0], length, dim); + gui->addSlider("Data1 green", 0, 255, &app->scene.separateBodyGraph.col1[1], length, dim); + gui->addSlider("Data1 blue", 0, 255, &app->scene.separateBodyGraph.col1[2], length, dim); + gui->addSlider("Data1 alpha", 0, 255, &app->scene.separateBodyGraph.col1[3], length, dim); + + finaliseCanvas(gui, true); +} + + void GUI::addGraphSimulationGUI() { string title = "SIMULATION"; @@ -243,10 +272,10 @@ void GUI::graphGlobalGUIEvent(ofxUIEventArgs &e) printf("------------------- Solid Body graph\n"); if (toggle->getValue()) app->scene.activeGraph = &app->scene.bodyGraph; } - else if (name == "Line fade graph") + else if (name == "Separate Body graph") { printf("------------------- Line fade graph\n"); - //app->scene.activeGraph = &app->scene.lineGraph; + if (toggle->getValue()) app->scene.activeGraph = &app->scene.separateBodyGraph; } } diff --git a/of/Active Tripod/src/gui/GUI.h b/of/Active Tripod/src/gui/GUI.h index cacd433..3a14c7e 100644 --- a/of/Active Tripod/src/gui/GUI.h +++ b/of/Active Tripod/src/gui/GUI.h @@ -23,6 +23,7 @@ public: void addGraphGlobalGUI(); void addBarGraphDesignGUI(); void addBodyGraphDesignGUI(); + void addSeparateBodyGraphDesignGUI(); void addGraphSimulationGUI(); void addBackgroundGUI(); void addHUDTextGUI(); diff --git a/of/Active Tripod/src/testApp.cpp b/of/Active Tripod/src/testApp.cpp index 45a161b..2a19e9e 100644 --- a/of/Active Tripod/src/testApp.cpp +++ b/of/Active Tripod/src/testApp.cpp @@ -2,12 +2,10 @@ // TODO // ==== -// - Make system to slow down data - The screen should show 15-20 minutes worth of data -// - Make 3rd graph - separate fade // - Crosshairs in HUD // - Create graph animation system +// - make maxGraphHeight percentage instead of pixels // - Create a single config file to be loaded from online location. It will contain IP address and host name -// - Add 'clear all data' button to UI // - If min or max values change - clear graph - ask bout this // //-------------------------------------------------------------- diff --git a/of/Active Tripod/src/visual/Scene.cpp b/of/Active Tripod/src/visual/Scene.cpp index ebfb0dc..9a134ad 100644 --- a/of/Active Tripod/src/visual/Scene.cpp +++ b/of/Active Tripod/src/visual/Scene.cpp @@ -18,6 +18,7 @@ void Scene::setup() rgbShader.load("shaders/RGBShader"); barGraph.setup(); bodyGraph.setup(); + separateBodyGraph.setup(); text.loadFont("fonts/Roboto-Light.ttf", 8); } @@ -197,6 +198,7 @@ void Scene::addNewData(vector newData) { barGraph.addNewData(newData); bodyGraph.addNewData(newData); + separateBodyGraph.addNewData(newData); tlStr = newData[0].info + "\n" + ofToString(newData[0].value); trStr = newData[1].info + "\n" + ofToString(newData[1].value); @@ -215,4 +217,5 @@ void Scene::clearGraphData() { barGraph.clear(); bodyGraph.clear(); + separateBodyGraph.clear(); } \ No newline at end of file diff --git a/of/Active Tripod/src/visual/Scene.h b/of/Active Tripod/src/visual/Scene.h index 062c44c..dd91036 100644 --- a/of/Active Tripod/src/visual/Scene.h +++ b/of/Active Tripod/src/visual/Scene.h @@ -11,6 +11,7 @@ #include "ofMain.h" #include "BarGraph.h" #include "BodyGraph.h" +#include "SeparateBodyGraph.h" #include "DataManager.h" #include "ofxFTGL.h" @@ -34,6 +35,8 @@ public: BarGraph barGraph; BodyGraph bodyGraph; + SeparateBodyGraph separateBodyGraph; + ofShader rgbShader; ofVideoGrabber vidGrabber; ofImage bgImg; diff --git a/of/Active Tripod/src/visual/graph/AbstractGraph.cpp b/of/Active Tripod/src/visual/graph/AbstractGraph.cpp index 1d744e3..82bc22a 100644 --- a/of/Active Tripod/src/visual/graph/AbstractGraph.cpp +++ b/of/Active Tripod/src/visual/graph/AbstractGraph.cpp @@ -20,7 +20,6 @@ void AbstractGraph::setup() void AbstractGraph::update() { maxData = (ofGetWidth() * (AbstractGraph::maxGraphPercent - AbstractGraph::minGraphPercent)) / graphItemXGap; - printf("ofGetWidth():%i, maxData:%i, graphItemXGap:%f, screen active:%f \n", ofGetWidth(), maxData, graphItemXGap, (AbstractGraph::maxGraphPercent - AbstractGraph::minGraphPercent)); } diff --git a/of/Active Tripod/src/visual/graph/SeparateBodyGraph.cpp b/of/Active Tripod/src/visual/graph/SeparateBodyGraph.cpp new file mode 100644 index 0000000..fd72e02 --- /dev/null +++ b/of/Active Tripod/src/visual/graph/SeparateBodyGraph.cpp @@ -0,0 +1,171 @@ +// +// Created by James Alliban on 11/01/2014. +// +// + +#include "SeparateBodyGraph.h" +#include "testApp.h" + + +void SeparateBodyGraph::setup() +{ + AbstractGraph::setup(); + app = (testApp*)ofGetAppPtr(); + graphName = "SEPARATE_BODY"; +} + + +void SeparateBodyGraph::update() +{ + AbstractGraph::update(); +} + + +void SeparateBodyGraph::draw() +{ + if (app->gui.getVisible()) + { + float timePerScreenfull = (float)maxData * sendDataSpeed; + ofDrawBitmapString("Time to fill screen:" + ofToString(timePerScreenfull), 500, 150); + } + + if (publisher0Data.size() > 1) + { + //for (int i = 0; i < publisher0Data.size() - 1; i++) + //{ + // ofPushStyle(); + // ofSetColor(255, 0, 0); + // ofCircle(i * graphItemXGap, publisher0Data[i], 5); + // ofSetColor(0, 255, 0); + // ofCircle(i * graphItemXGap, publisher1Data[i], 5); + // ofPopStyle(); + //} + + + + ofMesh body0 = getMesh(publisher0Data, col0); + ofMesh body1 = getMesh(publisher1Data, col1); + + + + + float xOffset = ofGetWidth() * AbstractGraph::minGraphPercent; + float outputMin = (ofGetHeight() * 0.5) - graphHeightMax; + float outputMax = (ofGetHeight() * 0.5) + graphHeightMax; + + + // draw lines + ofPushStyle(); + ofPolyline poly0; + ofPolyline poly1; + for (int i = 0; i < publisher0Data.size() - 1; i++) + { + if (i < publisher0Data.size() - 1) + { + ofSetLineWidth(lineWidth); + poly0.addVertex(ofPoint( + i * graphItemXGap + xOffset, + ofMap(publisher0Data[i].value, publisher0Data[i].min, publisher0Data[i].max, outputMin, outputMax))); + + + poly1.addVertex(ofPoint( + i * graphItemXGap + xOffset, + ofMap(publisher1Data[i].value, publisher1Data[i].min, publisher1Data[i].max, outputMin, outputMax))); + } + } + + + + ofVec2f centroid0 = poly0.getCentroid2D(); + ofVec2f centroid1 = poly1.getCentroid2D(); + + printf("centroid0.y:%f, centroid1.y:%f\n", centroid0.y, centroid1.y); + + float av0; + float av1; + + for (int i = 0; i < poly0.size(); i++) + { + av0 += poly0[i].y; + av1 += poly1[i].y; + } + av0 /= poly0.size(); + av1 /= poly1.size(); + + printf("av0:%f, av1:%f\n", av0, av1); + + int lineAlpha = 255; + if (!isDrawLines) lineAlpha = 0; + + if (av0 < av1) + { + body0.drawFaces(); + ofSetColor(col0[0],col0[1],col0[2], lineAlpha); + poly0.draw(); + + body1.drawFaces(); + ofSetColor(col1[0],col1[1],col1[2], lineAlpha); + poly1.draw(); + } + else + { + body1.drawFaces(); + ofSetColor(col1[0],col1[1],col1[2], lineAlpha); + poly1.draw(); + + body0.drawFaces(); + ofSetColor(col0[0],col0[1],col0[2], lineAlpha); + poly0.draw(); + } + + if (isDrawLines) + { + if (av0 > av1) + { + + + } + else + { + + + } + } + + ofPopStyle(); + } +} + + +ofMesh SeparateBodyGraph::getMesh(vector publisherData, float* col) +{ + ofMesh bodyMesh; + float xOffset = ofGetWidth() * AbstractGraph::minGraphPercent; + float outputMin = (ofGetHeight() * 0.5) - graphHeightMax; + float outputMax = (ofGetHeight() * 0.5) + graphHeightMax; + + // draw main part of graph (xOffset) + bodyMesh.setMode(OF_PRIMITIVE_TRIANGLE_STRIP); + for (int i = 0; i < publisherData.size() - 1; i++) + { + bodyMesh.addVertex(ofVec3f( + i * graphItemXGap + xOffset, + ofMap(publisherData[i].value, publisherData[i].min, publisherData[i].max, outputMin, outputMax), + 0)); + bodyMesh.addVertex(ofVec3f( + i * graphItemXGap + xOffset, + ofGetHeight() * graphEndPercent, + 0)); + + bodyMesh.addColor(ofColor(col[0],col[1],col[2], col[3])); + bodyMesh.addColor(ofColor(col[0],col[1],col[2], 0)); + } + return bodyMesh; +} + + + +void SeparateBodyGraph::addNewData(vector newData) +{ + AbstractGraph::addNewData(newData); +} \ No newline at end of file diff --git a/of/Active Tripod/src/visual/graph/SeparateBodyGraph.h b/of/Active Tripod/src/visual/graph/SeparateBodyGraph.h new file mode 100644 index 0000000..21a3ebb --- /dev/null +++ b/of/Active Tripod/src/visual/graph/SeparateBodyGraph.h @@ -0,0 +1,24 @@ + +#pragma once + +#include "ofMain.h" +#include "AbstractGraph.h" + +class testApp; + +class SeparateBodyGraph : public AbstractGraph +{ +public: + void setup(); + virtual void update(); + virtual void draw(); + virtual void addNewData(vector newData); + ofMesh getMesh(vector publisherData, float* col); + + testApp *app; + + float lineWidth; + + bool isDrawLines; + float graphEndPercent; +}; \ No newline at end of file