hongji.li
2023-11-03 aefafd2142478d4fb07d6b8b45c3047e247389e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Quintiq file version 2.0
#parent: #root
Method PopulateEdgePositions (
  output owning shadow[SCVConfiguration] scvConfig
) id:Method_FormSupplyChainVisualization_PopulateEdgePositions
{
  #keys: '[134266.2.4972183]'
  Body:
  [*
    // Populate edge positions using node positions
    // Populate SCVEdge starting and target positions
    
    traverse( scvConfig, SCVNode.SCVEdge, edge )
    {
      node1 := select( scvConfig, SCVNode, node,
                       edge.DestinationKey() = node.Key().AsQUILL() );
    
      node2 := select( scvConfig, SCVNode, node,
                       edge.OriginKey() = node.Key().AsQUILL() );
      
      sourceNode := ifexpr( edge.IsUpstream(), node1, node2 );
      targetNode := ifexpr( edge.IsUpstream(), node2, node1 );
      
      adjustmentX := scvConfig.NodeSize();
      adjustmentY := floor( scvConfig.NodeSize() / 2 );
      
      edge.FromX( sourceNode.X() + adjustmentX );
      edge.FromY( sourceNode.Y() + adjustmentY );
      edge.ToX( targetNode.X() );
      edge.ToY( targetNode.Y() + adjustmentY );
      
      // Assign label to the edge
      quantity := 0.0;
      label := this.ReturnEdgeLabel( &scvConfig, sourceNode, targetNode, quantity );
    
      edge.Quantity( quantity );
      edge.Label( label );
    }
  *]
}