@@ -317,10 +317,12 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
317317 . ToDictionary ( nodeElement => nodeElement , nodeElement => nodeElement . View . Guid ) ;
318318
319319 /* Collect relay nodes */
320- var relayNodes = _graphView . nodes
320+ var relayNodes = _graphElements
321321 . Where ( n => n . userData is RelayNodeView )
322322 . Select ( n => n . userData as RelayNodeView )
323323 . ToList ( ) ;
324+ var relayIdMap = relayNodes
325+ . ToDictionary ( relay => relay , relay => relay . Guid ) ;
324326
325327 /* Need assign new guid before serialization */
326328 if ( copyPaste )
@@ -336,7 +338,7 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
336338 }
337339
338340 /* Record relay node connections BEFORE CompileNode flattens them */
339- var relayNodeData = relayNodes . Select ( view => view . Compile ( ) ) . ToArray ( ) ;
341+ var relayNodeData = relayNodes . Select ( view => CloneRelayNode ( view . Compile ( ) ) ) . ToArray ( ) ;
340342
341343 var nodeInstances = serializableNodes . Select ( element => ( CeresNode ) element . View . CompileNode ( ) ) . ToArray ( ) ;
342344 var nodeGroupData = new List < NodeGroup > ( ) ;
@@ -352,6 +354,11 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
352354 {
353355 nodeElement . View . Guid = idMap [ nodeElement ] ;
354356 }
357+ foreach ( var relay in relayNodes )
358+ {
359+ relay . Guid = relayIdMap [ relay ] ;
360+ relay . Compile ( ) ;
361+ }
355362 }
356363
357364 /* Copy and paste may log warning for missing connect nodes which is expected. */
@@ -375,6 +382,31 @@ public FlowGraphData SerializeGraph(bool copyPaste = false)
375382
376383 }
377384
385+ private static RelayNode CloneRelayNode ( RelayNode relayNode )
386+ {
387+ return new RelayNode
388+ {
389+ guid = relayNode . guid ,
390+ graphPosition = relayNode . graphPosition ,
391+ portType = relayNode . portType ,
392+ inputs = CloneRelayConnections ( relayNode . inputs ) ,
393+ outputs = CloneRelayConnections ( relayNode . outputs )
394+ } ;
395+ }
396+
397+ private static RelayConnection [ ] CloneRelayConnections ( RelayConnection [ ] connections )
398+ {
399+ return connections ?
400+ . Select ( connection => new RelayConnection
401+ {
402+ connectionType = connection . connectionType ,
403+ nodeId = connection . nodeId ,
404+ portId = connection . portId ,
405+ portIndex = connection . portIndex
406+ } )
407+ . ToArray ( ) ?? Array . Empty < RelayConnection > ( ) ;
408+ }
409+
378410 private static CeresNodeData LinkAndGetNodeSerializedData ( CeresLinker linker , CeresNode node )
379411 {
380412 var data = node . GetSerializedData ( ) ;
0 commit comments