From 65e5b3f98b81f4163cf3b359d9e189849045424f Mon Sep 17 00:00:00 2001 From: ethomare-ilm Date: Thu, 12 Oct 2023 15:00:13 -0700 Subject: [PATCH 01/11] Fixed issue #1543 --- source/MaterialXGraphEditor/Graph.cpp | 34 +++++++++++++++++++++++++++ source/MaterialXGraphEditor/Graph.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 2b28317ee2..a89fd00c1c 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3707,6 +3707,39 @@ void Graph::searchNodePopup(bool cursor) } } +bool Graph::isPinHovered() { + ed::PinId currentPin = ed::GetHoveredPin(); + ed::PinId nullPin = 0; + return currentPin != nullPin; +} + +void Graph::addPinPopup() { + // Add a floating popup to pin when hovered + if (isPinHovered()) { + ed::Suspend(); + UiPinPtr pin = getPin(ed::GetHoveredPin()); + std::string connected = ""; + std::string value = ""; + if (pin->_connected) { + connected = "\nConnected to"; + if (pin->_name == "out") { + for (UiPinPtr connectedPins : pin->getConnections()) { + connected = connected + " " + connectedPins->_name + ","; + } + } + else { + connected = connected + " out"; + } + } + else { + value = "\nValue: " + pin->_input->getValueString(); + } + std::string const message{ "Name: " + pin->_name + "\nType: " + pin->_type + value + connected}; + ImGui::SetTooltip(message.c_str()); + ed::Resume(); + } +} + void Graph::readOnlyPopup() { if (_popup) @@ -3823,6 +3856,7 @@ void Graph::drawGraph(ImVec2 mousePos) ImGui::SetNextWindowSizeConstraints(ImVec2(250.0f, 300.0f), ImVec2(-1.0f, 500.0f)); addNodePopup(TextCursor); searchNodePopup(TextCursor); + addPinPopup(); readOnlyPopup(); ImGui::PopStyleVar(); diff --git a/source/MaterialXGraphEditor/Graph.h b/source/MaterialXGraphEditor/Graph.h index 8c76f0f68d..3ba4b001c9 100644 --- a/source/MaterialXGraphEditor/Graph.h +++ b/source/MaterialXGraphEditor/Graph.h @@ -187,6 +187,8 @@ class Graph void addNodePopup(bool cursor); void searchNodePopup(bool cursor); + bool isPinHovered(); + void addPinPopup(); bool readOnly(); void readOnlyPopup(); From 271f9e6c44fbb2c18b8cbcdcbbccc33d968dab27 Mon Sep 17 00:00:00 2001 From: ethomare-ilm Date: Fri, 13 Oct 2023 09:35:51 -0700 Subject: [PATCH 02/11] added check for nullptr and %s --- source/MaterialXGraphEditor/Graph.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index a89fd00c1c..6915201b5a 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3731,11 +3731,11 @@ void Graph::addPinPopup() { connected = connected + " out"; } } - else { + else if(pin->_input != nullptr) { value = "\nValue: " + pin->_input->getValueString(); } std::string const message{ "Name: " + pin->_name + "\nType: " + pin->_type + value + connected}; - ImGui::SetTooltip(message.c_str()); + ImGui::SetTooltip("%s", message.c_str()); ed::Resume(); } } From 38cde4967f3da043aa74f10264a8e025aef12380 Mon Sep 17 00:00:00 2001 From: ethomare-ilm Date: Fri, 13 Oct 2023 11:26:43 -0700 Subject: [PATCH 03/11] added another connection so input nodes have a link back to output --- source/MaterialXGraphEditor/Graph.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 6915201b5a..73d365fda1 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -2219,6 +2219,7 @@ std::vector Graph::createNodes(bool nodegraph) } upUiNode->outputPins[pinIndex]->addConnection(pin); + pin->addConnection(upUiNode->outputPins[pinIndex]); } pin->setConnected(true); } @@ -2284,6 +2285,7 @@ std::vector Graph::createNodes(bool nodegraph) } } upUiNode->outputPins[pinIndex]->addConnection(pin); + pin->addConnection(upUiNode->outputPins[pinIndex]); } pin->setConnected(true); } @@ -2354,6 +2356,7 @@ std::vector Graph::createNodes(bool nodegraph) } } upUiNode->outputPins[pinIndex]->addConnection(pin); + pin->addConnection(upUiNode->outputPins[pinIndex]); } } @@ -3722,13 +3725,8 @@ void Graph::addPinPopup() { std::string value = ""; if (pin->_connected) { connected = "\nConnected to"; - if (pin->_name == "out") { - for (UiPinPtr connectedPins : pin->getConnections()) { - connected = connected + " " + connectedPins->_name + ","; - } - } - else { - connected = connected + " out"; + for (UiPinPtr connectedPins : pin->getConnections()) { + connected = connected + " " + connectedPins->_name + ","; } } else if(pin->_input != nullptr) { From 5376225b8ce998ffa5c0b1108274380dc247675d Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 13 Oct 2023 13:54:50 -0700 Subject: [PATCH 04/11] Minor formatting updates Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/Graph.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 73d365fda1..aa614d0f82 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3716,20 +3716,25 @@ bool Graph::isPinHovered() { return currentPin != nullPin; } -void Graph::addPinPopup() { +void Graph::addPinPopup() +{ // Add a floating popup to pin when hovered - if (isPinHovered()) { + if (isPinHovered()) + { ed::Suspend(); UiPinPtr pin = getPin(ed::GetHoveredPin()); std::string connected = ""; std::string value = ""; - if (pin->_connected) { + if (pin->_connected) + { connected = "\nConnected to"; - for (UiPinPtr connectedPins : pin->getConnections()) { + for (UiPinPtr connectedPins : pin->getConnections()) + { connected = connected + " " + connectedPins->_name + ","; } } - else if(pin->_input != nullptr) { + else if(pin->_input != nullptr) + { value = "\nValue: " + pin->_input->getValueString(); } std::string const message{ "Name: " + pin->_name + "\nType: " + pin->_type + value + connected}; From cc50de0abaa0b08a0686dd5184793ea1d84b11dd Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 13 Oct 2023 13:55:36 -0700 Subject: [PATCH 05/11] Minor formatting update Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/Graph.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index aa614d0f82..9ea601dd7a 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3710,7 +3710,8 @@ void Graph::searchNodePopup(bool cursor) } } -bool Graph::isPinHovered() { +bool Graph::isPinHovered() +{ ed::PinId currentPin = ed::GetHoveredPin(); ed::PinId nullPin = 0; return currentPin != nullPin; From 011f6f36615fe7628d6df8ec3f85cd3a9fec7ab2 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 13 Oct 2023 13:58:11 -0700 Subject: [PATCH 06/11] Minor formatting updates Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/Graph.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 9ea601dd7a..56c8389b0e 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3734,11 +3734,11 @@ void Graph::addPinPopup() connected = connected + " " + connectedPins->_name + ","; } } - else if(pin->_input != nullptr) + else if (pin->_input != nullptr) { value = "\nValue: " + pin->_input->getValueString(); } - std::string const message{ "Name: " + pin->_name + "\nType: " + pin->_type + value + connected}; + const std::string message("Name: " + pin->_name + "\nType: " + pin->_type + value + connected); ImGui::SetTooltip("%s", message.c_str()); ed::Resume(); } From c0a8e9d2c730ef57939194656043c0093856a181 Mon Sep 17 00:00:00 2001 From: ethomare-ilm Date: Mon, 16 Oct 2023 09:53:25 -0700 Subject: [PATCH 07/11] fixed connections (added more adds and corresponding deletes) and added deleteConnection method --- source/MaterialXGraphEditor/Graph.cpp | 26 +++++++++++++++++++++++--- source/MaterialXGraphEditor/UiNode.h | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index ae39de7a7b..f0455baf17 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -2593,6 +2593,11 @@ void Graph::addLink(ed::PinId startPinId, ed::PinId endPinId) _frameCount = ImGui::GetFrameCount(); _renderer->setMaterialCompilation(true); + inputPin->addConnection(outputPin); + outputPin->addConnection(inputPin); + outputPin->setConnected(true); + inputPin->setConnected(true); + if (uiDownNode->getNode() || uiDownNode->getNodeGraph()) { mx::InputPtr connectingInput = nullptr; @@ -2686,6 +2691,7 @@ void Graph::addLink(ed::PinId startPinId, ed::PinId endPinId) } } + pin->setConnected(true); pin->_input->removeAttribute(mx::ValueElement::VALUE_ATTRIBUTE); connectingInput = pin->_input; @@ -2771,9 +2777,13 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) setDefaults(_graphNodes[upNode]->getInput()); } + for (UiPinPtr connect : pin->_connections) { + pin->deleteConnection(connect); + } + // Remove any output reference pin->_input->removeAttribute(mx::PortElement::OUTPUT_ATTRIBUTE); - + pin->setConnected(false); // If a value exists update the input with it @@ -2798,6 +2808,9 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) _graphNodes[downNode]->getNodeGraph()->getInput(pin->_name)->removeAttribute(mx::ValueElement::INTERFACE_NAME_ATTRIBUTE); setDefaults(_graphNodes[upNode]->getInput()); } + for (UiPinPtr connect : pin->_connections) { + pin->deleteConnection(connect); + } pin->_input->setConnectedNode(nullptr); pin->setConnected(false); setDefaults(pin->_input); @@ -2812,6 +2825,9 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) { removeEdge(downNode, upNode, pin); _graphNodes[downNode]->getOutput()->removeAttribute("nodename"); + for (UiPinPtr connect : pin->_connections) { + pin->deleteConnection(connect); + } pin->setConnected(false); } } @@ -3758,9 +3774,13 @@ void Graph::addPinPopup() if (pin->_connected) { connected = "\nConnected to"; - for (UiPinPtr connectedPins : pin->getConnections()) + for (int i = 0; i < pin->getConnections().size(); i++) { - connected = connected + " " + connectedPins->_name + ","; + UiPinPtr connectedPin = pin->getConnections()[i]; + connected = connected + " " + connectedPin->_name; + if (i != pin->getConnections().size() -1) { + connected = connected + ","; + } } } else if (pin->_input != nullptr) diff --git a/source/MaterialXGraphEditor/UiNode.h b/source/MaterialXGraphEditor/UiNode.h index c03ae43219..7ab9df962a 100644 --- a/source/MaterialXGraphEditor/UiNode.h +++ b/source/MaterialXGraphEditor/UiNode.h @@ -95,6 +95,28 @@ class UiPin _connections.push_back(pin); } + void deleteConnection(UiPinPtr pin) + { + for (size_t i = 0; i < _connections.size(); i++) + { + if (_connections[i]->_pinId == pin->_pinId) + { + _connections.erase(_connections.begin()+i); + } + } + for (size_t i = 0; i < pin->_connections.size(); i++) + { + if (pin->_connections[i]->_pinId == _pinId) + { + pin->_connections.erase(pin->_connections.begin() + i); + } + } + if (pin->_connections.size() == 0) { + pin->setConnected(false); + } + return; + } + const std::vector& getConnections() { return _connections; From 4f50f73bae6edb6824c036a6a4af1ba0d023fdb6 Mon Sep 17 00:00:00 2001 From: ethomare-ilm Date: Mon, 16 Oct 2023 10:21:39 -0700 Subject: [PATCH 08/11] size to int cast --- source/MaterialXGraphEditor/Graph.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index f0455baf17..876c75202a 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3774,11 +3774,12 @@ void Graph::addPinPopup() if (pin->_connected) { connected = "\nConnected to"; - for (int i = 0; i < pin->getConnections().size(); i++) + int size = static_cast(pin->getConnections().size()); + for (int i = 0; i < size; i++) { UiPinPtr connectedPin = pin->getConnections()[i]; connected = connected + " " + connectedPin->_name; - if (i != pin->getConnections().size() -1) { + if (i != size - 1) { connected = connected + ","; } } From 9226ab20793b5192497b13b46f4ba7c0a7de204e Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Mon, 16 Oct 2023 12:45:59 -0700 Subject: [PATCH 09/11] Align code style Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/Graph.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 53e045169b..7a799c3be9 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -2815,13 +2815,13 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) setDefaults(_graphNodes[upNode]->getInput()); } - for (UiPinPtr connect : pin->_connections) { + for (UiPinPtr connect : pin->_connections) + { pin->deleteConnection(connect); } // Remove any output reference pin->_input->removeAttribute(mx::PortElement::OUTPUT_ATTRIBUTE); - pin->setConnected(false); // If a value exists update the input with it @@ -2846,7 +2846,8 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) _graphNodes[downNode]->getNodeGraph()->getInput(pin->_name)->removeAttribute(mx::ValueElement::INTERFACE_NAME_ATTRIBUTE); setDefaults(_graphNodes[upNode]->getInput()); } - for (UiPinPtr connect : pin->_connections) { + for (UiPinPtr connect : pin->_connections) + { pin->deleteConnection(connect); } pin->_input->setConnectedNode(nullptr); @@ -2863,7 +2864,8 @@ void Graph::deleteLinkInfo(int startAttr, int endAttr) { removeEdge(downNode, upNode, pin); _graphNodes[downNode]->getOutput()->removeAttribute("nodename"); - for (UiPinPtr connect : pin->_connections) { + for (UiPinPtr connect : pin->_connections) + { pin->deleteConnection(connect); } pin->setConnected(false); From a21c8cd3f6b2f8e965a7c26f3a43bcab1f449d0d Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Mon, 16 Oct 2023 12:47:18 -0700 Subject: [PATCH 10/11] Align coding style Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/Graph.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 7a799c3be9..439f720e2e 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -3789,7 +3789,8 @@ void Graph::addPinPopup() { UiPinPtr connectedPin = pin->getConnections()[i]; connected = connected + " " + connectedPin->_name; - if (i != size - 1) { + if (i != size - 1) + { connected = connected + ","; } } From 5c8a8c33b0aac085882c46229ac4d30f2abf9ec9 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Mon, 16 Oct 2023 13:23:57 -0700 Subject: [PATCH 11/11] Align coding style Signed-off-by: Jonathan Stone --- source/MaterialXGraphEditor/UiNode.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/MaterialXGraphEditor/UiNode.h b/source/MaterialXGraphEditor/UiNode.h index 7ab9df962a..cf7aa41e28 100644 --- a/source/MaterialXGraphEditor/UiNode.h +++ b/source/MaterialXGraphEditor/UiNode.h @@ -111,7 +111,8 @@ class UiPin pin->_connections.erase(pin->_connections.begin() + i); } } - if (pin->_connections.size() == 0) { + if (pin->_connections.size() == 0) + { pin->setConnected(false); } return;