| Quintiq file version 2.0 | 
| #parent: #root | 
| Function CalcY | 
| { | 
|   TextBody: | 
|   [* | 
|     // Adhi Jan-29-2016 (created) | 
|      | 
|     rcv := this.RoutingConfiguratorView(); | 
|     top := 0; | 
|     inputgroupheight :=0; | 
|     if( not isnull( rcv ) ) | 
|     { | 
|       //default draw after 1 routngstep distance | 
|       | 
|      // if there is operationinputgroup, start in the middle of the last input group | 
|       nrofinputinlastgroup := guard( this.LastOperationInputPISPNode().GroupSize(), 0 ); | 
|                                                  | 
|       nrofinput := this.OperationInputPISPNode( relsize ); | 
|       middleofinput := nrofinputinlastgroup / 2 + maxvalue( nrofinput - nrofinputinlastgroup, 0 ); | 
|       nrofgroup := counter( this, OperationInputPISPNode.OperationInput.OperationInputGroup, g,  | 
|                             guard( g.First().IsLead(), false )  | 
|                             and not g.IsSystem() ); | 
|                              | 
|       if ( middleofinput > 0 ) | 
|       {  | 
|         inputgroupheight := [Number]( middleofinput * rcv.PISPHeight() + nrofgroup * rcv.OperationInputGroupThickness() * 2  ) ; | 
|       }                                    | 
|          | 
|       prevstep := this.PreviousStep(); | 
|       if( not isnull( prevstep ) ) | 
|       { | 
|         // routingstep y based on the maxvalue for previous step height, previous input and ouputput height | 
|         previousoutputheight := guard( prevstep.LastOperationOutputPISPNode().PISPNodeY() + rcv.PISPHeight(), 0 ); | 
|         previousinputheight := guard( prevstep.LastOperationInputPISPNode().PISPNodeY() + rcv.PISPHeight(), 0 ); | 
|         top := maxvalue( prevstep.Y() + prevstep.Height(), previousinputheight, previousoutputheight ) + rcv.RoutingStepDistance();  | 
|       } | 
|       else | 
|       { | 
|         // at least keep half of routing step distance for the first routing step | 
|         inputgroupheight := maxvalue( rcv.OperationInputOutputHeight(), inputgroupheight ) + RoutingConfiguratorView::GetConstOffset(); | 
|       } | 
|       top := top + inputgroupheight; | 
|      | 
|       this.Y( top ); | 
|     } | 
|   *] | 
| } |