protected override SegmentedList <PointDouble> CreateShape(SegmentedList <PointDouble> tracePoints) { RectDouble num5; PointDouble a = tracePoints[0]; PointDouble b = tracePoints[tracePoints.Count - 1]; PointDouble num3 = new PointDouble(b.X - a.X, b.Y - a.Y); double num4 = Math.Sqrt((num3.X * num3.X) + (num3.Y * num3.Y)); if ((base.ModifierKeys & Keys.Shift) != Keys.None) { PointDouble center = new PointDouble((a.X + b.X) / 2.0, (a.Y + b.Y) / 2.0); double num7 = num4 / 2.0; num5 = RectDouble.FromCenter(center, (double)(num7 * 2.0)); } else { num5 = RectDoubleUtil.FromPixelPoints(a, b); } PdnGraphicsPath path = new PdnGraphicsPath(); path.AddEllipse(num5.ToGdipRectangleF()); using (Matrix matrix = new Matrix()) { path.Flatten(matrix, 0.1f); } SegmentedList <PointDouble> list = new SegmentedList <PointDouble>(path.PathPoints.Select <PointF, PointDouble>(pt => pt.ToDoublePoint()), 7); path.Dispose(); return(list); }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { PointF a = points[0]; PointF b = points[points.Length - 1]; RectangleF rect; if ((ModifierKeys & Keys.Shift) != 0) { PointF dir = new PointF(b.X - a.X, b.Y - a.Y); float len = (float)Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y); PointF center = new PointF((a.X + b.X) / 2.0f, (a.Y + b.Y) / 2.0f); float radius = len / 2.0f; rect = Utility.RectangleFromCenter(center, radius); } else { rect = Utility.PointsToRectangle(a, b); } if (rect.Width == 0 || rect.Height == 0) { return(null); } PdnGraphicsPath path = new PdnGraphicsPath(); path.AddEllipse(rect); path.Flatten(Utility.IdentityMatrix, 0.10f); double widthPhysical = Math.Abs(rect.Width); double heightPhysical = Math.Abs(rect.Height); double areaPhysical = Math.PI * (widthPhysical / 2.0) * (heightPhysical / 2.0); string numberFormat; string unitsAbbreviation; unitsAbbreviation = string.Empty; numberFormat = "F0"; string unitsString = PdnResources.GetString("MeasurementUnit." + "Pixel" + ".Plural"); string statusText = string.Format( this.statusTextFormat, widthPhysical.ToString(numberFormat), unitsAbbreviation, heightPhysical.ToString(numberFormat), unitsAbbreviation, areaPhysical.ToString(numberFormat), unitsString); this.SetStatus(this.ellipseToolIcon, statusText); return(path); }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { PointF a = points[0]; PointF b = points[points.Length - 1]; RectangleF rect; float radius = 10; if ((ModifierKeys & Keys.Shift) != 0) { rect = Utility.PointsToConstrainedRectangle(a, b); } else { rect = Utility.PointsToRectangle(a, b); } PdnGraphicsPath path = this.GetRoundedRect(rect, radius); path.Flatten(); if (path.PathPoints[0] != path.PathPoints[path.PathPoints.Length - 1]) { path.AddLine(path.PathPoints[0], path.PathPoints[path.PathPoints.Length - 1]); path.CloseFigure(); } string numberFormat; string unitsAbbreviation; { unitsAbbreviation = string.Empty; numberFormat = "F0"; } string unitsString = PdnResources.GetString("MeasurementUnit." + "Pixels" + ".Plural"); string statusText = string.Format( this.statusTextFormat, rect.Width, unitsAbbreviation, rect.Height, unitsAbbreviation, "0", unitsString); this.SetStatus(this.roundedRectangleToolIcon, statusText); return(path); }
protected override List <PointF> CreateShape(List <Point> tracePoints) { Point a = tracePoints[0]; Point b = tracePoints[tracePoints.Count - 1]; Point dir = new Point(b.X - a.X, b.Y - a.Y); float len = (float)Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y); RectangleF rectF; if ((ModifierKeys & Keys.Shift) != 0) { PointF center = new PointF((float)(a.X + b.X) / 2.0f, (float)(a.Y + b.Y) / 2.0f); float radius = len / 2; rectF = Rectangle.Truncate(Utility.RectangleFromCenter(center, radius)); } else { rectF = Utility.PointsToRectangle(a, b); } Rectangle rect = Utility.RoundRectangle(rectF); PdnGraphicsPath path = new PdnGraphicsPath(); path.AddEllipse(rect); // Avoid asymmetrical circles where the left or right side of the ellipse has a pixel jutting out using (Matrix m = new Matrix()) { m.Reset(); m.Translate(-0.5f, -0.5f, MatrixOrder.Append); path.Transform(m); } path.Flatten(Utility.IdentityMatrix, 0.1f); PointF[] pointsF = path.PathPoints; path.Dispose(); return(new List <PointF>(pointsF)); }
protected override List<PointF> CreateShape(List<Point> tracePoints) { Point a = tracePoints[0]; Point b = tracePoints[tracePoints.Count - 1]; Point dir = new Point(b.X - a.X, b.Y - a.Y); float len = (float)Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y); RectangleF rectF; if ((ModifierKeys & Keys.Shift) != 0) { PointF center = new PointF((float)(a.X + b.X) / 2.0f, (float)(a.Y + b.Y) / 2.0f); float radius = len / 2; rectF = Rectangle.Truncate(Utility.RectangleFromCenter(center, radius)); } else { rectF = Utility.PointsToRectangle(a, b); } Rectangle rect = Utility.RoundRectangle(rectF); PdnGraphicsPath path = new PdnGraphicsPath(); path.AddEllipse(rect); // Avoid asymmetrical circles where the left or right side of the ellipse has a pixel jutting out using (Matrix m = new Matrix()) { m.Reset(); m.Translate(-0.5f, -0.5f, MatrixOrder.Append); path.Transform(m); } path.Flatten(Utility.IdentityMatrix, 0.1f); PointF[] pointsF = path.PathPoints; path.Dispose(); return new List<PointF>(pointsF); }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { PointF a = points[0]; PointF b = points[points.Length - 1]; RectangleF rect; if ((ModifierKeys & Keys.Shift) != 0) { PointF dir = new PointF(b.X - a.X, b.Y - a.Y); float len = (float)Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y); PointF center = new PointF((a.X + b.X) / 2.0f, (a.Y + b.Y) / 2.0f); float radius = len / 2.0f; rect = Utility.RectangleFromCenter(center, radius); } else { rect = Utility.PointsToRectangle(a, b); } if (rect.Width == 0 || rect.Height == 0) { return null; } PdnGraphicsPath path = new PdnGraphicsPath(); path.AddEllipse(rect); path.Flatten(Utility.IdentityMatrix, 0.10f); MeasurementUnit units = AppWorkspace.Units; double widthPhysical = Math.Abs(Document.PixelToPhysicalX(rect.Width, units)); double heightPhysical = Math.Abs(Document.PixelToPhysicalY(rect.Height, units)); double areaPhysical = Math.PI * (widthPhysical / 2.0) * (heightPhysical / 2.0); string numberFormat; string unitsAbbreviation; if (units != MeasurementUnit.Pixel) { string unitsAbbreviationName = "MeasurementUnit." + units.ToString() + ".Abbreviation"; unitsAbbreviation = PdnResources.GetString(unitsAbbreviationName); numberFormat = "F2"; } else { unitsAbbreviation = string.Empty; numberFormat = "F0"; } string unitsString = PdnResources.GetString("MeasurementUnit." + units.ToString() + ".Plural"); string statusText = string.Format( this.statusTextFormat, widthPhysical.ToString(numberFormat), unitsAbbreviation, heightPhysical.ToString(numberFormat), unitsAbbreviation, areaPhysical.ToString(numberFormat), unitsString); this.SetStatus(this.ellipseToolIcon, statusText); return path; }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { if (points.Length >= 4) { PdnGraphicsPath path = new PdnGraphicsPath(); switch (this.curveType) { default: case CurveType.Spline: path.AddCurve(points); break; case CurveType.Bezier: path.AddBezier(points[0], points[1], points[2], points[3]); break; } path.Flatten(Utility.IdentityMatrix, flattenConstant); return path; } else //if (points.Length <= 2) { PointF a = points[0]; PointF b = points[points.Length - 1]; if (0 != (ModifierKeys & Keys.Shift) && a != b) { ConstrainPoints(ref a, ref b); } double angle = -180.0 * Math.Atan2(b.Y - a.Y, b.X - a.X) / Math.PI; MeasurementUnit units = AppWorkspace.Units; double offsetXPhysical = Document.PixelToPhysicalX(b.X - a.X, units); double offsetYPhysical = Document.PixelToPhysicalY(b.Y - a.Y, units); double offsetLengthPhysical = Math.Sqrt(offsetXPhysical * offsetXPhysical + offsetYPhysical * offsetYPhysical); string numberFormat; string unitsAbbreviation; if (units != MeasurementUnit.Pixel) { string unitsAbbreviationName = "MeasurementUnit." + units.ToString() + ".Abbreviation"; unitsAbbreviation = PdnResources.GetString(unitsAbbreviationName); numberFormat = "F2"; } else { unitsAbbreviation = string.Empty; numberFormat = "F0"; } string unitsString = PdnResources.GetString("MeasurementUnit." + units.ToString() + ".Plural"); string statusText = string.Format( this.statusTextFormat, offsetXPhysical.ToString(numberFormat), unitsAbbreviation, offsetYPhysical.ToString(numberFormat), unitsAbbreviation, offsetLengthPhysical.ToString("F2"), unitsString, angle.ToString("F2")); SetStatus(this.lineToolIcon, statusText); if (a == b) { return null; } else { PdnGraphicsPath path = new PdnGraphicsPath(); PointF[] spline = LineToSpline(a, b, controlPointCount); path.AddCurve(spline); path.Flatten(Utility.IdentityMatrix, flattenConstant); return path; } } }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { if (points.Length >= 4) { PdnGraphicsPath path = new PdnGraphicsPath(); switch (this.curveType) { default: case CurveType.Spline: path.AddCurve(points); break; case CurveType.Bezier: path.AddBezier(points[0], points[1], points[2], points[3]); break; } path.Flatten(Utility.IdentityMatrix, flattenConstant); return(path); } else //if (points.Length <= 2) { PointF a = points[0]; PointF b = points[points.Length - 1]; if (0 != (ModifierKeys & Keys.Shift) && a != b) { ConstrainPoints(ref a, ref b); } double angle = -180.0 * Math.Atan2(b.Y - a.Y, b.X - a.X) / Math.PI; MeasurementUnit units = AppWorkspace.Units; double offsetXPhysical = Document.PixelToPhysicalX(b.X - a.X, units); double offsetYPhysical = Document.PixelToPhysicalY(b.Y - a.Y, units); double offsetLengthPhysical = Math.Sqrt(offsetXPhysical * offsetXPhysical + offsetYPhysical * offsetYPhysical); string numberFormat; string unitsAbbreviation; if (units != MeasurementUnit.Pixel) { string unitsAbbreviationName = "MeasurementUnit." + units.ToString() + ".Abbreviation"; unitsAbbreviation = PdnResources.GetString(unitsAbbreviationName); numberFormat = "F2"; } else { unitsAbbreviation = string.Empty; numberFormat = "F0"; } string unitsString = PdnResources.GetString("MeasurementUnit." + units.ToString() + ".Plural"); string statusText = string.Format( this.statusTextFormat, offsetXPhysical.ToString(numberFormat), unitsAbbreviation, offsetYPhysical.ToString(numberFormat), unitsAbbreviation, offsetLengthPhysical.ToString("F2"), unitsString, angle.ToString("F2")); SetStatus(this.lineToolIcon, statusText); if (a == b) { return(null); } else { PdnGraphicsPath path = new PdnGraphicsPath(); PointF[] spline = LineToSpline(a, b, controlPointCount); path.AddCurve(spline); path.Flatten(Utility.IdentityMatrix, flattenConstant); return(path); } } }
protected override PdnGraphicsPath CreateShapePath(PointF[] points) { PointF a = points[0]; PointF b = points[points.Length - 1]; RectangleF rect; float radius = 10; if ((ModifierKeys & Keys.Shift) != 0) { rect = Utility.PointsToConstrainedRectangle(a, b); } else { rect = Utility.PointsToRectangle(a, b); } PdnGraphicsPath path = this.GetRoundedRect(rect, radius); path.Flatten(); if (path.PathPoints[0] != path.PathPoints[path.PathPoints.Length - 1]) { path.AddLine(path.PathPoints[0], path.PathPoints[path.PathPoints.Length - 1]); path.CloseFigure(); } MeasurementUnit units = AppWorkspace.Units; double widthPhysical = Math.Abs(Document.PixelToPhysicalX(rect.Width, units)); double heightPhysical = Math.Abs(Document.PixelToPhysicalY(rect.Height, units)); double areaPhysical = widthPhysical * heightPhysical; string numberFormat; string unitsAbbreviation; if (units != MeasurementUnit.Pixel) { string unitsAbbreviationName = "MeasurementUnit." + units.ToString() + ".Abbreviation"; unitsAbbreviation = PdnResources.GetString(unitsAbbreviationName); numberFormat = "F2"; } else { unitsAbbreviation = string.Empty; numberFormat = "F0"; } string unitsString = PdnResources.GetString("MeasurementUnit." + units.ToString() + ".Plural"); string statusText = string.Format( this.statusTextFormat, widthPhysical.ToString(numberFormat), unitsAbbreviation, heightPhysical.ToString(numberFormat), unitsAbbreviation, areaPhysical.ToString(numberFormat), unitsString); this.SetStatus(this.roundedRectangleToolIcon, statusText); return(path); }