| Quintiq file version 2.0 | 
| #parent: PanelSCV/CustomDrawDataLayerSCVEdge | 
| Response OnDrawObject ( | 
|   shadow[SCVEdge] object | 
| ) id:Response_PanelSCV_CustomDrawDataLayerSCVEdge_OnDrawObject | 
| { | 
|   #keys: '[134266.2.4973606]' | 
|   CanBindMultiple: false | 
|   DefinitionID: 'Responsedef_WebCustomDrawDataLayer_OnDrawObject' | 
|   QuillAction | 
|   { | 
|     Body: | 
|     [* | 
|       // Draw object | 
|       scvConfig := MacroPlan.SCVConfiguration(); | 
|        | 
|       adjustmentX := scvConfig.NodeSize(); | 
|       adjustmentY := floor( scvConfig.NodeSize() / 2 ); | 
|        | 
|       // Adjust line based on its orientations | 
|        | 
|       topdown := object.ToY() > object.FromY(); | 
|       leftright := object.ToX() > object.FromX(); | 
|        | 
|       padding := 6; | 
|        | 
|        | 
|       fromy := region.BoundingRect().Top() + padding; | 
|       toy := region.BoundingRect().Height() - padding; | 
|        | 
|       if( topdown ) | 
|       { | 
|         if( not leftright ) | 
|         { | 
|           fromy := region.BoundingRect().Top() + padding; | 
|           toy := region.BoundingRect().Height() - padding; | 
|         } | 
|       } | 
|       else | 
|       { | 
|         if( leftright ) | 
|         { | 
|           fromy := region.BoundingRect().Height() - padding; | 
|           toy := region.BoundingRect().Top() + padding; | 
|         } | 
|       } | 
|        | 
|       // Get line quantity and label | 
|       quantity := object.Quantity(); | 
|       lineLabel := object.Label() | 
|        | 
|       // Color the line gray if quantity is 0 or smaller | 
|       lineColor := ColorScheme.SupplyChainVisualization_Edge(); | 
|       if( quantity <= 0.0 ) | 
|       { | 
|         lineColor := ColorScheme.SupplyChainVisualization_Node(); | 
|         // Color the text gray too | 
|         surface.TextColor( lineColor ); | 
|       } | 
|        | 
|       //Initialize drawing parameters | 
|       surface.Pen().Color( lineColor ) | 
|                    .Width( 1 ); | 
|       surface.Brush().Color( lineColor ); | 
|        | 
|       // Draw the directional line | 
|       line := GraphicalLine::LineTo( region.BoundingRect().Left(), fromy, region.BoundingRect().Width(), toy ); | 
|       line.ArrowToEnd( true ).ArrowPos( GraphicalLine::ArrowPosMiddle() ); | 
|       surface.Draw( line ); | 
|        | 
|       // Draw quantity label | 
|       // Get rotation angle to rotate the text to the same angle as the line | 
|       gradient := ( toy - fromy ) / ( region.BoundingRect().Width() - region.BoundingRect().Left() ); | 
|       degree := atan( -gradient ) * 180 / pi; | 
|       // Webclient doesn't support negative degree rotation | 
|        | 
|       surface.Font().Name( scvConfig.FontName() ) | 
|                     .Size( scvConfig.FontSize() ) | 
|                     .Angle( [Number]degree ); | 
|        | 
|       textformat := TextFormat::Construct( TextFormat::AlignCenter() ); | 
|        | 
|       // Rotate the text to  | 
|       if( object.FromY() = object.ToY() ) | 
|       { | 
|         surface.TextZoom( region.BoundingRect().Left(), region.BoundingRect().Top() - scvConfig.FontSize(), | 
|                           region.BoundingRect().Width(), scvConfig.FontSize() * 2, | 
|                           lineLabel, textformat ); | 
|       } | 
|       else | 
|       { | 
|         // If targetnode and sourcenode have different Y positions, | 
|         // it means there is a gradient and we need to rotate the  | 
|         // text. The hardcoded offsets below are the sweet numbers | 
|         // that we found that allows the text to have even distance to line | 
|         // for any angle of rotation | 
|         textformat := TextFormat::Construct( TextFormat::AlignCentered() ); | 
|         surface.TextZoom( region.BoundingRect().Left(), region.BoundingRect().Top() + ifexpr( gradient > 0, -14, -4 ), | 
|                           region.BoundingRect().Width(), region.BoundingRect().Height(), | 
|                           [String]lineLabel, textformat );     | 
|       } | 
|     *] | 
|     GroupServerCalls: false | 
|   } | 
| } |