33
44import os
55import tempfile
6+ import math
67
78from meshroom .core .graph import Graph , loadGraph
89from meshroom .core .node import CompatibilityNode
@@ -40,6 +41,9 @@ def test_saveLoadGroupConnections():
4041 # Ensure the nodes are not CompatibilityNodes
4142 for node in graph .nodes :
4243 assert not isinstance (node , CompatibilityNode )
44+
45+
46+
4347
4448
4549def test_groupAttributesFlatChildren ():
@@ -100,4 +104,119 @@ def test_groupAttributesDepthLevels():
100104
101105 intAttr = node .attribute ("exposedInt" )
102106 assert not isinstance (intAttr , GroupAttribute )
103- assert intAttr .depth == 0
107+ assert intAttr .depth == 0
108+
109+ def test_saveLoadGroupDirectConnections ():
110+ """
111+
112+ """
113+ graph = Graph ("Connections between GroupAttributes" )
114+
115+ # Create two "GroupAttributes" nodes with their default parameters
116+ nodeA = graph .addNewNode ("GroupAttributes" )
117+ nodeB = graph .addNewNode ("GroupAttributes" )
118+
119+ # Connect attributes within groups at different depth levels
120+ graph .addEdges (
121+ (nodeA .firstGroup , nodeB .firstGroup ),
122+ (nodeA .firstGroup , nodeB .firstGroup ),
123+ )
124+
125+ # Save the graph in a file
126+ graphFile = os .path .join (tempfile .mkdtemp (), "test_io_group_connections.mg" )
127+ graph .save (graphFile )
128+
129+ # Reload the graph
130+ graph = loadGraph (graphFile )
131+
132+ assert graph .node ("GroupAttributes_2" ).firstGroup .getLinkParam () == graph .node ("GroupAttributes_1" ).firstGroup
133+
134+
135+ def test_groupAttributes_with_same_structure_should_allow_connection ():
136+
137+ # Given
138+ graph = Graph ()
139+ nestedPosition = graph .addNewNode ("NestedPosition" )
140+ nestedColor = graph .addNewNode ("NestedColor" )
141+
142+ # When
143+ acceptedConnection = nestedPosition .xyz .isCompatibleWith (nestedColor .rgb )
144+
145+ # Then
146+ assert acceptedConnection == True
147+
148+ def test_groupAttributes_with_different_structure_should_not_allow_connection ():
149+
150+ # Given
151+ graph = Graph ()
152+ nestedPosition = graph .addNewNode ("NestedPosition" )
153+ nestedTest = graph .addNewNode ("NestedTest" )
154+
155+ # When
156+ acceptedConnection = nestedPosition .xyz .isCompatibleWith (nestedTest .xyz )
157+
158+ # Then
159+ assert acceptedConnection == False
160+
161+ def test_groupAttributes_connection_should_connect_all_subAttributes ():
162+ # Given
163+ graph = Graph ()
164+
165+ nestedColor = graph .addNewNode ("NestedColor" )
166+ nestedPosition = graph .addNewNode ("NestedPosition" )
167+
168+ assert nestedPosition .xyz .isLink == False
169+ assert nestedPosition .xyz .x .isLink == False
170+ assert nestedPosition .xyz .y .isLink == False
171+ assert nestedPosition .xyz .z .isLink == False
172+ assert nestedPosition .xyz .test .isLink == False
173+ assert nestedPosition .xyz .test .x .isLink == False
174+ assert nestedPosition .xyz .test .y .isLink == False
175+ assert nestedPosition .xyz .test .z .isLink == False
176+
177+ # When
178+ nestedColor .rgb .connectTo (nestedPosition .xyz )
179+
180+ # Then
181+ assert nestedPosition .xyz .isLink == True
182+ assert nestedPosition .xyz .x .isLink == True
183+ assert nestedPosition .xyz .y .isLink == True
184+ assert nestedPosition .xyz .z .isLink == True
185+ assert nestedPosition .xyz .test .isLink == True
186+ assert nestedPosition .xyz .test .x .isLink == True
187+ assert nestedPosition .xyz .test .y .isLink == True
188+ assert nestedPosition .xyz .test .z .isLink == True
189+
190+ def test_connecting_a_subAttribute_should_disconnect_the_parent_groupAttribute ():
191+ # Given
192+ graph = Graph ()
193+
194+ nestedColor = graph .addNewNode ("NestedColor" )
195+ nestedPosition = graph .addNewNode ("NestedPosition" )
196+
197+ nestedColor .rgb .connectTo (nestedPosition .xyz )
198+
199+ assert nestedPosition .xyz .isLink == True
200+ assert nestedPosition .xyz .x .isLink == True
201+ assert nestedPosition .xyz .y .isLink == True
202+ assert nestedPosition .xyz .z .isLink == True
203+ assert nestedPosition .xyz .test .isLink == True
204+ assert nestedPosition .xyz .test .x .isLink == True
205+ assert nestedPosition .xyz .test .y .isLink == True
206+ assert nestedPosition .xyz .test .z .isLink == True
207+
208+ # When
209+ r = nestedColor .rgb .r
210+ z = nestedPosition .xyz .test .z
211+ r .connectTo (z )
212+
213+ # Then
214+
215+ assert nestedPosition .xyz .isLink == False # Disconnected because sub GroupAttribute has been disconnected
216+ assert nestedPosition .xyz .x .isLink == True
217+ assert nestedPosition .xyz .y .isLink == True
218+ assert nestedPosition .xyz .z .isLink == True
219+ assert nestedPosition .xyz .test .isLink == False # Disconnected because nestedPosition.xyz.test.z has been reconnected
220+ assert nestedPosition .xyz .test .x .isLink == True
221+ assert nestedPosition .xyz .test .y .isLink == True
222+ assert nestedPosition .xyz .test .z .isLink == True
0 commit comments