private void DrawFlowPath(FWLine fwLine, FWSymbol startConnector, FWSymbol endConnector) { Point[] startPoints = startConnector.RectPoints; Point[] endPoints = endConnector.RectPoints; double minDistance = double.MaxValue; double distance; int shortestI = -1, shortestJ = -1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { distance = GetDistance(startPoints[i], endPoints[j]); if (minDistance > distance) { minDistance = distance; shortestI = i; shortestJ = j; } } } fwLine.DrawLine(startPoints[shortestI], endPoints[shortestJ]); }
private void ConvertFlowToXml() { FWSymbol terminalStart = null; terminalStart = FindTerminalSymbol(); if (terminalStart == null) { return; } FWSymbol currentSymbol = terminalStart; XmlWriterSettings xmlWriterSettings = new XmlWriterSettings() { Indent = true, IndentChars = "\t", NewLineOnAttributes = true }; using (XmlWriter xmlWriter = XmlWriter.Create(XmlPath, xmlWriterSettings)) { xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("Terminal"); StepIntoFlow(currentSymbol, xmlWriter); xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); } }
public FlowComponent(FWSymbol fwSymbol, FlowchartDesigner flowchartDesigner) { InitializeComponent(); FlowchartDesigner = flowchartDesigner; Shape content = fwSymbol.SymbolShape; content.Stretch = Stretch.Fill; //최소값 최대값 설정 확인 minWidth = content.MinWidth < 10.0 ? 10.0 : content.MinWidth; minHeight = content.MinHeight < 10.0 ? 10.0 : content.MinHeight; maxWidth = content.MaxWidth; maxHeight = content.MaxHeight; CanHResize = true; CanVResize = true; this.Width = fwSymbol.Width; this.Height = fwSymbol.Height; SetValue(Canvas.TopProperty, fwSymbol.Top); SetValue(Canvas.LeftProperty, fwSymbol.Left); this.Content = content; this.FWSymbol = fwSymbol; this.DataContext = fwSymbol; FWSymbol.PropertyChanged += FWSymbol_PropertyChanged; }
public void ReconnectLine() { foreach (FWSymbol fwSymbol in FWSymbolList) { if (fwSymbol is FWLine fwLine) { FWSymbol startConnector = fwLine.StartConnector; FWSymbol endConnector = fwLine.EndConnector; DrawFlowPath(fwLine, startConnector, endConnector); } } }
private void DrawSymbol(Type type, Point point) { FlowComponent flowComponent = null; FWSymbol fwSymbol = null; if (type.Equals(typeof(FWTerminal))) { fwSymbol = new FWTerminal(); } else if (type.Equals(typeof(FWReady))) { fwSymbol = new FWReady(); } else if (type.Equals(typeof(FWProcess))) { fwSymbol = new FWProcess(); } else if (type.Equals(typeof(FWDecision))) { fwSymbol = new FWDecision(); } if (fwSymbol != null) { fwSymbol.Left = Math.Round(point.X); fwSymbol.Top = Math.Round(point.Y); fwSymbol.Width = 100; fwSymbol.Height = 30; if (!FWSymbolList.Contains(fwSymbol)) { FWSymbolList.Add(fwSymbol); } flowComponent = new FlowComponent(fwSymbol, this); flowComponent.PropertyChanged += FlowComponent_PropertyChanged; flowComponent.PreviewMouseDown += FlowComponent_PreviewMouseDown; flowComponent.PreviewMouseUp += FlowComponent_PreviewMouseUp; canvasArea.Children.Add(flowComponent); FlowManager.Instance.FlowTool.Deselection(); } }
public void DeleteSymbol(FlowComponent flowComponent) { FWSymbol fwSymbol = flowComponent.FWSymbol; if (fwSymbol.StartConnector != null) { fwSymbol.StartConnector.EndConnector = null; } if (fwSymbol.EndConnector != null) { fwSymbol.EndConnector.StartConnector = null; } FWSymbolList.Remove(fwSymbol); canvasArea.Children.Remove(flowComponent); }
private void ConnectLine(FWSymbol startConnector, FWSymbol endConnector) { if (startConnector.EndConnector != null) { return; } FWLine fwLine = new FWLine { StartConnector = startConnector, EndConnector = endConnector }; if (startConnector is FWDecision fwDecision) { if (fwDecision.EndConnector[0] == null) { fwDecision.EndConnector[0] = fwLine; } else if (fwDecision.EndConnector[1] == null) { fwDecision.EndConnector[1] = fwLine; } else { return; } endConnector.StartConnector = fwLine; } else { startConnector.EndConnector = fwLine; endConnector.StartConnector = fwLine; } FWSymbolList.Add(fwLine); DrawFlowPath(fwLine, startConnector, endConnector); FlowComponent flowComponent = new FlowComponent(fwLine, this); canvasArea.Children.Add(flowComponent); }
private FWSymbol FindTerminalSymbol() { FWSymbol terminalStart = null; foreach (FWSymbol fwSymbol in FWSymbolList) { if (fwSymbol is FWTerminal fwTerminal) { if (fwTerminal.StartConnector == null && fwTerminal.EndConnector != null) { terminalStart = fwTerminal; break; } } } return(terminalStart); }
public FWDecisionWindow(FWSymbol fwSymbol) { InitializeComponent(); this.DataContext = fwSymbol; }
private void StepIntoFlow(FWSymbol currentSymbol, XmlWriter xmlWriter) { while ((currentSymbol = currentSymbol.EndConnector) != null) { if (currentSymbol is FWLine) { continue; } if (currentSymbol is FWReady fwReady) { xmlWriter.WriteStartElement("Ready"); xmlWriter.WriteAttributeString("Type", fwReady.VarType); xmlWriter.WriteAttributeString("Name", fwReady.VarName); xmlWriter.WriteEndElement(); } else if (currentSymbol is FWProcess fwProcess) { // 액션 종류 여러개임 if (fwProcess is ActionCodeInjection actionCodeInjection) { xmlWriter.WriteStartElement("Process"); xmlWriter.WriteAttributeString("ProcessName", "CodeInjection"); xmlWriter.WriteAttributeString("Code", actionCodeInjection.Code); xmlWriter.WriteEndElement(); } else if (fwProcess is ActionInputValue actionInputValue) { xmlWriter.WriteStartElement("Process"); xmlWriter.WriteAttributeString("ProcessName", "InputValue"); xmlWriter.WriteAttributeString("VarName", actionInputValue.VarName); xmlWriter.WriteAttributeString("VarValue", actionInputValue.VarValue); xmlWriter.WriteEndElement(); } else if (fwProcess is ActionMessageBox actionMessageBox) { xmlWriter.WriteStartElement("Process"); xmlWriter.WriteAttributeString("ProcessName", "MessageBox"); xmlWriter.WriteAttributeString("Message", actionMessageBox.Message); xmlWriter.WriteEndElement(); } else if (fwProcess is ActionListBoxAdd actionListBoxAdd) { xmlWriter.WriteStartElement("Process"); xmlWriter.WriteAttributeString("ProcessName", "ListBoxAdd"); xmlWriter.WriteAttributeString("ListBoxName", actionListBoxAdd.ListBoxName); xmlWriter.WriteAttributeString("ListBoxItem", actionListBoxAdd.ListBoxItem.ToString()); xmlWriter.WriteEndElement(); } else if (fwProcess is ActionListBoxRemove actionListBoxRemove) { xmlWriter.WriteStartElement("Process"); xmlWriter.WriteAttributeString("ProcessName", "ListBoxRemove"); xmlWriter.WriteAttributeString("ListBoxName", actionListBoxRemove.ListBoxName); xmlWriter.WriteAttributeString("ListBoxItem", actionListBoxRemove.ListBoxItem.ToString()); xmlWriter.WriteEndElement(); } // 추가 예정 else if (false) { } } else if (currentSymbol is FWDecision fwDecision) { //True if (fwDecision.DecisionTrue != null) { xmlWriter.WriteStartElement("Decision"); xmlWriter.WriteAttributeString("Condition", fwDecision.ConditionalExpression); StepIntoFlow(fwDecision.DecisionTrue, xmlWriter); xmlWriter.WriteEndElement(); } //False if (fwDecision.DecisionFalse != null) { xmlWriter.WriteStartElement("Decision"); xmlWriter.WriteAttributeString("Condition", "!(" + fwDecision.ConditionalExpression + ")"); StepIntoFlow(fwDecision.DecisionFalse, xmlWriter); xmlWriter.WriteEndElement(); } } } }