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
|
}
|
}
|