diff --git a/modules/vislab/CMakeLists.txt b/modules/vislab/CMakeLists.txt index 6b77ef5098..1e75a257b2 100644 --- a/modules/vislab/CMakeLists.txt +++ b/modules/vislab/CMakeLists.txt @@ -38,4 +38,4 @@ create_new_module( "VisLab" vislab_module ${HEADER_FILES} ${SOURCE_FILES} -) \ No newline at end of file +) diff --git a/modules/vislab/rendering/renderabledistancelabel.cpp b/modules/vislab/rendering/renderabledistancelabel.cpp index 03147ac090..3ff5082758 100644 --- a/modules/vislab/rendering/renderabledistancelabel.cpp +++ b/modules/vislab/rendering/renderabledistancelabel.cpp @@ -24,6 +24,7 @@ #include +#include #include #include #include @@ -63,7 +64,7 @@ documentation::Documentation RenderableDistanceLabel::Documentation() { RenderableDistanceLabel::RenderableDistanceLabel(const ghoul::Dictionary& dictionary) : RenderableLabels(dictionary) - , _nodeLine(NodeLineInfo) + , _nodelineId(NodeLineInfo) { documentation::testSpecificationAndThrow( Documentation(), @@ -72,21 +73,28 @@ RenderableDistanceLabel::RenderableDistanceLabel(const ghoul::Dictionary& dictio ); if (dictionary.hasKey(NodeLineInfo.identifier)) { - _nodeLine = dictionary.value(NodeLineInfo.identifier); - addProperty(_nodeLine); + _nodelineId = dictionary.value(NodeLineInfo.identifier); + addProperty(_nodelineId); } } void RenderableDistanceLabel::update(const UpdateData& data) { - if (global::renderEngine.scene()->sceneGraphNode(_nodeLine)) { + SceneGraphNode* nodelineNode = global::renderEngine.scene()->sceneGraphNode(_nodelineId); + + if (nodelineNode && !_errorThrown) { // Calculate distance - SceneGraphNode* nodelineNode = global::renderEngine.scene()->sceneGraphNode(_nodeLine); RenderableNodeLine* nodeline = dynamic_cast(nodelineNode->renderable()); + if (!nodeline) { + LERROR("Expected renderable to be of type 'RenderableNodeLine'"); + _errorThrown = true; + return; + } + double myDistance = nodeline->getDistance(); - // format string + // Format string float scale = getUnit(Kilometer); std::string distanceText = std::to_string(std::round(myDistance / scale)); int pos = distanceText.find("."); @@ -96,11 +104,15 @@ void RenderableDistanceLabel::update(const UpdateData& data) { 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 start = global::renderEngine.scene()->sceneGraphNode(nodeline->getStart())->worldPosition(); + glm::dvec3 end = global::renderEngine.scene()->sceneGraphNode(nodeline->getEnd())->worldPosition(); glm::dvec3 goalPos = start + (end - start) / 2.0; _transformationMatrix = glm::translate(glm::dmat4(1.0), goalPos); } + else if (!_errorThrown) { + LERROR(fmt::format("There is no scenegraph node with id {}", _nodelineId)); + _errorThrown = true; + } } } // namespace openspace diff --git a/modules/vislab/rendering/renderabledistancelabel.h b/modules/vislab/rendering/renderabledistancelabel.h index 65a34a6525..d6eee298f4 100644 --- a/modules/vislab/rendering/renderabledistancelabel.h +++ b/modules/vislab/rendering/renderabledistancelabel.h @@ -39,13 +39,10 @@ public: void update(const UpdateData& data) override; static documentation::Documentation Documentation(); - properties::StringProperty _nodeLine; - -private: + properties::StringProperty _nodelineId; + bool _errorThrown = false; }; } // namespace openspace #endif // __OPENSPACE_MODULE_VISLAB___RENDERABLEDISTANCELABEL___H__ - - diff --git a/modules/vislab/vislabmodule.cpp b/modules/vislab/vislabmodule.cpp index fcb8a19d2b..5c35c536bb 100644 --- a/modules/vislab/vislabmodule.cpp +++ b/modules/vislab/vislabmodule.cpp @@ -25,7 +25,6 @@ #include namespace openspace { -constexpr const char* _loggerCat = "VisLab Module"; VisLabModule::VisLabModule() : OpenSpaceModule(Name) { }