Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
            }
        }