public static void Reconnect(ICanvas canvas, ILine line, IElement splitPin, double x, double y, List<Connection> connections, ILine currentLine, IDiagramCreator creator) { var wire1 = connections[0].Wires.FirstOrDefault(); var wire2 = connections[1].Wires.FirstOrDefault(); var startRoot = (wire1.Start != null ? wire1.Start : wire2.Start) as IElement; var endRoot = (wire1.End != null ? wire1.End : wire2.End) as IElement; PointEx start; PointEx end; GetLocation(wire1, wire2, out start, out end); if (start != null && end != null) { var startLine = Connect(canvas, startRoot, currentLine, start.X, start.Y, creator); var splitLine = Connect(canvas, splitPin, startLine, x, y, creator); var endLine = Connect(canvas, splitPin, splitLine, x, y, creator); Connect(canvas, endRoot, endLine, start.X + end.X, start.Y + end.Y, creator); startLine.SetStartVisible(line.GetStartVisible()); startLine.SetStartIO(line.GetStartIO()); endLine.SetEndVisible(line.GetEndVisible()); endLine.SetEndIO(line.GetEndIO()); } else { throw new InvalidOperationException("LineEx must have Start and End points."); } }
public static void Redo(ICanvas canvas, IDiagramCreator creator, bool pushUndo) { var history = Get(canvas); var undo = history.Undo; var redo = history.Redo; if (redo.Count <= 0) { return; } // save current model if (pushUndo == true) { var current = ModelEditor.GenerateDiagram(canvas, null, canvas.GetProperties()); undo.Push(current); } // restore previous model var model = redo.Pop(); ModelEditor.Clear(canvas); ModelEditor.Parse(model, canvas, creator, 0, 0, false, true, false, true); NotifyCanvasHistoryChanged(new CanvasHistoryChangedEventArgs() { Canvas = canvas, Undo = undo, Redo = redo }); }
public static TreeItemType SwitchItems(ICanvas canvas, IDiagramCreator creator, ITreeItem oldItem, ITreeItem newItem, Action <DiagramProperties> setProperties) { if (newItem == null) { return(TreeItemType.None); } var oldItemType = GetTreeItemType(oldItem == null ? null : oldItem.GetUid()); var newItemType = GetTreeItemType(newItem == null ? null : newItem.GetUid()); if (oldItemType == TreeItemType.Diagram) { ModelEditor.Store(canvas, oldItem); } if (newItemType == TreeItemType.Diagram) { ModelEditor.Load(canvas, creator, newItem); if (setProperties != null) { setProperties(canvas.GetProperties()); } } return(newItemType); }
public static void Reconnect(ICanvas canvas, ILine line, IElement splitPin, double x, double y, List <Connection> connections, ILine currentLine, IDiagramCreator creator) { var wire1 = connections[0].Wires.FirstOrDefault(); var wire2 = connections[1].Wires.FirstOrDefault(); var startRoot = (wire1.Start != null ? wire1.Start : wire2.Start) as IElement; var endRoot = (wire1.End != null ? wire1.End : wire2.End) as IElement; PointEx start; PointEx end; GetLocation(wire1, wire2, out start, out end); if (start != null && end != null) { var startLine = Connect(canvas, startRoot, currentLine, start.X, start.Y, creator); var splitLine = Connect(canvas, splitPin, startLine, x, y, creator); var endLine = Connect(canvas, splitPin, splitLine, x, y, creator); Connect(canvas, endRoot, endLine, start.X + end.X, start.Y + end.Y, creator); startLine.SetStartVisible(line.GetStartVisible()); startLine.SetStartIO(line.GetStartIO()); endLine.SetEndVisible(line.GetEndVisible()); endLine.SetEndIO(line.GetEndIO()); } else { throw new InvalidOperationException("LineEx must have Start and End points."); } }
public static IElement AndGate(ICanvas canvas, IPoint point, IDiagramCreator creator, bool snap) { var thumb = creator.CreateElement(Constants.TagElementAndGate, new object[] { canvas.GetCounter().Next() }, point.X, point.Y, snap) as IThumb; canvas.Add(thumb); return(thumb); }
public static IElement Pin(ICanvas canvas, IPoint point, IDiagramCreator creator, bool snap) { var thumb = creator.CreateElement(Constants.TagElementPin, new object[] { canvas.GetCounter().Next() }, point.X, point.Y, snap) as IThumb; canvas.Add(thumb); return thumb; }
public static void Load(ICanvas canvas, IDiagramCreator creator, ITreeItem item) { var tag = item.GetTag(); Clear(canvas); if (tag != null) { LoadFromTag(canvas, creator, tag); } }
public static void LoadFromTag(ICanvas canvas, IDiagramCreator creator, object tag) { var diagram = tag as Diagram; canvas.SetTag(diagram.History); Parse(diagram.Model, canvas, creator, 0, 0, false, true, false, true); }
public static void SetGrid(ICanvas canvas, IDiagramCreator creator) { var prop = canvas.GetProperties(); creator.CreateGrid(prop.GridOriginX, prop.GridOriginY, prop.GridWidth, prop.GridHeight, prop.GridSize); canvas.SetWidth(prop.PageWidth); canvas.SetHeight(prop.PageHeight); }
public static ILine Connect(ICanvas canvas, IElement root, ILine line, double x, double y, IDiagramCreator creator) { var rootTag = root.GetTag(); if (rootTag == null) root.SetTag(new Connection(root, new List<Wire>())); var connection = root.GetTag() as Connection; var wires = connection.Wires; if (line == null) return FirstConnection(canvas, root, x, y, wires, creator); else return SecondConnection(root, line, x, y, wires); }
public static TreeSolution Parse(string model, ICanvas canvas, IDiagramCreator creator, double offsetX, double offsetY, bool appendIds, bool updateIds, bool select, bool createElements) { var parser = new Parser(); var options = new ParseOptions() { OffsetX = offsetX, OffsetY = offsetY, AppendIds = appendIds, UpdateIds = updateIds, Select = select, CreateElements = createElements, Counter = canvas != null?canvas.GetCounter() : null, Properties = canvas != null?canvas.GetProperties() : null }; var temp = creator.GetCanvas(); creator.SetCanvas(canvas); var result = parser.Parse(model, creator, options); creator.SetCanvas(temp); if (updateIds == true) { canvas.SetCounter(options.Counter); } if (createElements == true) { canvas.SetProperties(options.Properties); } return(result); }
private void Connect(ICanvas canvas, IThumb pin, IDiagramCreator creator) { if (pin == null) { return; } Context.CurrentRoot = pin.GetParent() as IThumb; double x; double y; ModelEditor.GetPinPosition(Context.CurrentRoot, pin, out x, out y); Context.CurrentLine = WireEditor.Connect(canvas, Context.CurrentRoot, Context.CurrentLine, x, y, creator); if (Context.CurrentLine == null) { Context.CurrentRoot = null; } }
public static void Undo(ICanvas canvas, IDiagramCreator creator, bool pushRedo) { var history = Get(canvas); var undo = history.Undo; var redo = history.Redo; if (undo.Count <= 0) return; // save current model if (pushRedo == true) { var current = ModelEditor.GenerateDiagram(canvas, null, canvas.GetProperties()); redo.Push(current); } // restore previous model var model = undo.Pop(); ModelEditor.Clear(canvas); ModelEditor.Parse(model, canvas, creator, 0, 0, false, true, false, true); NotifyCanvasHistoryChanged(new CanvasHistoryChangedEventArgs() { Canvas = canvas, Undo = undo, Redo = redo }); }
public TreeSolution Parse(string model, IDiagramCreator creator, ParseOptions options) { if (model == null || creator == null || options == null) { return(null); } double offsetX = options.OffsetX; double offsetY = options.OffsetY; bool appendIds = options.AppendIds; bool updateIds = options.UpdateIds; bool select = options.Select; bool createElements = options.CreateElements; string name = null; string root = null; var counter = new IdCounter(); var total = new IdCounter(); var elements = new List <object>(); Child child = null; var dict = new Dictionary <string, Child>(); TreeSolution solution = null; TreeProjects projects = null; TreeProject project = null; TreeDiagrams diagrams = null; TreeDiagram diagram = null; var lines = model.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { var args = GetArgs(line); int length = args.Length; if (length < 2) { continue; } root = args[0]; name = args[1]; // root element if (StringUtil.Compare(root, Constants.PrefixRoot)) { // Solution if (StringUtil.StartsWith(name, Constants.TagHeaderSolution) && (length == 2 || length == 3 || length == 4)) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); string tagFileName = (length == 3) ? args[2] : null; string tableFileName = (length == 4) ? args[3] : null; projects = new TreeProjects(); solution = new TreeSolution(name, tagFileName, tableFileName, projects); } // Project else if (StringUtil.StartsWith(name, Constants.TagHeaderProject) && length == 2) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); if (projects != null) { diagrams = new TreeDiagrams(); project = new TreeProject(name, diagrams); projects.Push(project); } } // Diagram else if (StringUtil.StartsWith(name, Constants.TagHeaderDiagram) && length == 13) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); if (diagrams != null) { diagram = new TreeDiagram(); diagrams.Push(diagram); diagram.Push(line); } if (createElements == true) { var prop = new DiagramProperties(); prop.PageWidth = int.Parse(args[2]); prop.PageHeight = int.Parse(args[3]); prop.GridOriginX = int.Parse(args[4]); prop.GridOriginY = int.Parse(args[5]); prop.GridWidth = int.Parse(args[6]); prop.GridHeight = int.Parse(args[7]); prop.GridSize = int.Parse(args[8]); prop.SnapX = double.Parse(args[9]); prop.SnapY = double.Parse(args[10]); prop.SnapOffsetX = double.Parse(args[11]); prop.SnapOffsetY = double.Parse(args[12]); creator.CreateDiagram(prop); options.Properties = prop; } } // Pin else if (StringUtil.StartsWith(name, Constants.TagElementPin) && length == 4) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementPin, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // Input else if (StringUtil.StartsWith(name, Constants.TagElementInput) && (length == 4 || length == 5)) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); int tagId = (length == 5) ? int.Parse(args[4]) : -1; counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementInput, new object[] { id, tagId }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // Output else if (StringUtil.StartsWith(name, Constants.TagElementOutput) && (length == 4 || length == 5)) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); int tagId = (length == 5) ? int.Parse(args[4]) : -1; counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementOutput, new object[] { id, tagId }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // AndGate else if (StringUtil.StartsWith(name, Constants.TagElementAndGate) && length == 4) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementAndGate, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // OrGate else if (StringUtil.StartsWith(name, Constants.TagElementOrGate) && length == 4) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementOrGate, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // Wire else if (StringUtil.StartsWith(name, Constants.TagElementWire) && (length == 6 || length == 8 || length == 10)) { if (diagram != null) { diagram.Push(line); } total.Next(); if (createElements == true) { double x1 = double.Parse(args[2]); double y1 = double.Parse(args[3]); double x2 = double.Parse(args[4]); double y2 = double.Parse(args[5]); bool startVisible = (length == 8 || length == 10) ? bool.Parse(args[6]) : false; bool endVisible = (length == 8 || length == 10) ? bool.Parse(args[7]) : false; bool startIsIO = (length == 10) ? bool.Parse(args[8]) : false; bool endIsIO = (length == 10) ? bool.Parse(args[9]) : false; int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementWire, new object[] { x1 + offsetX, y1 + offsetY, x2 + offsetX, y2 + offsetY, startVisible, endVisible, startIsIO, endIsIO, id }, 0.0, 0.0, false); elements.Add(element); child = new Child(element, new List <Pin>()); if (dict.ContainsKey(name) == false) { dict.Add(name, child); } else { System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } } // child element else if (StringUtil.Compare(root, Constants.PrefixChild)) { if (StringUtil.StartsWith(name, Constants.TagElementWire) && length == 3) { if (diagram != null) { diagram.Push(line); } if (createElements == true && child != null) { var pins = child.Pins; pins.Add(new Pin(name, args[2])); } } } } if (createElements == true) { creator.UpdateConnections(dict); if (appendIds == true) { creator.AppendIds(elements); } if (updateIds == true) { creator.UpdateCounter(options.Counter, counter); } creator.InsertElements(elements, select, offsetX, offsetY); } return(solution); }
private void Connect(ICanvas canvas, IThumb pin, IDiagramCreator creator) { if (pin == null) return; Context.CurrentRoot = pin.GetParent() as IThumb; double x; double y; ModelEditor.GetPinPosition(Context.CurrentRoot, pin, out x, out y); Context.CurrentLine = WireEditor.Connect(canvas, Context.CurrentRoot, Context.CurrentLine, x, y, creator); if (Context.CurrentLine == null) Context.CurrentRoot = null; }
private static ILine FirstConnection(ICanvas canvas, IElement root, double x, double y, List<Wire> wires, IDiagramCreator creator) { var counter = canvas.GetCounter(); string rootUid = root.GetUid(); bool startIsIO = StringUtil.StartsWith(rootUid, Constants.TagElementInput) || StringUtil.StartsWith(rootUid, Constants.TagElementOutput); var line = creator.CreateElement(Constants.TagElementWire, new object[] { x, y, x, y, false, false, startIsIO, false, counter.Next() }, 0.0, 0.0, false) as ILine; wires.Add(new Wire(line, root, null)); canvas.Add(line); if (line != null || !(line is ILine)) line.SetTag(root); return line; }
public TreeSolution Parse(string model, IDiagramCreator creator, ParseOptions options) { if (model == null || creator == null || options == null) return null; double offsetX = options.OffsetX; double offsetY = options.OffsetY; bool appendIds = options.AppendIds; bool updateIds = options.UpdateIds; bool select = options.Select; bool createElements = options.CreateElements; string name = null; string root = null; var counter = new IdCounter(); var total = new IdCounter(); var elements = new List<object>(); Child child = null; var dict = new Dictionary<string, Child>(); TreeSolution solution = null; TreeProjects projects = null; TreeProject project = null; TreeDiagrams diagrams = null; TreeDiagram diagram = null; var lines = model.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { var args = GetArgs(line); int length = args.Length; if (length < 2) continue; root = args[0]; name = args[1]; // root element if (StringUtil.Compare(root, Constants.PrefixRoot)) { // Solution if (StringUtil.StartsWith(name, Constants.TagHeaderSolution) && (length == 2 || length == 3 || length == 4)) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); string tagFileName = (length == 3) ? args[2] : null; string tableFileName = (length == 4) ? args[3] : null; projects = new TreeProjects(); solution = new TreeSolution(name, tagFileName, tableFileName, projects); } // Project else if (StringUtil.StartsWith(name, Constants.TagHeaderProject) && length == 2) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); if (projects != null) { diagrams = new TreeDiagrams(); project = new TreeProject(name, diagrams); projects.Push(project); } } // Diagram else if (StringUtil.StartsWith(name, Constants.TagHeaderDiagram) && length == 13) { int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); total.Next(); if (diagrams != null) { diagram = new TreeDiagram(); diagrams.Push(diagram); diagram.Push(line); } if (createElements == true) { var prop = new DiagramProperties(); prop.PageWidth = int.Parse(args[2]); prop.PageHeight = int.Parse(args[3]); prop.GridOriginX = int.Parse(args[4]); prop.GridOriginY = int.Parse(args[5]); prop.GridWidth = int.Parse(args[6]); prop.GridHeight = int.Parse(args[7]); prop.GridSize = int.Parse(args[8]); prop.SnapX = double.Parse(args[9]); prop.SnapY = double.Parse(args[10]); prop.SnapOffsetX = double.Parse(args[11]); prop.SnapOffsetY = double.Parse(args[12]); creator.CreateDiagram(prop); options.Properties = prop; } } // Pin else if (StringUtil.StartsWith(name, Constants.TagElementPin) && length == 4) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementPin, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } // Input else if (StringUtil.StartsWith(name, Constants.TagElementInput) && (length == 4 || length == 5)) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); int tagId = (length == 5) ? int.Parse(args[4]) : -1; counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementInput, new object[] { id, tagId }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } // Output else if (StringUtil.StartsWith(name, Constants.TagElementOutput) && (length == 4 || length == 5)) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); int tagId = (length == 5) ? int.Parse(args[4]) : -1; counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementOutput, new object[] { id, tagId }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } // AndGate else if (StringUtil.StartsWith(name, Constants.TagElementAndGate) && length == 4) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementAndGate, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } // OrGate else if (StringUtil.StartsWith(name, Constants.TagElementOrGate) && length == 4) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x = double.Parse(args[2]); double y = double.Parse(args[3]); int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementOrGate, new object[] { id }, x + offsetX, y + offsetY, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } // Wire else if (StringUtil.StartsWith(name, Constants.TagElementWire) && (length == 6 || length == 8 || length == 10)) { if (diagram != null) diagram.Push(line); total.Next(); if (createElements == true) { double x1 = double.Parse(args[2]); double y1 = double.Parse(args[3]); double x2 = double.Parse(args[4]); double y2 = double.Parse(args[5]); bool startVisible = (length == 8 || length == 10) ? bool.Parse(args[6]) : false; bool endVisible = (length == 8 || length == 10) ? bool.Parse(args[7]) : false; bool startIsIO = (length == 10) ? bool.Parse(args[8]) : false; bool endIsIO = (length == 10) ? bool.Parse(args[9]) : false; int id = int.Parse(name.Split(Constants.TagNameSeparator)[1]); counter.Set(Math.Max(counter.Count, id + 1)); var element = creator.CreateElement(Constants.TagElementWire, new object[] { x1 + offsetX, y1 + offsetY, x2 + offsetX, y2 + offsetY, startVisible, endVisible, startIsIO, endIsIO, id }, 0.0, 0.0, false); elements.Add(element); child = new Child(element, new List<Pin>()); if (dict.ContainsKey(name) == false) dict.Add(name, child); else System.Diagnostics.Debug.Print("Dictionary already contains name key: {0}", name); } } } // child element else if (StringUtil.Compare(root, Constants.PrefixChild)) { if (StringUtil.StartsWith(name, Constants.TagElementWire) && length == 3) { if (diagram != null) diagram.Push(line); if (createElements == true && child != null) { var pins = child.Pins; pins.Add(new Pin(name, args[2])); } } } } if (createElements == true) { creator.UpdateConnections(dict); if (appendIds == true) creator.AppendIds(elements); if (updateIds == true) creator.UpdateCounter(options.Counter, counter); creator.InsertElements(elements, select, offsetX, offsetY); } return solution; }
private static ILine FirstConnection(ICanvas canvas, IElement root, double x, double y, List <Wire> wires, IDiagramCreator creator) { var counter = canvas.GetCounter(); string rootUid = root.GetUid(); bool startIsIO = StringUtil.StartsWith(rootUid, Constants.TagElementInput) || StringUtil.StartsWith(rootUid, Constants.TagElementOutput); var line = creator.CreateElement(Constants.TagElementWire, new object[] { x, y, x, y, false, false, startIsIO, false, counter.Next() }, 0.0, 0.0, false) as ILine; wires.Add(new Wire(line, root, null)); canvas.Add(line); if (line != null || !(line is ILine)) { line.SetTag(root); } return(line); }
public static ILine Connect(ICanvas canvas, IElement root, ILine line, double x, double y, IDiagramCreator creator) { var rootTag = root.GetTag(); if (rootTag == null) { root.SetTag(new Connection(root, new List <Wire>())); } var connection = root.GetTag() as Connection; var wires = connection.Wires; if (line == null) { return(FirstConnection(canvas, root, x, y, wires, creator)); } else { return(SecondConnection(root, line, x, y, wires)); } }
public static bool Split(ICanvas canvas, ILine line, ILine currentLine, IPoint point, IDiagramCreator creator, bool snap) { var pin = Insert.Pin(canvas, point, creator, snap); double x = pin.GetX(); double y = pin.GetY(); var temp = Connect(canvas, pin, currentLine, x, y, creator); canvas.Remove(line); var connections = ModelEditor.RemoveWireConnections(canvas, line); if (connections != null && connections.Count == 2) { Reconnect(canvas, line, pin, x, y, connections, temp, creator); } else { throw new InvalidOperationException("LineEx should have only two connections: Start and End."); } return(true); }
public static bool Split(ICanvas canvas, ILine line, ILine currentLine, IPoint point, IDiagramCreator creator, bool snap) { var pin = Insert.Pin(canvas, point, creator, snap); double x = pin.GetX(); double y = pin.GetY(); var temp = Connect(canvas, pin, currentLine, x, y, creator); canvas.Remove(line); var connections = ModelEditor.RemoveWireConnections(canvas, line); if (connections != null && connections.Count == 2) Reconnect(canvas, line, pin, x, y, connections, temp, creator); else throw new InvalidOperationException("LineEx should have only two connections: Start and End."); return true; }
public static TreeItemType SwitchItems(ICanvas canvas, IDiagramCreator creator, ITreeItem oldItem, ITreeItem newItem, Action<DiagramProperties> setProperties) { if (newItem == null) return TreeItemType.None; var oldItemType = GetTreeItemType(oldItem == null ? null : oldItem.GetUid()); var newItemType = GetTreeItemType(newItem == null ? null : newItem.GetUid()); if (oldItemType == TreeItemType.Diagram) ModelEditor.Store(canvas, oldItem); if (newItemType == TreeItemType.Diagram) { ModelEditor.Load(canvas, creator, newItem); if (setProperties != null) setProperties(canvas.GetProperties()); } return newItemType; }