void activity_连接事件(object sender, EventArgs e) { ActivityControl act = sender as ActivityControl; LinkEventArgs c = e as LinkEventArgs; AddActivityPath("", c.起点, act.Name, c.路由条件, ""); }
public void AddActivity(ActivityControl activity) { if (string.IsNullOrEmpty(activity.Name)) { activity_n = activity_n + 1; activity.Name = "activity" + activity_n.ToString(); } if (NameList.Exists(p => p == activity.Name)) { return; } this.myDesigner.Children.Add(activity); ActivityControlList.Add(activity); activity.刷新事件 += new EventHandler(activity_刷新事件); activity.连接事件 += new EventHandler(activity_连接事件); activity.设计器 = this; activity.显示分支选项(); RefurbishActivityPath(); }
void DrawActivityPath(ActivityControl startingActivity, ActivityControl targetingActivity, Path pathObject, ActivityPath activityPath) { int i = startingActivity.分支集合.FindIndex(p => p == activityPath.路由); int l = 0; for (int n = 0; n <= i; n++) { l = startingActivity.分支集合[n].Length + l; } //double x1 = Canvas.GetLeft(起点) + 起点.Width - 15; double x1=0; double y1=0; switch (activityPath.路由) { case "开始状态": x1 = Canvas.GetLeft(startingActivity) + startingActivity.Width / 2; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height; break; case "回归": x1 = Canvas.GetLeft(startingActivity) + startingActivity.Width / 2; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height; break; default: x1 = Canvas.GetLeft(startingActivity) + 6 + (l * 11) + i * 5; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height - 10; break; } double x4 = Canvas.GetLeft(targetingActivity) + 20; double y4 = Canvas.GetTop(targetingActivity); double x2 = x1; double y2 = y1 + 100; double x3 = x4; double y3 = y4 - 100; PathFigure 形状子部分 = new PathFigure(); PathSegmentCollection 串线 = new PathSegmentCollection(); PathFigureCollection 形状集合 = new PathFigureCollection(); PathGeometry 形状 = new PathGeometry(); 形状子部分.StartPoint = new Point(x1, y1); 形状子部分.Segments = 串线; 形状集合.Add(形状子部分); 形状.Figures = 形状集合; pathObject.Data = 形状; pathObject.Stroke = System.Windows.Media.Brushes.Black; pathObject.StrokeThickness = 1; //BezierSegment b = new BezierSegment(); //b.Point1 = new Point(x2, y2); //b.Point2 = new Point(x3, y3); //b.Point3 = new Point(x4, y4); LineSegment b = new LineSegment(); b.Point = new Point(x4, y4); 串线.Add(b); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 + 5 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 + 4 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4, X = x4 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 - 5 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 - 6 } }); Canvas.SetLeft(activityPath.标签, x1 + (x4 - x1) / 2); Canvas.SetTop(activityPath.标签, y4 - (y4 - y1) / 2); }
void DrawActivityPath(ActivityControl startingActivity, ActivityControl targetingActivity, Path pathObject, ActivityPath activityPath) { int i = startingActivity.分支集合.FindIndex(p => p == activityPath.路由); int l = 0; for (int n = 0; n <= i; n++) { l = startingActivity.分支集合[n].Length + l; } //double x1 = Canvas.GetLeft(起点) + 起点.Width - 15; double x1 = 0; double y1 = 0; switch (activityPath.路由) { case "开始状态": x1 = Canvas.GetLeft(startingActivity) + startingActivity.Width / 2; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height; break; case "回归": x1 = Canvas.GetLeft(startingActivity) + startingActivity.Width / 2; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height; break; default: x1 = Canvas.GetLeft(startingActivity) + 6 + (l * 11) + i * 5; y1 = Canvas.GetTop(startingActivity) + startingActivity.Height - 10; break; } double x4 = Canvas.GetLeft(targetingActivity) + 20; double y4 = Canvas.GetTop(targetingActivity); double x2 = x1; double y2 = y1 + 100; double x3 = x4; double y3 = y4 - 100; PathFigure 形状子部分 = new PathFigure(); PathSegmentCollection 串线 = new PathSegmentCollection(); PathFigureCollection 形状集合 = new PathFigureCollection(); PathGeometry 形状 = new PathGeometry(); 形状子部分.StartPoint = new Point(x1, y1); 形状子部分.Segments = 串线; 形状集合.Add(形状子部分); 形状.Figures = 形状集合; pathObject.Data = 形状; pathObject.Stroke = System.Windows.Media.Brushes.Black; pathObject.StrokeThickness = 1; //BezierSegment b = new BezierSegment(); //b.Point1 = new Point(x2, y2); //b.Point2 = new Point(x3, y3); //b.Point3 = new Point(x4, y4); LineSegment b = new LineSegment(); b.Point = new Point(x4, y4); 串线.Add(b); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 + 5 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 + 4 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4, X = x4 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 - 5 } }); 串线.Add(new LineSegment() { Point = new Point() { Y = y4 - 10, X = x4 - 6 } }); Canvas.SetLeft(activityPath.标签, x1 + (x4 - x1) / 2); Canvas.SetTop(activityPath.标签, y4 - (y4 - y1) / 2); }