From e8cbe21373cc9b0c5e5d25f1352a0c9fe42fd5cc Mon Sep 17 00:00:00 2001 From: Mathias Paulin <mathias.paulin@irit.fr> Date: Fri, 25 Feb 2022 11:33:01 +0100 Subject: [PATCH] [librender] correct management of node metadata (e.g. position given by the editor) --- .../include/nodes/internal/NodeDataModel.hpp | 2 + .../Gui/NodeEditor/src/FlowScene.cpp | 7 + .../RenderGraphEditor/NodeAdapterModel.hpp | 6 + .../RenderGraphEditorView.cpp | 10 ++ src/libRender/RadiumNBR/NodeGraph/Node.cpp | 6 + src/libRender/RadiumNBR/NodeGraph/Node.hpp | 5 +- .../RenderGraphs/RadiumForwardRenderer.flow | 166 +++++++++++------- 7 files changed, 133 insertions(+), 69 deletions(-) diff --git a/src/libRender/RadiumNBR/Gui/NodeEditor/include/nodes/internal/NodeDataModel.hpp b/src/libRender/RadiumNBR/Gui/NodeEditor/include/nodes/internal/NodeDataModel.hpp index 9e2f887..ff67259 100644 --- a/src/libRender/RadiumNBR/Gui/NodeEditor/include/nodes/internal/NodeDataModel.hpp +++ b/src/libRender/RadiumNBR/Gui/NodeEditor/include/nodes/internal/NodeDataModel.hpp @@ -68,6 +68,8 @@ public: virtual void updateState() {} + virtual void addMetaData(QJsonObject&) {} + public: QJsonObject diff --git a/src/libRender/RadiumNBR/Gui/NodeEditor/src/FlowScene.cpp b/src/libRender/RadiumNBR/Gui/NodeEditor/src/FlowScene.cpp index d524323..c57d7b6 100644 --- a/src/libRender/RadiumNBR/Gui/NodeEditor/src/FlowScene.cpp +++ b/src/libRender/RadiumNBR/Gui/NodeEditor/src/FlowScene.cpp @@ -438,6 +438,13 @@ setNodePosition(Node& node, const QPointF& pos) const { node.nodeGraphicsObject().setPos(pos); node.nodeGraphicsObject().moveConnections(); + + QJsonObject obj; + obj["x"] = node.nodeGraphicsObject().pos().x(); + obj["y"] = node.nodeGraphicsObject().pos().y(); + QJsonObject nodeJson; + nodeJson["position"] = obj; + node.nodeDataModel()->addMetaData(nodeJson); } diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp index 6fba0eb..132e2f3 100644 --- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp +++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp @@ -79,6 +79,12 @@ class NodeAdapterModel : public QtNodes::NodeDataModel checkConnections(); } + void addMetaData(QJsonObject& json) override { + nlohmann::json data; + NodeDataModelTools::QJsonObjectToNlohmannObject(json, data); + m_node->addJsonMetaData(data); + } + private: QtNodes::NodeDataType IOToDataType( size_t hashType, const std::string& ioName ) const { return QtNodes::NodeDataType{ std::to_string( hashType ).c_str(), ioName.c_str() }; diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp index 26334cb..0dbded3 100644 --- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp +++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp @@ -5,6 +5,7 @@ #include <nodes/ConnectionStyle> #include <nodes/NodeData> +#include <nodes/Node> #include <RadiumNBR/NodeGraph/RenderGraph.hpp> @@ -108,6 +109,15 @@ void RenderGraphEditorView::connectAll() { std::cout << "QtNodes::FlowScene::connectionDeleted\n"; emit needUpdate(); } ) ); + connections.push_back( + QObject::connect(scene, &QtNodes::FlowScene::nodeMoved, [](QtNodes::Node &n, const QPointF& pos) { + QJsonObject obj; + obj["x"] = n.nodeGraphicsObject().pos().x(); + obj["y"] = n.nodeGraphicsObject().pos().y(); + QJsonObject nodeJson; + nodeJson["position"] = obj; + n.nodeDataModel()->addMetaData(nodeJson); + } ) ); } void RenderGraphEditorView::setGraph( RenderGraph* rg ) { diff --git a/src/libRender/RadiumNBR/NodeGraph/Node.cpp b/src/libRender/RadiumNBR/NodeGraph/Node.cpp index b1385d0..b3749e0 100644 --- a/src/libRender/RadiumNBR/NodeGraph/Node.cpp +++ b/src/libRender/RadiumNBR/NodeGraph/Node.cpp @@ -102,3 +102,9 @@ void Node::toJson( nlohmann::json& data ) const { { std::cout << "\t" << key << " : " << value << "\n"; } */ } + +void Node::addJsonMetaData(const nlohmann::json& data ) { + for ( auto& [key, value] : data.items() ) { + m_extraJsonData[key] = value; + } +} diff --git a/src/libRender/RadiumNBR/NodeGraph/Node.hpp b/src/libRender/RadiumNBR/NodeGraph/Node.hpp index ef2718e..112a4ef 100644 --- a/src/libRender/RadiumNBR/NodeGraph/Node.hpp +++ b/src/libRender/RadiumNBR/NodeGraph/Node.hpp @@ -98,8 +98,11 @@ class NodeBasedRenderer_LIBRARY_API Node /// Fill the node from its json description void fromJson( const nlohmann::json& data ); + /// Add a metadata to the node to store application specific informations (e.g. position pour l'editeur + void addJsonMetaData(const nlohmann::json& data ); + /// Give access to extra json data stored on the node by external application components - nlohmann::json& getExtraJsonData() { return m_extraJsonData; } + nlohmann::json& getJsonMetaData() { return m_extraJsonData; } /// Build a render technic per material. /// @param ro The render object to get the material from diff --git a/src/libRender/Resources/RadiumNBR/RenderGraphs/RadiumForwardRenderer.flow b/src/libRender/Resources/RadiumNBR/RenderGraphs/RadiumForwardRenderer.flow index 61ff604..68f634e 100644 --- a/src/libRender/Resources/RadiumNBR/RenderGraphs/RadiumForwardRenderer.flow +++ b/src/libRender/Resources/RadiumNBR/RenderGraphs/RadiumForwardRenderer.flow @@ -3,121 +3,127 @@ { "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", "in_index": 0, - "out_id": "{54d687ca-0921-48df-899b-02883c8c9650}", + "out_id": "{16dc911c-bf8a-4e45-a5c7-6ea14a4c0044}", "out_index": 0 }, { "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", "in_index": 1, - "out_id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", + "out_id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "out_index": 0 }, { "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", "in_index": 2, - "out_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", - "out_index": 1 + "out_id": "{16dc911c-bf8a-4e45-a5c7-6ea14a4c0044}", + "out_index": 0 }, { "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", "in_index": 3, - "out_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "out_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "out_index": 1 }, { "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", "in_index": 4, - "out_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "out_id": "{f9850218-681e-4cad-8941-b59377701b85}", + "out_index": 1 + }, + { + "in_id": "{aa0f14a1-bb34-43a6-a11d-5b88404d254d}", + "in_index": 5, + "out_id": "{f9850218-681e-4cad-8941-b59377701b85}", "out_index": 2 }, { - "in_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "in_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "in_index": 0, "out_id": "{d07939d8-46d5-4d48-90fa-4ab2a4eebf30}", "out_index": 0 }, { - "in_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "in_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "in_index": 1, "out_id": "{6ceda554-f6d1-4cf0-a36d-e811fc0ad3f1}", "out_index": 0 }, { - "in_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "in_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "in_index": 2, "out_id": "{c6d4682c-2a02-467a-9c5c-5511b63b17ba}", "out_index": 0 }, { - "in_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "in_id": "{c3050daf-8625-4976-a6f9-e8d8ee9389ca}", "in_index": 0, - "out_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "out_id": "{0acab8a1-614a-47ae-8659-08622032230f}", "out_index": 0 }, { - "in_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "in_id": "{f9850218-681e-4cad-8941-b59377701b85}", + "in_index": 0, + "out_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", + "out_index": 0 + }, + { + "in_id": "{f9850218-681e-4cad-8941-b59377701b85}", "in_index": 1, - "out_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "out_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "out_index": 1 }, { - "in_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "in_id": "{f9850218-681e-4cad-8941-b59377701b85}", "in_index": 2, - "out_id": "{46bb5a05-2255-41e4-a6c1-38b5d23de1a8}", + "out_id": "{faa78a3d-ccc1-4ec0-ad94-107dca987185}", "out_index": 0 }, { - "in_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "in_id": "{f9850218-681e-4cad-8941-b59377701b85}", "in_index": 3, "out_id": "{6ceda554-f6d1-4cf0-a36d-e811fc0ad3f1}", "out_index": 0 }, { - "in_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "in_id": "{f9850218-681e-4cad-8941-b59377701b85}", "in_index": 4, "out_id": "{c6d4682c-2a02-467a-9c5c-5511b63b17ba}", "out_index": 0 }, { - "in_id": "{46bb5a05-2255-41e4-a6c1-38b5d23de1a8}", + "in_id": "{faa78a3d-ccc1-4ec0-ad94-107dca987185}", "in_index": 0, "out_id": "{d07939d8-46d5-4d48-90fa-4ab2a4eebf30}", "out_index": 0 }, { - "in_id": "{54d687ca-0921-48df-899b-02883c8c9650}", + "in_id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "in_index": 0, - "out_id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "out_id": "{c3050daf-8625-4976-a6f9-e8d8ee9389ca}", "out_index": 0 }, { - "in_id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", - "in_index": 0, - "out_id": "{5265b672-a9f5-4d7a-88ad-be9181615f33}", - "out_index": 0 - }, - { - "in_id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", + "in_id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "in_index": 1, - "out_id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "out_id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "out_index": 1 }, { - "in_id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", + "in_id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "in_index": 3, "out_id": "{d07939d8-46d5-4d48-90fa-4ab2a4eebf30}", "out_index": 0 }, { - "in_id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", + "in_id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "in_index": 4, "out_id": "{6ceda554-f6d1-4cf0-a36d-e811fc0ad3f1}", "out_index": 0 }, { - "in_id": "{5265b672-a9f5-4d7a-88ad-be9181615f33}", + "in_id": "{16dc911c-bf8a-4e45-a5c7-6ea14a4c0044}", "in_index": 0, - "out_id": "{6d109dde-cc2e-4fd3-a229-8e9eb6c80160}", + "out_id": "{f9850218-681e-4cad-8941-b59377701b85}", "out_index": 0 } ], @@ -129,8 +135,8 @@ "name": "RenderObjects" }, "position": { - "x": 48, - "y": 56.400000000000006 + "x": 10.800000190734863, + "y": 8.400001525878906 } }, { @@ -140,8 +146,8 @@ "name": "Lights" }, "position": { - "x": 55.20000000000002, - "y": 230.39999999999998 + "x": 8.40000057220459, + "y": 238.79998779296875 } }, { @@ -151,8 +157,8 @@ "name": "Cameras" }, "position": { - "x": 49.20000000000002, - "y": 125.99999999999997 + "x": 9.600000381469727, + "y": 126.0 } }, { @@ -162,68 +168,92 @@ "name": "Display Sink" }, "position": { - "x": 648.0000000000001, - "y": 29.99999999999997 + "x": 1192.800048828125, + "y": 10.800000190734863 } }, { - "id": "{f4584385-2400-4cb1-b7b1-70411ded95eb}", + "id": "{b81f15ff-c2cf-486d-b100-8d1856a33a46}", "model": { "instance": "SimpleNode4", "name": "Simple Render Pass" }, "position": { - "x": 253.2, - "y": 92.39999999999999 + "x": 212.40000915527344, + "y": 43.20000076293945 } }, { - "id": "{6dbbb7b7-e370-4dc6-8eff-33621dea9665}", + "id": "{0acab8a1-614a-47ae-8659-08622032230f}", "model": { - "instance": "TransparencyNode5", - "name": "Transparency Pass" + "instance": "ColorTextureNode5", + "name": "Color Texture" + }, + "position": { + "x": 9.600000381469727, + "y": 449.6000061035156 } }, { - "id": "{46bb5a05-2255-41e4-a6c1-38b5d23de1a8}", + "id": "{c3050daf-8625-4976-a6f9-e8d8ee9389ca}", "model": { - "filteredType": "Transparent", - "instance": "FilterROByTypeNode6", - "name": "Filter RenderObjects By Type" + "clearColor": [ + 0.40000003576278687, + 0.4862745404243469, + 0.501960813999176 + ], + "instance": "ClearColorNode6", + "name": "Clear Color Pass" + }, + "position": { + "x": 160.8000030517578, + "y": 344.3999938964844 } }, { - "id": "{54d687ca-0921-48df-899b-02883c8c9650}", + "id": "{f9850218-681e-4cad-8941-b59377701b85}", "model": { - "instance": "FXAANode7", - "name": "FXAA" + "instance": "TransparencyNode7", + "name": "Transparency Pass" + }, + "position": { + "x": 609.5999755859375, + "y": 8.400012016296387 } }, { - "id": "{f922db1f-83b5-4907-8b47-95c35f80ce38}", + "id": "{faa78a3d-ccc1-4ec0-ad94-107dca987185}", "model": { - "activated": true, - "instance": "WireframeNode8", - "name": "Wireframe Pass" + "filteredType": "Transparent", + "instance": "FilterROByTypeNode8", + "name": "Filter RenderObjects By Type" + }, + "position": { + "x": 208.80001831054688, + "y": -121.20000457763672 } }, { - "id": "{6d109dde-cc2e-4fd3-a229-8e9eb6c80160}", + "id": "{71b21c1d-4441-48de-89c0-173333aad7ca}", "model": { - "instance": "ColorTextureNode9", - "name": "Color Texture" + "activated": true, + "instance": "WireframeNode9", + "name": "Wireframe Pass" + }, + "position": { + "x": 609.5999755859375, + "y": 307.1999816894531 } }, { - "id": "{5265b672-a9f5-4d7a-88ad-be9181615f33}", + "id": "{16dc911c-bf8a-4e45-a5c7-6ea14a4c0044}", "model": { - "clearColor": [ - 0.4078431725502014, - 0.4078431725502014, - 0.4078431725502014 - ], - "instance": "ClearColorNode10", - "name": "Clear Color Pass" + "instance": "FXAANode10", + "name": "FXAA" + }, + "position": { + "x": 891.5999755859375, + "y": -60.0 } } ] -- GitLab