Skip to content

Commit 3fa7cb0

Browse files
committed
Convert RSML to detailled MTG to networkx
1 parent f5be089 commit 3fa7cb0

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

test/test_rsml_time_nx.py

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import rsml
22
from rsml import data
33

4-
from openalea.mtg import traversal
4+
from openalea.mtg import traversal, algo
5+
56
import networkx as nx
67
import numpy as np
78

@@ -22,7 +23,8 @@ def distance_polyline(p1, p2):
2223
closest_point = p1[closest_index]
2324
# Distance to the closest point
2425
distance = np.linalg.norm(closest_point - point_p2)
25-
#print("Distance to the closest point ", distance)
26+
if distance > 5:
27+
print("Distance to the closest point ", distance)
2628

2729
return closest_index
2830

@@ -37,19 +39,19 @@ def convert_fine_mtg(fn):
3739
geometry = g.property('geometry')
3840
time = g.property('time')
3941
time_hours = g.property('time_hours')
42+
diameters = g.property('diameters')
4043

4144
indexes = {}
4245

4346
g2 = g.copy()
4447
for pid in plants:
4548
aid = next(g.component_roots_iter(pid))
4649
for axis_id in traversal.pre_order2(g, vtx_id=aid):
47-
print(axis_id)
4850
poly = geometry[axis_id]
4951
time_v = time[axis_id]
5052
time_hours_v = time_hours[axis_id]
53+
#diams = diameters[axis_id]
5154

52-
count = 0
5355
if g.parent(axis_id) is None:
5456
# create the axis at segment level
5557
vid = g2.add_component(complex_id=axis_id, label='Segment',
@@ -88,14 +90,48 @@ def convert_fine_mtg(fn):
8890
indexes[axis_id].append(vid)
8991
return g2
9092

93+
def split(g):
94+
return algo.split(g)
95+
96+
def convert_nx(g):
97+
98+
max_scale = g.max_scale()
99+
root_id = next(g.component_roots_at_scale_iter(g.root, scale=max_scale))
100+
101+
edge_list = []
102+
nodes = list(traversal.pre_order2(g, vtx_id=root_id))
103+
for v in nodes:
104+
parent = g.parent(v)
105+
if parent is None:
106+
continue
107+
108+
edge_list.append((parent, v))
109+
110+
g_nx = nx.from_edgelist(edge_list, create_using=nx.DiGraph)
91111

92-
112+
props = ['x', 'y', 'time', 'time_hours', 'diameters', 'label']
113+
for node in nodes:
114+
for prop in props:
115+
_prop = g.property(prop)
116+
if node in _prop:
117+
g_nx.nodes[node][prop] = _prop.get(node)
93118

119+
return g_nx
94120

95121

96122

123+
def test_all():
124+
"""
125+
Test the conversion of the MTG to a fine MTG and then to a networkx graph.
126+
"""
127+
g = convert_fine_mtg(fn)
128+
129+
gs = split(g)
130+
dgs = [convert_nx(g) for g in gs]
131+
return dgs
132+
133+
97134

98-
99135

100136

101137

0 commit comments

Comments
 (0)