예제 #1
0
        //====================================================================//
        // Variante 2: Crea un Arco usando 3 puntos [Start, Center, End]
        //====================================================================//
        public ArcEx(StartPointEx start, CenterPointEx center, EndPointEx end, Vector3d normal, bool inverseFocus = false)
        {
            PointType P1, P2, pC;
            double    hipo, s_Ang, e_Ang;

            P1 = is2GraphTranslator.Tois2Graph(start.val);
            P2 = is2GraphTranslator.Tois2Graph(end.val);
            pC = is2GraphTranslator.Tois2Graph(center.val);

            // Paso 1: Determinar distancia entre "Start" y "Center".
            hipo = is2GraphObj.PointPointDistance(pC, P1);

            // b) Calculo los valores en radianes de Inicio Y Fin del arco
            //    usando para el calculo el Angulo opuesto al angulo del eje
            //    radial.
            s_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P1));
            e_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P2));

            if (inverseFocus)
            {
                is2GraphObj.SwapValue(ref s_Ang, ref e_Ang);
            }

            // Paso 2 y Final: Seteo las propiedades heredadas de la clase padre 'Arc'.
            Center     = center.val;
            StartAngle = s_Ang;
            EndAngle   = e_Ang;
            Normal     = normal;
            Radius     = hipo;
            Thickness  = 0.0;
        }
예제 #2
0
        //====================================================================//
        // Variante 3: Crea un Arco usando 2 puntos y un angulo
        // [Start, Center, angleAgudo]
        //====================================================================//
        public ArcEx(StartPointEx start, CenterPointEx center, GradeAngleEx angleEx, Vector3d normal, bool inverseFocus = false)
        {
            PointType pC, P1, P2;
            double    hipo, s_Ang, e_Ang;

            // Paso 1: Normalizo el valor del angulo y compruebo su signo.
            angleEx.val = is2GraphObj.NormalizeAngle(angleEx.val);

            if (is2GraphObj.isNegative(angleEx.val) && inverseFocus == false)
            {
                inverseFocus = true;
            }
            else if (inverseFocus && is2GraphObj.isPositive(angleEx.val))
            {
                angleEx.val *= -1;
            }
            else
            {
                inverseFocus = false;
                angleEx.val  = Math.Abs(angleEx.val);
            }

            // Paso 2: Calculo la posicion del punto "End" a partir de los datos conocidos
            //				 de los puntos "Center" y "Start",  y el angulo especificado.
            P1 = is2GraphTranslator.Tois2Graph(start.val);
            pC = is2GraphTranslator.Tois2Graph(center.val);
            P2 = is2GraphObj.RotatePoint(P1, angleEx.val, pC);

            // Paso 3: Se calculo el radio del arco.
            hipo = is2GraphObj.PointPointDistance(pC, P1);

            // Paso 4: Se calculan los valores en radianes de Inicio Y Fin del arco.
            s_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P1));
            e_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P2));

            if (inverseFocus)
            {
                is2GraphObj.SwapValue(ref s_Ang, ref e_Ang);
            }

            // Paso 5 y Final: Seteo las propiedades heredadas de la clase padre 'Arc'.
            Center     = is2GraphTranslator.ToAcad_3d(pC);
            StartAngle = s_Ang;
            EndAngle   = e_Ang;
            Normal     = normal;
            Radius     = hipo;
            Thickness  = 0.0;
        }
예제 #3
0
        //====================================================================//
        // Variante 4: Crea un Arco usando 2 puntos y una longitud
        // [Start, Center, Length]
        //====================================================================//
        public ArcEx(StartPointEx start, CenterPointEx center, DistanceEx length, Vector3d normal, bool inverseFocus = false)
        {
            PointType pC, P1, P2;
            double    hipo, angle, s_Ang, e_Ang;

            // Paso 1: Se calcula el valor de angulo que se forma para el valor de distancia dado.
            P1 = is2GraphTranslator.Tois2Graph(start.val);
            pC = is2GraphTranslator.Tois2Graph(center.val);

            hipo  = is2GraphObj.PointPointDistance(pC, P1);
            angle = is2GraphObj.RadToGrad(Math.Asin((length.val / 2.0) / hipo)) * 2.0;
            if (inverseFocus)
            {
                angle *= -1;
            }

            // Se lanza una exception si se obtiene un Arco invalido.
            if (double.IsNaN(angle))
            {
                throw new ArcException("ArcEx Class: No se puede obtener un arco con el valor de longitud dado.");
            }

            // Paso 2: Calculo la posicion del punto "End" a partir de los datos conocidos
            //				 de los puntos "Center" y "Start",  y el angulo calculado.
            P2 = is2GraphObj.RotatePoint(P1, angle, pC);

            // Paso 3: Se calculan los valores en radianes de Inicio Y Fin del arco.
            s_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P1));
            e_Ang = is2GraphObj.GradToRad(is2GraphObj.PointPointAngle(pC, P2));

            if (inverseFocus)
            {
                is2GraphObj.SwapValue(ref s_Ang, ref e_Ang);
            }

            // Paso 4 y Final: Seteo las propiedades heredadas de la clase padre 'Arc'.
            Center     = is2GraphTranslator.ToAcad_3d(pC);
            StartAngle = s_Ang;
            EndAngle   = e_Ang;
            Normal     = normal;
            Radius     = hipo;
            Thickness  = 0.0;
        }
예제 #4
0
 //====================================================================//
 // Variante 6: Crea un Arco usando 2 puntos y una direccion
 // [Start, Center, Direccion]
 //====================================================================//
 public ArcEx(StartPointEx start, CenterPointEx center, Vector2d direction, Vector3d normal, bool inverseFocus = false)
 {
 }