356 lines
29 KiB
C#
356 lines
29 KiB
C#
///
|
|
/// Copyright (c) 2020 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SchematicDrawing
|
|
{
|
|
public class DrawingShape
|
|
{
|
|
public readonly Shape Shape; /// see enum SchematicDrawing.Shape
|
|
public readonly Sz Sz; /// see enum SchematicDrawing.Sz
|
|
public readonly int SzX; /// Size X in SchematicDrawing.Const.Step pixels
|
|
public readonly int SzY; /// Size Y in SchematicDrawing.Const.Step pixels
|
|
|
|
public readonly bool HasImg; /// True when there is an image of this item to be displayed
|
|
public readonly Image ImgRight; /// Bitmap to be drawn (in the open state in case there are two states: open/closed)
|
|
public readonly Image ImgUp;
|
|
public readonly Image ImgLeft;
|
|
public readonly Image ImgDown;
|
|
public readonly Image ImgRightFlipped;
|
|
public readonly Image ImgUpFlipped;
|
|
public readonly Image ImgLeftFlipped;
|
|
public readonly Image ImgDownFlipped;
|
|
|
|
public readonly int OffsX; /// Offset of left/top coordinate of the bitmap when rendering
|
|
public readonly int OffsY; /// Offset of left/top coordinate of the bitmap when rendering
|
|
public readonly int Wid; /// Width of the bitmap when rendering, original bitmap is resized to this size
|
|
public readonly int Hgh; /// Height of the bitmap when rendering, original bitmap is resized to this size
|
|
public readonly bool HasValue; /// true when there is a measured or setpoint value to be displayed (in any form)
|
|
public readonly Node[] Nodes; /// Nodes of this shape
|
|
public readonly Edge[] Edges; /// Edges (in the open state in case there are two states: open/closed)
|
|
public readonly bool CanBeClosed; /// true = This shape hase two states: open and closed
|
|
public readonly Edge[] EdgesClosed; /// Optional edges in the closed state
|
|
|
|
public readonly Image ImgRightClosed; /// Optional bitmap in the closed state, size should be the same as the size of Bmp
|
|
public readonly Image ImgUpClosed;
|
|
public readonly Image ImgLeftClosed;
|
|
public readonly Image ImgDownClosed;
|
|
public readonly Image ImgRightFlippedClosed;
|
|
public readonly Image ImgUpFlippedClosed;
|
|
public readonly Image ImgLeftFlippedClosed;
|
|
public readonly Image ImgDownFlippedClosed;
|
|
|
|
DrawingShape(Shape shape, Sz sz, int szX, int szY, bool hasValue, Bitmap bmp = null, int offsX = 0, int offsY = 0, int wid = 0, int hgh = 0, Node[] nodes = null, Edge[] edges = null, Bitmap bmpClosed = null, Edge[] edgesClosed = null)
|
|
{
|
|
Shape = shape;
|
|
Sz = sz;
|
|
SzX = szX;
|
|
SzY = szY;
|
|
HasValue = hasValue;
|
|
HasImg = (bmp != null);
|
|
if (HasImg)
|
|
{
|
|
ImgRight = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgDown = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgLeft = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgUp = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
|
ImgRightFlipped = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgDownFlipped = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgLeftFlipped = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgUpFlipped = bmp.Clone() as Image;
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
|
}
|
|
OffsX = offsX;
|
|
OffsY = offsY;
|
|
Wid = wid;
|
|
Hgh = hgh;
|
|
Nodes = (nodes != null) ? nodes : new Node[0];
|
|
Edges = (edges != null) ? edges : new Edge[0];
|
|
CanBeClosed = (bmpClosed != null);
|
|
EdgesClosed = CanBeClosed ? edgesClosed : Edges;
|
|
if (HasImg && CanBeClosed)
|
|
{
|
|
ImgRightClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgDownClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgLeftClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgUpClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
bmpClosed.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
|
ImgRightFlippedClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgDownFlippedClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgLeftFlippedClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
ImgUpFlippedClosed = bmpClosed.Clone() as Image;
|
|
bmpClosed.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
bmpClosed.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
|
}
|
|
}
|
|
|
|
public Rectangle GetRotatedFlippedImageRectangle(Orient itemOrient, bool itemFlip)
|
|
{
|
|
if (itemFlip)
|
|
{
|
|
/// Flipped (mirror) image
|
|
switch (itemOrient)
|
|
{
|
|
default:
|
|
case Orient.R: return new Rectangle(OffsX, SchematicDrawing.Const.Step * SzY - Hgh - OffsY, Wid, Hgh);
|
|
case Orient.Up: return new Rectangle(OffsY, OffsX, Hgh, Wid);
|
|
case Orient.L: return new Rectangle(SchematicDrawing.Const.Step * SzX - Wid - OffsX, OffsY, Wid, Hgh);
|
|
case Orient.Dn: return new Rectangle(SchematicDrawing.Const.Step * SzY - Hgh - OffsY, SchematicDrawing.Const.Step * SzX - Wid - OffsX, Hgh, Wid);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/// Normal image
|
|
switch (itemOrient)
|
|
{
|
|
default:
|
|
case Orient.R: return new Rectangle(OffsX, OffsY, Wid, Hgh);
|
|
case Orient.Up: return new Rectangle(OffsY, SchematicDrawing.Const.Step * SzX - Wid - OffsX, Hgh, Wid);
|
|
case Orient.L: return new Rectangle(SchematicDrawing.Const.Step * SzX - Wid - OffsX, SchematicDrawing.Const.Step * SzY - Hgh - OffsY, Wid, Hgh);
|
|
case Orient.Dn: return new Rectangle(SchematicDrawing.Const.Step * SzY - Hgh - OffsY, OffsX, Hgh, Wid);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get coordinates and orientation of the rotated/flipped node
|
|
/// </summary>
|
|
/// <param name="nid">Node id</param>
|
|
/// <param name="itemOrient">Component orientation</param>
|
|
/// <param name="itemFlip">Component flip</param>
|
|
/// <returns>Rotated/flipped node</returns>
|
|
public Node GetRotatedFlippedNode(int nid, Orient itemOrient, bool itemFlip)
|
|
{
|
|
if (Nodes == null || nid < 0 || nid >= Nodes.Length) return new Node(0, 0, Orient.R);
|
|
Node node = Nodes[nid];
|
|
int ori = (int)itemOrient + (int)node.Orient;
|
|
///
|
|
if (itemFlip)
|
|
{
|
|
/// Flipped
|
|
if (ori % 2 == 1) ori += 2;
|
|
switch (itemOrient)
|
|
{
|
|
default:
|
|
case Orient.R: return new Node(node.X, SzY - node.Y, (Orient)(ori % 4));
|
|
case Orient.Up: return new Node(node.Y, node.X, (Orient)(ori % 4));
|
|
case Orient.L: return new Node(SzX - node.X, node.Y, (Orient)(ori % 4));
|
|
case Orient.Dn: return new Node(SzY - node.Y, SzX - node.X, (Orient)(ori % 4));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/// Normal
|
|
switch (itemOrient)
|
|
{
|
|
default:
|
|
case Orient.R: return new Node(node.X, node.Y, (Orient)(ori % 4));
|
|
case Orient.Up: return new Node(node.Y, SzX - node.X, (Orient)(ori % 4));
|
|
case Orient.L: return new Node(SzX - node.X, SzY - node.Y, (Orient)(ori % 4));
|
|
case Orient.Dn: return new Node(SzY - node.Y, node.X, (Orient)(ori % 4));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public static DrawingShape[] Shapes;
|
|
///
|
|
public static int DrShIx(Shape shape, Sz sz) { return (int)shape * (int)Sz.Count + (int)sz; }
|
|
///
|
|
public static DrawingShape GetDrawingShape(Shape shape, Sz sz) { return Shapes[DrShIx(shape, sz)]; }
|
|
///
|
|
public static DrawingShape GetDrawingShape(IDrawingItemCfg item) { return Shapes[DrShIx(item.Shape, item.Sz)]; }
|
|
|
|
/// <summary>
|
|
/// Static constructor that initializes Shapes[] array
|
|
/// </summary>
|
|
static DrawingShape()
|
|
{
|
|
Shapes = new DrawingShape[(int)Shape.Count * (int)Sz.Count];
|
|
|
|
/// Temperature meter
|
|
Shapes[DrShIx(Shape.TempM, Sz.S)] = new DrawingShape(Shape.TempM, Sz.S, 0, 0, true);
|
|
Shapes[DrShIx(Shape.TempM, Sz.M)] = new DrawingShape(Shape.TempM, Sz.M, 0, 0, true);
|
|
Shapes[DrShIx(Shape.TempM, Sz.L)] = new DrawingShape(Shape.TempM, Sz.L, 0, 0, true);
|
|
Shapes[DrShIx(Shape.TempM, Sz.XL)] = new DrawingShape(Shape.TempM, Sz.XL, 0, 0, true);
|
|
|
|
/// Pressure meter
|
|
Shapes[DrShIx(Shape.PressM, Sz.S)] = new DrawingShape(Shape.PressM, Sz.S, 0, 0, true);
|
|
Shapes[DrShIx(Shape.PressM, Sz.M)] = new DrawingShape(Shape.PressM, Sz.M, 0, 0, true);
|
|
Shapes[DrShIx(Shape.PressM, Sz.L)] = new DrawingShape(Shape.PressM, Sz.L, 0, 0, true);
|
|
Shapes[DrShIx(Shape.PressM, Sz.XL)] = new DrawingShape(Shape.PressM, Sz.XL, 0, 0, true);
|
|
|
|
/// Valve
|
|
Shapes[DrShIx(Shape.Valve, Sz.S)] = new DrawingShape(Shape.Valve, Sz.S, 2, 2, false, Properties.Resources.Valve_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 1, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Valve_S_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Valve, Sz.M)] = new DrawingShape(Shape.Valve, Sz.M, 3, 4, false, Properties.Resources.Valve_M_open, 0, 5, 30, 30,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(3, 2, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Valve_M_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Valve, Sz.L)] = new DrawingShape(Shape.Valve, Sz.L, 4, 4, false, Properties.Resources.Valve_L_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Valve_L_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Valve, Sz.XL)] = new DrawingShape(Shape.Valve, Sz.XL, 5, 6, false, Properties.Resources.Valve_XL_open, 0, 5, 50, 50,
|
|
new Node[] { new Node(0, 3, Orient.L), new Node(5, 3, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Valve_XL_closed, new Edge[] { });
|
|
|
|
/// Regulation valve
|
|
Shapes[DrShIx(Shape.RegV, Sz.S)] = new DrawingShape(Shape.RegV, Sz.S, 2, 2, true, Properties.Resources.RegV_S, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 1, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.RegV, Sz.M)] = new DrawingShape(Shape.RegV, Sz.M, 3, 4, true, Properties.Resources.RegV_M, 0, 5, 30, 30,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(3, 2, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.RegV, Sz.L)] = new DrawingShape(Shape.RegV, Sz.L, 4, 4, true, Properties.Resources.RegV_L, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.RegV, Sz.XL)] = new DrawingShape(Shape.RegV, Sz.XL, 5, 6, true, Properties.Resources.RegV_XL, 0, 5, 50, 50,
|
|
new Node[] { new Node(0, 3, Orient.L), new Node(5, 3, Orient.R) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
|
|
/// Pump
|
|
Shapes[DrShIx(Shape.Pump, Sz.S)] = new DrawingShape(Shape.Pump, Sz.S, 2, 2, false, Properties.Resources.Pump_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 1, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_S_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Pump, Sz.M)] = new DrawingShape(Shape.Pump, Sz.M, 3, 4, false, Properties.Resources.Pump_M_open, 0, 5, 30, 30,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(3, 2, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_M_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Pump, Sz.L)] = new DrawingShape(Shape.Pump, Sz.L, 4, 4, false, Properties.Resources.Pump_L_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_L_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.Pump, Sz.XL)] = new DrawingShape(Shape.Pump, Sz.XL, 5, 6, false, Properties.Resources.Pump_XL_open, 0, 5, 50, 50,
|
|
new Node[] { new Node(0, 3, Orient.L), new Node(5, 3, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_XL_closed, new Edge[] { });
|
|
|
|
/// Pump with frequency inverter
|
|
Shapes[DrShIx(Shape.PumpFM, Sz.S)] = new DrawingShape(Shape.PumpFM, Sz.S, 2, 2, true, Properties.Resources.Pump_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 1, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_S_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.PumpFM, Sz.M)] = new DrawingShape(Shape.PumpFM, Sz.M, 3, 4, true, Properties.Resources.Pump_M_open, 0, 5, 30, 30,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(3, 2, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_M_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.PumpFM, Sz.L)] = new DrawingShape(Shape.PumpFM, Sz.L, 4, 4, true, Properties.Resources.Pump_L_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_L_closed, new Edge[] { });
|
|
Shapes[DrShIx(Shape.PumpFM, Sz.XL)] = new DrawingShape(Shape.PumpFM, Sz.XL, 5, 6, true, Properties.Resources.Pump_XL_open, 0, 5, 50, 50,
|
|
new Node[] { new Node(0, 3, Orient.L), new Node(5, 3, Orient.R) }, new Edge[] { new Edge(0, 1) },
|
|
Properties.Resources.Pump_XL_closed, new Edge[] { });
|
|
|
|
/// Flow meter
|
|
Shapes[DrShIx(Shape.FlowM, Sz.S)] = new DrawingShape(Shape.FlowM, Sz.S, 2, 2, true, Properties.Resources.FlowM_S, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1) });
|
|
Shapes[DrShIx(Shape.FlowM, Sz.M)] = new DrawingShape(Shape.FlowM, Sz.M, 3, 4, true, Properties.Resources.FlowM_M, 0, 5, 30, 30,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(3, 2, Orient.R) },
|
|
new Edge[] { new Edge(0, 1) });
|
|
Shapes[DrShIx(Shape.FlowM, Sz.L)] = new DrawingShape(Shape.FlowM, Sz.L, 4, 4, true, Properties.Resources.FlowM_L, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) },
|
|
new Edge[] { new Edge(0, 1) });
|
|
Shapes[DrShIx(Shape.FlowM, Sz.XL)] = new DrawingShape(Shape.FlowM, Sz.XL, 5, 6, true, Properties.Resources.FlowM_XL, 0, 5, 50, 50,
|
|
new Node[] { new Node(0, 3, Orient.L), new Node(5, 3, Orient.R) },
|
|
new Edge[] { new Edge(0, 1) });
|
|
|
|
/// Water meter
|
|
Shapes[DrShIx(Shape.WaterM, Sz.L)] = new DrawingShape(Shape.WaterM, Sz.L, 4, 4, false, Properties.Resources.WaterM_L, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(4, 2, Orient.R) },
|
|
new Edge[] { new Edge(0, 1) });
|
|
Shapes[DrShIx(Shape.WaterM, Sz.S)] = Shapes[DrShIx(Shape.WaterM, Sz.L)];
|
|
Shapes[DrShIx(Shape.WaterM, Sz.M)] = Shapes[DrShIx(Shape.WaterM, Sz.L)];
|
|
Shapes[DrShIx(Shape.WaterM, Sz.XL)] = Shapes[DrShIx(Shape.WaterM, Sz.L)];
|
|
|
|
/// Junction
|
|
Shapes[DrShIx(Shape.Junction, Sz.S)] = new DrawingShape(Shape.Junction, Sz.S, 0, 0, false, null, 0, 0, 0, 0, new Node[] { new Node(0, 0, Orient.R) });
|
|
Shapes[DrShIx(Shape.Junction, Sz.M)] = new DrawingShape(Shape.Junction, Sz.M, 0, 0, false, null, 0, 0, 0, 0, new Node[] { new Node(0, 0, Orient.R) });
|
|
Shapes[DrShIx(Shape.Junction, Sz.L)] = new DrawingShape(Shape.Junction, Sz.L, 0, 0, false, null, 0, 0, 0, 0, new Node[] { new Node(0, 0, Orient.R) });
|
|
Shapes[DrShIx(Shape.Junction, Sz.XL)] = new DrawingShape(Shape.Junction, Sz.XL, 0, 0, false, null, 0, 0, 0, 0, new Node[] { new Node(0, 0, Orient.R) });
|
|
|
|
/// Knee
|
|
Shapes[DrShIx(Shape.Knee, Sz.K1)] = new DrawingShape(Shape.Knee, Sz.K1, 2, 2, false, Properties.Resources.Knee_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee_S_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K2)] = new DrawingShape(Shape.Knee, Sz.K2, 2, 2, false, Properties.Resources.Knee_M_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee_M_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K3)] = new DrawingShape(Shape.Knee, Sz.K3, 2, 2, false, Properties.Resources.Knee_L_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee_L_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K4)] = new DrawingShape(Shape.Knee, Sz.K4, 4, 4, false, Properties.Resources.Knee_XL_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(2, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee_XL_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K5)] = new DrawingShape(Shape.Knee, Sz.K5, 2, 2, false, Properties.Resources.Knee2_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee2_S_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K6)] = new DrawingShape(Shape.Knee, Sz.K6, 2, 2, false, Properties.Resources.Knee2_M_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee2_M_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K7)] = new DrawingShape(Shape.Knee, Sz.K7, 3, 2, false, Properties.Resources.Knee2_L_open, 0, 0, 30, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee2_L_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
Shapes[DrShIx(Shape.Knee, Sz.K8)] = new DrawingShape(Shape.Knee, Sz.K8, 4, 4, false, Properties.Resources.Knee2_XL_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(2, 0, Orient.Up) }, new Edge[] { new Edge(0, 1), new Edge(1, 0) },
|
|
Properties.Resources.Knee2_XL_closed, new Edge[] { new Edge(0, 1), new Edge(1, 0) });
|
|
|
|
/// Tee
|
|
Shapes[DrShIx(Shape.Tee, Sz.K1)] = new DrawingShape(Shape.Tee, Sz.K1, 2, 2, false, Properties.Resources.Tee_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee_S_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K2)] = new DrawingShape(Shape.Tee, Sz.K2, 2, 2, false, Properties.Resources.Tee_M_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee_M_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K3)] = new DrawingShape(Shape.Tee, Sz.K3, 2, 2, false, Properties.Resources.Tee_L_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee_L_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K4)] = new DrawingShape(Shape.Tee, Sz.K4, 4, 4, false, Properties.Resources.Tee_XL_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(2, 0, Orient.Up), new Node(4, 2, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee_XL_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K5)] = new DrawingShape(Shape.Tee, Sz.K5, 2, 2, false, Properties.Resources.Tee2_S_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee2_S_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K6)] = new DrawingShape(Shape.Tee, Sz.K6, 2, 2, false, Properties.Resources.Tee2_M_open, 0, 0, 20, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(1, 0, Orient.Up), new Node(2, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee2_M_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K7)] = new DrawingShape(Shape.Tee, Sz.K7, 3, 2, false, Properties.Resources.Tee2_L_open, 0, 0, 30, 20,
|
|
new Node[] { new Node(0, 1, Orient.L), new Node(2, 0, Orient.Up), new Node(3, 1, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee2_L_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
Shapes[DrShIx(Shape.Tee, Sz.K8)] = new DrawingShape(Shape.Tee, Sz.K8, 4, 4, false, Properties.Resources.Tee2_XL_open, 0, 0, 40, 40,
|
|
new Node[] { new Node(0, 2, Orient.L), new Node(2, 0, Orient.Up), new Node(4, 2, Orient.R) },
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) },
|
|
Properties.Resources.Tee2_XL_closed,
|
|
new Edge[] { new Edge(0, 1), new Edge(1, 0), new Edge(0, 2), new Edge(2, 0), new Edge(2, 1), new Edge(1, 2) });
|
|
}
|
|
}
|
|
}
|