From 4ffc5595d961917eae6eaeae8379ee52f90a8c67 Mon Sep 17 00:00:00 2001 From: Lovisa Hassler Date: Thu, 9 Jan 2020 09:59:38 +0100 Subject: [PATCH] WIP inheriting from renderablelabels --- modules/base/rendering/renderablelabels.cpp | 50 +++++++++---------- modules/base/rendering/renderablelabels.h | 1 - .../rendering/renderabledistancelabel.cpp | 49 +++++++++++++++++- .../rendering/renderabledistancelabel.h | 11 +++- modules/vislab/vislabmodule.cpp | 6 +-- 5 files changed, 84 insertions(+), 33 deletions(-) diff --git a/modules/base/rendering/renderablelabels.cpp b/modules/base/rendering/renderablelabels.cpp index d5a51afea1..ece6cfe978 100644 --- a/modules/base/rendering/renderablelabels.cpp +++ b/modules/base/rendering/renderablelabels.cpp @@ -701,31 +701,31 @@ void RenderableLabels::render(const RenderData& data, RendererTasks&) { //} } -void RenderableLabels::update(const UpdateData& data) { - - if (global::renderEngine.scene()->sceneGraphNode(_nodeLine)) { - - // Calculate distance - SceneGraphNode* nodelineNode = global::renderEngine.scene()->sceneGraphNode(_nodeLine); - RenderableNodeLine* nodeline = dynamic_cast(nodelineNode->renderable()); - double myDistance = nodeline->getDistance(); - - // format string - float scale = getUnit(Kilometer); - std::string distanceText = std::to_string(std::round(myDistance / scale)); - int pos = distanceText.find("."); - std::string subStr = distanceText.substr(pos); - distanceText.erase(pos, subStr.size()); - std::string finalText = distanceText + " " + KilometerUnit; - setLabelText(finalText); - - // Update placement of label with transformation matrix - glm::dvec3 start = global::renderEngine.scene()->sceneGraphNode(nodeline->_start)->worldPosition(); - glm::dvec3 end = global::renderEngine.scene()->sceneGraphNode(nodeline->_end)->worldPosition(); - glm::dvec3 goalPos = start + (end - start) / 2.0; - _transformationMatrix = glm::translate(glm::dmat4(1.0), goalPos); - } -} +//void RenderableLabels::update(const UpdateData& data) { +// +// if (global::renderEngine.scene()->sceneGraphNode(_nodeLine)) { +// +// // Calculate distance +// SceneGraphNode* nodelineNode = global::renderEngine.scene()->sceneGraphNode(_nodeLine); +// RenderableNodeLine* nodeline = dynamic_cast(nodelineNode->renderable()); +// double myDistance = nodeline->getDistance(); +// +// // format string +// float scale = getUnit(Kilometer); +// std::string distanceText = std::to_string(std::round(myDistance / scale)); +// int pos = distanceText.find("."); +// std::string subStr = distanceText.substr(pos); +// distanceText.erase(pos, subStr.size()); +// std::string finalText = distanceText + " " + KilometerUnit; +// setLabelText(finalText); +// +// // Update placement of label with transformation matrix +// glm::dvec3 start = global::renderEngine.scene()->sceneGraphNode(nodeline->_start)->worldPosition(); +// glm::dvec3 end = global::renderEngine.scene()->sceneGraphNode(nodeline->_end)->worldPosition(); +// glm::dvec3 goalPos = start + (end - start) / 2.0; +// _transformationMatrix = glm::translate(glm::dmat4(1.0), goalPos); +// } +//} void RenderableLabels::setLabelText(const std::string & newText) { _labelText = newText; diff --git a/modules/base/rendering/renderablelabels.h b/modules/base/rendering/renderablelabels.h index 7b97b80a98..03c7ccb0e6 100644 --- a/modules/base/rendering/renderablelabels.h +++ b/modules/base/rendering/renderablelabels.h @@ -64,7 +64,6 @@ public: bool isReady() const override; void render(const RenderData& data, RendererTasks& rendererTask) override; - void update(const UpdateData& data) override; static documentation::Documentation Documentation(); diff --git a/modules/vislab/rendering/renderabledistancelabel.cpp b/modules/vislab/rendering/renderabledistancelabel.cpp index 4e8102e84b..41244f8708 100644 --- a/modules/vislab/rendering/renderabledistancelabel.cpp +++ b/modules/vislab/rendering/renderabledistancelabel.cpp @@ -24,10 +24,55 @@ #include +#include +//#include + namespace openspace { -//RenderableDistanceLabel::RenderableDistanceLabel(const ghoul::Dictionary& dictionary) -//{ +documentation::Documentation RenderableDistanceLabel::Documentation() { + using namespace documentation; + return { + "Renderable Distance Label", + "vislab_renderable_distance_label", + { + } + }; +} + +RenderableDistanceLabel::RenderableDistanceLabel(const ghoul::Dictionary& dictionary) + : RenderableLabels(dictionary) +{ + documentation::testSpecificationAndThrow( + Documentation(), + dictionary, + "RenderableDistanceLabel" + ); +} + +//void RenderableDistanceLabel::update(const UpdateData& data) { +// +// if (global::renderEngine.scene()->sceneGraphNode(_nodeLine)) { +// +// // Calculate distance +// SceneGraphNode* nodelineNode = global::renderEngine.scene()->sceneGraphNode(_nodeLine); +// RenderableNodeLine* nodeline = dynamic_cast(nodelineNode->renderable()); +// double myDistance = nodeline->getDistance(); +// +// // format string +// float scale = getUnit(Kilometer); +// std::string distanceText = std::to_string(std::round(myDistance / scale)); +// int pos = distanceText.find("."); +// std::string subStr = distanceText.substr(pos); +// distanceText.erase(pos, subStr.size()); +// std::string finalText = distanceText + " " + KilometerUnit; +// setLabelText(finalText); +// +// // Update placement of label with transformation matrix +// glm::dvec3 start = global::renderEngine.scene()->sceneGraphNode(nodeline->_start)->worldPosition(); +// glm::dvec3 end = global::renderEngine.scene()->sceneGraphNode(nodeline->_end)->worldPosition(); +// glm::dvec3 goalPos = start + (end - start) / 2.0; +// _transformationMatrix = glm::translate(glm::dmat4(1.0), goalPos); +// } //} } // namespace openspace diff --git a/modules/vislab/rendering/renderabledistancelabel.h b/modules/vislab/rendering/renderabledistancelabel.h index 8b38cc20ef..7cb9e4fabb 100644 --- a/modules/vislab/rendering/renderabledistancelabel.h +++ b/modules/vislab/rendering/renderabledistancelabel.h @@ -26,12 +26,19 @@ #ifndef __OPENSPACE_MODULE_VISLAB___RENDERABLEDISTANCELABEL___H__ #define __OPENSPACE_MODULE_VISLAB___RENDERABLEDISTANCELABEL___H__ +#include + + namespace openspace { +namespace documentation { struct Documentation; } -class RenderableDistanceLabel { +class RenderableDistanceLabel : public RenderableLabels { public: - // RenderableDistanceLabel(const ghoul::Dictionary& dictionary); + RenderableDistanceLabel(const ghoul::Dictionary& dictionary); + + // void update(const UpdateData& data) override; + static documentation::Documentation Documentation(); private: }; diff --git a/modules/vislab/vislabmodule.cpp b/modules/vislab/vislabmodule.cpp index 6cae50809c..fcb8a19d2b 100644 --- a/modules/vislab/vislabmodule.cpp +++ b/modules/vislab/vislabmodule.cpp @@ -31,10 +31,10 @@ VisLabModule::VisLabModule() : OpenSpaceModule(Name) { } void VisLabModule::internalInitialize(const ghoul::Dictionary&) { - //auto renderableFactory = FactoryManager::ref().factory(); - //ghoul_assert(renderableFactory, "No renderable factory existed"); + auto renderableFactory = FactoryManager::ref().factory(); + ghoul_assert(renderableFactory, "No renderable factory existed"); - //renderableFactory->registerClass("RenderableDistanceLabel"); + renderableFactory->registerClass("RenderableDistanceLabel"); } } // namespace openspace