From ecb43845a64f53e9ba4e554f3e082474f5e3f9c4 Mon Sep 17 00:00:00 2001 From: Mark Voltov Date: Mon, 3 Jun 2024 03:34:25 +0300 Subject: [PATCH] =?UTF-8?q?svg=20=D0=B4=D0=BB=D1=8F=20=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=84=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../robossembler/assembly_graph_generation.py | 44 +++++++++++++++ test_models/img/body_down.svg | 34 ++++++++++++ test_models/img/body_up.svg | 30 +++++++++++ test_models/img/bolt.svg | 18 +++++++ test_models/img/bolt2.svg | 18 +++++++ test_models/img/bolt3.svg | 18 +++++++ test_models/img/bolt4.svg | 18 +++++++ test_models/img/output_shaft.svg | 53 +++++++++++++++++++ test_models/img/planet_gear.svg | 13 +++++ test_models/img/planet_gear002.svg | 13 +++++ test_models/img/planet_gear003.svg | 13 +++++ test_models/img/planet_gear004.svg | 13 +++++ test_models/img/planet_gear005.svg | 13 +++++ test_models/img/sol_gear.svg | 20 +++++++ 14 files changed, 318 insertions(+) create mode 100644 freecad_workbench/freecad/robossembler/assembly_graph_generation.py create mode 100644 test_models/img/body_down.svg create mode 100644 test_models/img/body_up.svg create mode 100644 test_models/img/bolt.svg create mode 100644 test_models/img/bolt2.svg create mode 100644 test_models/img/bolt3.svg create mode 100644 test_models/img/bolt4.svg create mode 100644 test_models/img/output_shaft.svg create mode 100644 test_models/img/planet_gear.svg create mode 100644 test_models/img/planet_gear002.svg create mode 100644 test_models/img/planet_gear003.svg create mode 100644 test_models/img/planet_gear004.svg create mode 100644 test_models/img/planet_gear005.svg create mode 100644 test_models/img/sol_gear.svg diff --git a/freecad_workbench/freecad/robossembler/assembly_graph_generation.py b/freecad_workbench/freecad/robossembler/assembly_graph_generation.py new file mode 100644 index 0000000..c1e8fc8 --- /dev/null +++ b/freecad_workbench/freecad/robossembler/assembly_graph_generation.py @@ -0,0 +1,44 @@ +import json +import networkx as nx +import matplotlib.pyplot as plt +from PIL import Image +import matplotlib.image as mpimg +from networkx.drawing.nx_agraph import graphviz_layout + +def load_assembly_sequence(filepath): + with open(filepath, 'r') as file: + return json.load(file) + +def create_assembly_graph(sequence): + G = nx.DiGraph() + + for i, part in enumerate(sequence): + G.add_node(part, image=f'{part}.svg') + if i > 0: + G.add_edge(sequence[i-1], part) + + return G + +def draw_graph(G): + pos = graphviz_layout(G, prog='dot') + fig, ax = plt.subplots(figsize=(12, 8)) + + for node in G.nodes(data=True): + x, y = pos[node[0]] + img = mpimg.imread(node[1]['image']) + ax.imshow(img, aspect='auto', extent=(x-0.5, x+0.5, y-0.5, y+0.5), zorder=1) + + ax.text(x, y-0.6, s=node[0], horizontalalignment='center', fontsize=12, zorder=2) + + nx.draw_networkx_edges(G, pos, ax=ax, arrows=True) + plt.axis('off') + plt.show() + +def main(): + sequence = load_assembly_sequence('assembly_sequence.json') + assembly_graph = create_assembly_graph(sequence) + + draw_graph(assembly_graph) + +if __name__ == '__main__': + main() diff --git a/test_models/img/body_down.svg b/test_models/img/body_down.svg new file mode 100644 index 0000000..fab4fec --- /dev/null +++ b/test_models/img/body_down.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +b'body_down' + + \ No newline at end of file diff --git a/test_models/img/body_up.svg b/test_models/img/body_up.svg new file mode 100644 index 0000000..2a2e3ae --- /dev/null +++ b/test_models/img/body_up.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +b'body_up' + + \ No newline at end of file diff --git a/test_models/img/bolt.svg b/test_models/img/bolt.svg new file mode 100644 index 0000000..08881a4 --- /dev/null +++ b/test_models/img/bolt.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +b'bolt' + + \ No newline at end of file diff --git a/test_models/img/bolt2.svg b/test_models/img/bolt2.svg new file mode 100644 index 0000000..4d86fc4 --- /dev/null +++ b/test_models/img/bolt2.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +b'bolt2' + + \ No newline at end of file diff --git a/test_models/img/bolt3.svg b/test_models/img/bolt3.svg new file mode 100644 index 0000000..d114b57 --- /dev/null +++ b/test_models/img/bolt3.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +b'bolt3' + + \ No newline at end of file diff --git a/test_models/img/bolt4.svg b/test_models/img/bolt4.svg new file mode 100644 index 0000000..ca088bf --- /dev/null +++ b/test_models/img/bolt4.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +b'bolt4' + + \ No newline at end of file diff --git a/test_models/img/output_shaft.svg b/test_models/img/output_shaft.svg new file mode 100644 index 0000000..d30fd59 --- /dev/null +++ b/test_models/img/output_shaft.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +b'output_shaft' + + \ No newline at end of file diff --git a/test_models/img/planet_gear.svg b/test_models/img/planet_gear.svg new file mode 100644 index 0000000..c7d8898 --- /dev/null +++ b/test_models/img/planet_gear.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +b'planet_gear' + + \ No newline at end of file diff --git a/test_models/img/planet_gear002.svg b/test_models/img/planet_gear002.svg new file mode 100644 index 0000000..32101ac --- /dev/null +++ b/test_models/img/planet_gear002.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +b'planet_gear002' + + \ No newline at end of file diff --git a/test_models/img/planet_gear003.svg b/test_models/img/planet_gear003.svg new file mode 100644 index 0000000..a692e01 --- /dev/null +++ b/test_models/img/planet_gear003.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +b'planet_gear003' + + \ No newline at end of file diff --git a/test_models/img/planet_gear004.svg b/test_models/img/planet_gear004.svg new file mode 100644 index 0000000..e5a7285 --- /dev/null +++ b/test_models/img/planet_gear004.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +b'planet_gear004' + + \ No newline at end of file diff --git a/test_models/img/planet_gear005.svg b/test_models/img/planet_gear005.svg new file mode 100644 index 0000000..7b3470e --- /dev/null +++ b/test_models/img/planet_gear005.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +b'planet_gear005' + + \ No newline at end of file diff --git a/test_models/img/sol_gear.svg b/test_models/img/sol_gear.svg new file mode 100644 index 0000000..eebe881 --- /dev/null +++ b/test_models/img/sol_gear.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + +b'sol_gear' + + \ No newline at end of file