陈清红
2025-04-14 880f3c0257eeb8c37761d484258fdd102a369a19
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
Quintiq file version 2.0
#parent: CustomDrawComponentRoutingConfigurator/CustomDrawDataLayerOperationLinkEdgeRCV
Response OnDrawObject (
  OperationLinkEdge object
) id:Response_CustomDrawComponentRoutingConfigurator_CustomDrawDataLayerOperationLinkEdgeRCV_OnDrawObject
{
  #keys: '[124808.0.1235006012]'
  Body:
  [*
    // Draw operation link 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() + padding;
    tox := region.Width() - padding;
    
    if( topdown )
    {
      if( not leftright )
      {
        fromx := region.Width() - padding;
        tox := region.Left() + padding;
      }
    }
    else
    {
      if( leftright )
      {
        fromx := region.Width() - padding;
        tox := region.Left() + padding;
      }
    }
    
    surface.Brush().Reset(); // strange. without this line, the arrow head will not be filled.
    surface.Pen().Color( ColorScheme.Outline() );
    surface.Brush().Color( ColorScheme.Outline() ); // to paint the solid arrowhead
    
    // Highlight operation input outputs related to this edge
    highlight := object.IsLinkOf( DataHolderHighlightOperationInputOutputNode.Data() );
    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::StyleDotted() );
    surface.Pen().Width( rcv.EdgeThickness() );
    
    // Draw the directional line
    line := GraphicalLine::LineTo(  fromx, region.Top(), tox, region.Height() );
    line.ArrowToEnd( topdown ).ArrowPos( GraphicalLine::ArrowPosMiddle() );  
    surface.Draw( line );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_CustomDrawDataLayer_OnDrawObject'
  Precondition:
  [*
    return not isnull( DataHolderRCView.Data() );
  *]
}