private void ellipseToolStripMenuItem_Click(object sender, EventArgs e) { var ph = new EllipseHelper() { Normal = new Vector3d(0, 1, 0), AuxPoint = new Vector3d(10, 0, 0) }; Helpers.Add(ph); updateHelpersList(); }
private Vector3D GetOrientation( EllipseParams botEllipse, Point[] spineApproximation, ref bool Reverse) { int nspine = spineApproximation.Length; Vector vnormal = new Vector(botEllipse.Center.X - spineApproximation[0].X, botEllipse.Center.Y + spineApproximation[0].Y); Vector vreverse = new Vector(botEllipse.Center.X - spineApproximation[spineApproximation.Length - 1].X, botEllipse.Center.Y + spineApproximation[spineApproximation.Length - 1].Y); Reverse = false; if (vnormal.Length > vreverse.Length) { Reverse = true; } Vector botAxis = new Vector(); if (!Reverse) { botAxis = new Vector(spineApproximation[1].X - spineApproximation[0].X, spineApproximation[0].Y - spineApproximation[1].Y); } else { botAxis = new Vector(spineApproximation[nspine - 2].X - spineApproximation[nspine - 1].X, spineApproximation[nspine - 1].Y - spineApproximation[nspine - 2].Y); } var botCircleBasis = EllipseHelper.CircleOrientation(botEllipse); var botOrientation = GetOrientation(botCircleBasis); Vector ApproxOrientationBotProj = new Vector(botOrientation.X, botOrientation.Y); if (ApproxOrientationBotProj * botAxis < 0) { botOrientation = -botOrientation; } //var topPerimeter = EllipseHelper.ApproxPerimeter(topEllipse.XRadius, topEllipse.YRadius); //var botPerimeter = EllipseHelper.ApproxPerimeter(botEllipse.XRadius, botEllipse.YRadius); //return result; //if (topPerimeter > botPerimeter) // return topOrientation; //else return(botOrientation); }
public override FPoint Get(float len) { if (direction == CircularDirection.CW) { len = FloatMath.Clamp(len, 0, Length); var angle = angleStart + (angleEnd - angleStart) * (len / Length); return(EllipseHelper.GetPointOnEllipse(center.X, center.Y, radiusX, radiusY, angle)); } else { len = FloatMath.Clamp(len, 0, Length); var angle = angleStart + (angleEnd - angleStart) * (len / Length); return(EllipseHelper.GetPointOnEllipse(center.X, center.Y, radiusX, radiusY, angle)); } }