Quintiq file version 2.0
#parent: CustomDrawComponentRoutingConfigurator/CustomDrawDataLayerOperationOutputEdgeRCV
Response OnDrawObject (
  PISPOperationOutputEdge object
) id:Response_CustomDrawComponentRoutingConfigurator_CustomDrawDataLayerOperationOutputEdgeRCV_OnDrawObject
{
  #keys: '[124808.0.1235006012]'
  Body:
  [*
    // Draw PISP Operation output Edge
    rcv := DataHolderRCView.Data();
    
    // Adjust line based on its orientations
    topdown := object.FromY() < object.ToY();
    leftright := object.FromX() < object.ToX();
    padding := 6;
    
    fromx := region.Left();
    tox := region.Width();
    
    fromy := region.Top() + padding;
    toy := region.Height() - padding;
    
    if( not topdown )
    {
      tmp := fromy;
      fromy := toy;
      toy := tmp;
    }
    
    if( not leftright )
    {
      tmp := fromx;
      fromx := tox;
      tox := tmp;
    }
    
    // Highlight operation input outputs related to this edge
    operationoutputs := selectset( DataHolderHighlightOperationInputOutputNode.Data(),
                                   Elements.astype( OperationOutput ),
                                   e,
                                   true,
                                   true );
    
    highlight := object.IsLinkOf( DataHolderHighlightPISPNodeInRouting.Data() )
                 or object.IsLinkOf( operationoutputs );
    
    surface.Brush().Reset(); // strange. without this line, the arrow head will not be filled.
    surface.Brush().Color( ColorScheme.Outline() ); // to paint the solid arrowhead
    surface.Pen().Color( ColorScheme.Outline() );
    
    if( highlight )
    {
      surface.Brush().Reset(); // strange. without this line, the arrow head will not be filled.
      surface.Pen().Color( Color::DarkGreen() );
      surface.Brush().Color( Color::DarkGreen() ); // to paint the solid arrowhead
    }
    
    surface.Pen().Style( PenSpecification::StyleSolid() );
    surface.Pen().Width( rcv.EdgeThickness() );
    
    // Draw the directional line
    line := GraphicalLine::LineTo( fromx, fromy, tox, toy );
    line.ArrowToEnd( true ).ArrowPos( GraphicalLine::ArrowPosMiddle() );
    surface.Draw( line );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_CustomDrawDataLayer_OnDrawObject'
  Precondition:
  [*
    return not isnull( DataHolderRCView.Data() );
  *]
}
