yanweiyuan3
2023-10-27 d1d15b61dfcf7fd0f800b32359f082cf580ed556
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Quintiq file version 2.0
#parent: CustomDrawComponentRoutingConfigurator/CustomDrawDataLayerOperationOutputEdgeRCVHidden
Response OnDrawObject (
  PISPOperationOutputEdge object
) id:Response_CustomDrawComponentRoutingConfigurator_CustomDrawDataLayerOperationOutputEdgeRCVHidden_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( Color::LightGray() ); // to paint the solid arrowhead
    surface.Pen().Color( Color::Color( 255, 255, 255, 0.3 ) );
    
    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() );
  *]
}