public PointF[] GetPoints() { List <MetafileParser.NormalizedPoint> list = new List <MetafileParser.NormalizedPoint>(); list.Add(this._points[0]); for (int i = 1; i < this._points.Count; i++) { if (!this.IsVisuallyIdentical(list[list.Count - 1], this._points[i])) { list.Add(this._points[i]); } } PointF[] result; if (list.Count <= 1) { result = null; } else { List <PointF> list2 = new List <PointF>(); for (int i = 0; i < list.Count; i++) { MetafileParser.VisualPoint visualPoint = this._visualPoints[list[i].VisualIndex]; if (!visualPoint.IsLocked) { double num = 0.0; double num2 = 0.0; int num3 = 0; int j = visualPoint.Weight; while (j > 0) { if (this._normalizedPoints[num3].VisualIndex == visualPoint.VisualIndex) { num += (double)this._normalizedPoints[num3].Point.X; num2 += (double)this._normalizedPoints[num3].Point.Y; j--; } num3++; } visualPoint.Point = new PointF((float)(num / (double)visualPoint.Weight), (float)(num2 / (double)visualPoint.Weight)); visualPoint.IsLocked = true; } list2.Add(visualPoint.Point); } result = list2.ToArray(); } return(result); }
private MetafileParser.NormalizedPoint Add(PointF point) { MetafileParser.VisualPoint visualPoint; MetafileParser.NormalizedPoint normalizedPoint; MetafileParser.NormalizedPoint result; for (int i = this._normalizedPoints.Count - 1; i >= 0; i--) { if (this.IsVisuallyIdentical(this._normalizedPoints[i].Point, point)) { visualPoint = this._visualPoints[this._normalizedPoints[i].VisualIndex]; visualPoint.Weight++; normalizedPoint = new MetafileParser.NormalizedPoint { Point = point, VisualIndex = visualPoint.VisualIndex }; this._normalizedPoints.Add(normalizedPoint); result = normalizedPoint; return(result); } } visualPoint = new MetafileParser.VisualPoint { IsLocked = false, VisualIndex = this._visualPoints.Count, Weight = 1 }; this._visualPoints.Add(visualPoint); normalizedPoint = new MetafileParser.NormalizedPoint { Point = point, VisualIndex = visualPoint.VisualIndex }; this._normalizedPoints.Add(normalizedPoint); result = normalizedPoint; return(result); }