//Adds a process shape and line and returns a process private SubChart AddSubChartImplementation(string key, Shape parent, Port port) { SubChart subChart = new SubChart(); PointF location = new PointF(); Group group = Runtime.CreateGroup(); SolidElement start = (port == null) ? (SolidElement)parent : (SolidElement)port; //Set the location if (Orientation == FlowchartOrientation.Vertical) { location = new PointF(start.Location.X, start.Location.Y + Spacing.Height); if (port == null) { location.Y += parent.Rectangle.Height; } } else { location = new PointF(start.Location.X + start.Rectangle.Width + Spacing.Width, start.Location.Y); if (port == null) { location.X += parent.Rectangle.Width; } } group.Location = location; Shapes.Add(key, group); //Offset the group if (Orientation == FlowchartOrientation.Vertical) { group.Location = new PointF(location.X + (start.Rectangle.Width - group.Rectangle.Width) / 2, location.Y); } else { group.Location = new PointF(location.X, location.Y + (start.Rectangle.Height - group.Rectangle.Height) / 2); } //Next add two ports depending on the orientation Port newport = null; if (Orientation == FlowchartOrientation.Vertical) { newport = new Port(PortOrientation.Top); //Keep reference to add line group.Ports.Add("top", newport); group.Ports.Add("bottom", new Port(PortOrientation.Bottom)); } else { newport = new Port(PortOrientation.Left); //Keep reference to add line group.Ports.Add("left", newport); group.Ports.Add("right", new Port(PortOrientation.Right)); } //Finally link the group to the parent shape Line line = CreateElement(LineMode); if (port == null) { line.Start.Shape = parent; } else { line.Start.Port = port; } line.End.Port = newport; line.End.Marker = new Arrow(false); Lines.Add(Lines.CreateKey(), line); //Set up subchart subChart.Line = line; subChart.Group = group; subChart.Port = port; return(subChart); }
//Adds a process shape and line and returns a process private SubChart AddSubChartImplementation(string key, Shape parent, Port port) { SubChart subChart = new SubChart(); PointF location = new PointF(); Group group = Runtime.CreateGroup(); SolidElement start = (port == null) ? (SolidElement) parent : (SolidElement) port; //Set the location if (Orientation == FlowchartOrientation.Vertical) { location = new PointF(start.Location.X, start.Location.Y + Spacing.Height); if (port == null) location.Y += parent.Rectangle.Height; } else { location = new PointF(start.Location.X + start.Rectangle.Width + Spacing.Width, start.Location.Y); if (port == null) location.X += parent.Rectangle.Width; } group.Location = location; Shapes.Add(key,group); //Offset the group if (Orientation == FlowchartOrientation.Vertical) { group.Location = new PointF(location.X + (start.Rectangle.Width - group.Rectangle.Width) / 2,location.Y); } else { group.Location = new PointF(location.X,location.Y + (start.Rectangle.Height - group.Rectangle.Height) / 2); } //Next add two ports depending on the orientation Port newport = null; if (Orientation == FlowchartOrientation.Vertical) { newport = new Port(PortOrientation.Top); //Keep reference to add line group.Ports.Add("top",newport); group.Ports.Add("bottom",new Port(PortOrientation.Bottom)); } else { newport = new Port(PortOrientation.Left); //Keep reference to add line group.Ports.Add("left",newport); group.Ports.Add("right",new Port(PortOrientation.Right)); } //Finally link the group to the parent shape Line line = CreateElement(LineMode); if (port == null) { line.Start.Shape = parent; } else { line.Start.Port = port; } line.End.Port = newport; line.End.Marker = new Arrow(false); Lines.Add(Lines.CreateKey(),line); //Set up subchart subChart.Line = line; subChart.Group = group; subChart.Port = port; return subChart; }