/// <summary> /// 从视图坐标系(屏幕上)移除圆的投影 /// </summary> /// <param name="circle">逻辑坐标系中的圆</param> /// <returns>操作结果</returns> public int RemoveCircle(Circle circle) { foreach (OutputGeometry outputGeometry in outputPointSetList) { if (outputGeometry is OutputCircle) { OutputCircle outputCircle = outputGeometry as OutputCircle; if (outputCircle.circle == circle) { outputPointSetList.Remove(outputGeometry); return(1); } } } return(0); }
/// <summary> /// 添加逻辑坐标系中圆在视图坐标系的投影 /// </summary> /// <param name="circle"></param> /// <returns>操作结果</returns> public int AddCircle(Circle circle) { OutputCircle outputCircle = new OutputCircle() { borderType = ViewType.Solid, isVisible = true, fillColor = Color.FromArgb(255, 76, 123, 207), lineColor = Color.FromArgb(255, 76, 123, 207), circle = circle, selectedFillColor = Color.FromArgb(255, 128, 128, 128), selectedLineColor = Color.FromArgb(255, 255, 99, 71), thickness = 8, center = ToVector2(circle.center), radius = (ToVector2(circle.center) - ToVector2(circle.radius)).Length(), }; circle.resultCircle = outputCircle; outputPointSetList.Add(outputCircle); return(0); }
/// <summary> /// 刷新显示坐标系中所有的元素坐标 /// </summary> public void refreshGeometrys() { foreach (OutputPoint outputPoint in outputPointList) { outputPoint.viewPoint = ToVector2(outputPoint.point); } int i = 0; OutputGeometry outputGeometry; while (i < outputPointSetList.Count) { outputGeometry = outputPointSetList[i]; if (outputGeometry is OutputPoint) { throw new Exception("不可能触发的异常"); } else if (outputGeometry is OutputLine) { OutputLine outLine = outputGeometry as OutputLine; Line line = outLine.line; if (line.lineRely == LineRely.Normal) //两点生成 { if (line.type == LineType.Line) //线段 { if (!(outputPointSetList[i + 1] is OutputLine)) { throw new Exception(); } if ((outputPointSetList[i + 1] as OutputLine).line != line) { throw new Exception(); } Vector2 v1 = ToVector2(line.p1); Vector2 v2 = ToVector2(line.p2); Vector2 v3 = new Vector2(); Vector2 v4 = new Vector2(); if (v1.X == v2.X) //竖线 { v3.X = v1.X; v3.Y = 0; v4.X = v1.X; v4.Y = WindowHeight; } else if (Math.Abs(v2.Y - v1.Y) > Math.Abs(v2.X - v1.X)) { v3.X = v1.X - v1.Y * (v1.X - v2.X) / (v1.Y - v2.Y); v3.Y = 0; v4.X = (WindowHeight - v1.Y) / (v2.Y - v1.Y) * v2.X + (v2.Y - WindowHeight) / (v2.Y - v1.Y) * v1.X; v4.Y = WindowHeight; } else if (Math.Abs(v2.Y - v1.Y) <= Math.Abs(v2.X - v1.X)) { v3.X = WindowWidth; v3.Y = (WindowWidth - v1.X) / (v2.X - v1.X) * v2.Y + (v2.X - WindowWidth) / (v2.X - v1.X) * v1.Y; v4.X = 0; v4.Y = v1.Y - v1.X * (v1.Y - v2.Y) / (v1.X - v2.X); } else { throw new Exception(); } OutputLine outputLineNew = new OutputLine() { borderType = ViewType.Solid, isVisible = true, fillColor = Color.FromArgb(255, 76, 123, 207), lineColor = Color.FromArgb(255, 76, 123, 207), line = line, selectedFillColor = Color.FromArgb(255, 130, 91, 230), selectedLineColor = Color.FromArgb(255, 255, 99, 91), thickness = 8, p1 = v1, p2 = v2, }; OutputLine outputLineStraightNew = new OutputLine() { borderType = ViewType.Solid, isVisible = true, fillColor = Color.FromArgb(128, 86, 106, 143), lineColor = Color.FromArgb(128, 86, 106, 143), line = line, selectedFillColor = Color.FromArgb(128, 86, 106, 143), selectedLineColor = Color.FromArgb(128, 86, 106, 143), thickness = 8, p1 = v3, p2 = v4, }; line.resultLine.Clear(); line.resultLine.Add(outputLineStraightNew); //先画延长线 outputPointSetList[i] = outputLineStraightNew; line.resultLine.Add(outputLineNew); //覆盖线段 outputPointSetList[i + 1] = outputLineNew; i = i + 2; } } } else if (outputGeometry is OutputCircle) { OutputCircle outputCircle = outputGeometry as OutputCircle; outputCircle.center = ToVector2(outputCircle.circle.center); outputCircle.radius = (ToVector2(outputCircle.circle.center) - ToVector2(outputCircle.circle.radius)).Length(); i++; } } }