[Bf-blender-cvs] [8ae3debad08] functions: node shape utility

Jacques Lucke noreply at git.blender.org
Sun Nov 24 14:59:17 CET 2019


Commit: 8ae3debad08d91b0e23e7be1c9615c5dbaa512bc
Author: Jacques Lucke
Date:   Sun Nov 24 13:30:28 2019 +0100
Branches: functions
https://developer.blender.org/rB8ae3debad08d91b0e23e7be1c9615c5dbaa512bc

node shape utility

===================================================================

M	source/blender/blenlib/BLI_dot_export.h
M	source/blender/blenlib/intern/dot_export.cc

===================================================================

diff --git a/source/blender/blenlib/BLI_dot_export.h b/source/blender/blenlib/BLI_dot_export.h
index 973962f44c3..73c5639408a 100644
--- a/source/blender/blenlib/BLI_dot_export.h
+++ b/source/blender/blenlib/BLI_dot_export.h
@@ -1,6 +1,13 @@
 #ifndef __BLI_DOT_EXPORT_H__
 #define __BLI_DOT_EXPORT_H__
 
+/**
+ * Language grammar: https://www.graphviz.org/doc/info/lang.html
+ * Attributes: https://www.graphviz.org/doc/info/attrs.html
+ * Node Shapes: https://www.graphviz.org/doc/info/shapes.html
+ * Preview: https://dreampuf.github.io/GraphvizOnline
+ */
+
 #include "BLI_vector.h"
 #include "BLI_optional.h"
 #include "BLI_string_map.h"
@@ -168,6 +175,33 @@ class Node {
   void export__as_declaration(std::stringstream &ss) const;
 };
 
+namespace Utils {
+
+class NodeWithSocketsWrapper {
+ private:
+  Node *m_node;
+
+ public:
+  NodeWithSocketsWrapper(Node &node,
+                         StringRef name,
+                         ArrayRef<std::string> input_names,
+                         ArrayRef<std::string> output_names);
+
+  NodePort input(uint index) const
+  {
+    std::string port = "\"in" + std::to_string(index) + "\"";
+    return NodePort(*m_node, port);
+  }
+
+  NodePort output(uint index) const
+  {
+    std::string port = "\"out" + std::to_string(index) + "\"";
+    return NodePort(*m_node, port);
+  }
+};
+
+}  // namespace Utils
+
 }  // namespace DotExport
 }  // namespace BLI
 
diff --git a/source/blender/blenlib/intern/dot_export.cc b/source/blender/blenlib/intern/dot_export.cc
index 5f7907c85b1..5cc8c5263f0 100644
--- a/source/blender/blenlib/intern/dot_export.cc
+++ b/source/blender/blenlib/intern/dot_export.cc
@@ -87,7 +87,13 @@ void AttributeList::export__as_bracket_list(std::stringstream &ss) const
 {
   ss << "[";
   for (auto item : m_attributes.items()) {
-    ss << item.key << "=\"" << item.value << "\", ";
+    if (StringRef(item.value).startswith("<")) {
+      /* Don't draw the quotes, this is an html-like value. */
+      ss << item.key << "=" << item.value << ", ";
+    }
+    else {
+      ss << item.key << "=\"" << item.value << "\", ";
+    }
   }
   ss << "]";
 }
@@ -150,5 +156,56 @@ void NodePort::to_dot_string(std::stringstream &ss) const
   }
 }
 
+namespace Utils {
+
+NodeWithSocketsWrapper::NodeWithSocketsWrapper(Node &node,
+                                               StringRef name,
+                                               ArrayRef<std::string> input_names,
+                                               ArrayRef<std::string> output_names)
+    : m_node(&node)
+{
+  std::stringstream ss;
+
+  ss << "<<table border=\"0\" cellspacing=\"3\">";
+
+  /* Header */
+  ss << "<tr><td colspan=\"3\" align=\"center\"><b>";
+  ss << name;
+  ss << "</b></td></tr>";
+
+  /* Sockets */
+  uint socket_max_amount = std::max(input_names.size(), output_names.size());
+  for (uint i = 0; i < socket_max_amount; i++) {
+    ss << "<tr>";
+    if (i < input_names.size()) {
+      StringRef name = input_names[i];
+      ss << "<td align=\"left\" port=\"in" << i << "\">";
+      ss << name;
+      ss << "</td>";
+    }
+    else {
+      ss << "<td></td>";
+    }
+    ss << "<td></td>";
+    if (i < output_names.size()) {
+      StringRef name = output_names[i];
+      ss << "<td align=\"right\" port=\"out" << i << "\">";
+      ss << name;
+      ss << "</td>";
+    }
+    else {
+      ss << "<td></td>";
+    }
+    ss << "</tr>";
+  }
+
+  ss << "</table>>";
+
+  m_node->set_attribute("label", ss.str());
+  m_node->set_attribute("shape", "box");
+}
+
+}  // namespace Utils
+
 }  // namespace DotExport
 }  // namespace BLI



More information about the Bf-blender-cvs mailing list