//====================================================================// // 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; }
//====================================================================// // 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; }
//====================================================================// // 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; }
//====================================================================// // 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) { }