Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ===++===
  2. //
  3. //  OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: ManipulacionCadenas.cs
  9. //
  10. // Original en: http://goo.gl/rgtOdI
  11. //
  12. // Propósito: Demostrar el uso uso eficiente de StringBuilder
  13. //
  14. ============================================================*/
  15. using System;
  16. using System.Collections.Generic;
  17. using System.ComponentModel;
  18. using System.Data;
  19. using System.Drawing;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Threading.Tasks;
  23. using System.Windows.Forms;
  24. using ElTriangulo.Modelo;
  25.  
  26. namespace ElTriangulo.GUI
  27. {
  28.     /// <summary>
  29.     /// Formulario principal de la interfaz gráfica de usuario.
  30.     /// </summary>
  31.     public partial class Principal : Form
  32.     {
  33.         #region Atributos
  34.         /// <summary>
  35.         /// Triángulo a manipular.
  36.         /// </summary>
  37.         private Triangulo triangulo;
  38.         #endregion
  39.  
  40.         #region Atributos (Componentes)
  41.         /// <summary>
  42.         /// Control de botones de manipulación estado de triángulo.
  43.         /// </summary>
  44.         private ControlBotones controlBotones;
  45.         /// <summary>
  46.         /// Imagen de título de la aplicación.
  47.         /// </summary>
  48.         private ControlImagen controlImagen;
  49.         /// <summary>
  50.         /// Control con botones para los puntos de atención.
  51.         /// </summary>
  52.         private ControlOpciones controlOpciones;
  53.         /// <summary>
  54.         /// Control con el lienzo de dibujo del triángulo.
  55.         /// </summary>
  56.         private ControlTriangulo controlTriangulo;
  57.         /// <summary>
  58.         /// Control de entrada de valores para puntos del triángulo.
  59.         /// </summary>
  60.         private DialogoPuntos dialogoPuntos;
  61.         #endregion
  62.  
  63.         #region Propiedades
  64.         /// <summary>
  65.         /// Modifica y recupera el triángulo.
  66.         /// </summary>
  67.         public Triangulo Triangulo
  68.         {
  69.             get
  70.             {
  71.                 return triangulo;
  72.             }
  73.         }
  74.         #endregion
  75.  
  76.         #region Constructores
  77.         /// <summary>
  78.         /// Carga la interfaz principal.
  79.         /// </summary>
  80.         public Principal()
  81.         {
  82.             InitializeComponent();
  83.             ConfiguracionComponentes();
  84.             Repintar();
  85.         }
  86.         #endregion
  87.  
  88.         #region Métodos
  89.         /// <summary>
  90.         /// Carga las propiedades de los controles integrales de
  91.         /// la interfaz principal de usuario.
  92.         /// </summary>
  93.         private void ConfiguracionComponentes()
  94.         {
  95.             this.Icon = (Icon)Properties.Resources.TrianguloIcon;
  96.  
  97.             // Puntos por defecto para el triángulo:
  98.             Punto punto1 = new Punto(120.0, 20.0);
  99.             Punto punto2 = new Punto(220, 200);
  100.             Punto punto3 = new Punto(20, 200);
  101.  
  102.             // Colores para el relleno y la línea:
  103.             Modelo.Color colorRelleno = new Modelo.Color(0, 0, 255);
  104.             Modelo.Color colorLineas = new Modelo.Color(0, 255, 0);
  105.  
  106.             triangulo = new Triangulo(punto1, punto2, punto3, colorRelleno, colorLineas);
  107.             controlImagen = new ControlImagen();
  108.  
  109.             controlBotones = new ControlBotones(this);
  110.             controlBotones.Location = new Point(0, 68);
  111.  
  112.             controlTriangulo = new ControlTriangulo(triangulo);
  113.             controlTriangulo.Location = new Point(173, 68);
  114.  
  115.             controlOpciones = new ControlOpciones(this);
  116.             controlOpciones.Location = new Point(0, 288);
  117.  
  118.             this.Controls.Add(controlImagen);
  119.             this.Controls.Add(controlBotones);
  120.             this.Controls.Add(controlTriangulo);
  121.             this.Controls.Add(controlOpciones);
  122.         }
  123.         /// <summary>
  124.         /// Cambia los puntos del triángulo.
  125.         /// </summary>
  126.         public void cambiarPuntos()
  127.         {
  128.             dialogoPuntos = new DialogoPuntos(this);
  129.             dialogoPuntos.ShowDialog();
  130.         }
  131.         /// <summary>
  132.         /// Valida que los puntos integrales del triángulo no sean colineales.
  133.         /// </summary>
  134.         /// <param name="punto1x">Ordeanda X del punto 1.</param>
  135.         /// <param name="punto1y">Coordenada Y del punto 1.</param>
  136.         /// <param name="punto2x">Ordenada X del punto 2.</param>
  137.         /// <param name="punto2y">Coordenada Y del punto 2.</param>
  138.         /// <param name="punto3x">Ordenada X del punto 3.</param>
  139.         /// <param name="punto3y">Coordenada Y del punto 3.</param>
  140.         /// <returns></returns>
  141.         public bool Colineales(double punto1x, double punto1y, double punto2x, double punto2y, double punto3x, double punto3y)
  142.         {
  143.             // Aplicación fórmula (http://goo.gl/Ua5BfP): 1/2 { (x1 y2 + x2 y3 + x3 y1) - ( x2 y1 + x3 y2 + x1 y3) } == 0?
  144.  
  145.             return (1.0 / 2.0) * ((punto1x * punto2y + punto2x * punto3y + punto3x * punto1y) - (punto2x * punto1y + punto3x * punto2y + punto1x * punto3y)) == 0.0;
  146.         }
  147.         /// <summary>
  148.         /// Redibuja el triángulo.
  149.         /// </summary>
  150.         public void Repintar()
  151.         {
  152.             controlTriangulo.Refresh();
  153.             controlBotones.CambiarInformacion(triangulo.CalcularPerimetro(), triangulo.CalcularArea(), triangulo.CalcularAltura());
  154.         }
  155.         /// <summary>
  156.         /// Cambia el color de las líneas del triángulo.
  157.         /// </summary>
  158.         public void CambiarColorLineas()
  159.         {
  160.             Modelo.Color colorActual = new Modelo.Color(triangulo.ColorLineas.Rojo, triangulo.ColorLineas.Verde, triangulo.ColorLineas.Azul);
  161.             System.Drawing.Color colorNuevo;
  162.  
  163.             ColorDialog selectorColor = new ColorDialog();
  164.             selectorColor.ShowHelp = false;
  165.            
  166.             if (selectorColor.ShowDialog(this) == DialogResult.OK)
  167.             {
  168.                 colorNuevo = selectorColor.Color;
  169.  
  170.                 colorActual = new Modelo.Color(colorNuevo.R, colorNuevo.G, colorNuevo.B);
  171.  
  172.                 triangulo.ColorLineas = colorActual;
  173.  
  174.                 Repintar();
  175.             }
  176.         }
  177.         /// <summary>
  178.         /// Cambia el color de fondo (relleno) del triángulo.
  179.         /// </summary>
  180.         public void CambiarColorFondo()
  181.         {
  182.             Modelo.Color colorActual = new Modelo.Color(triangulo.ColorRelleno.Rojo, triangulo.ColorRelleno.Verde, triangulo.ColorRelleno.Azul);
  183.             System.Drawing.Color colorNuevo;
  184.  
  185.             ColorDialog selectorColor = new ColorDialog();
  186.             selectorColor.ShowHelp = false;
  187.  
  188.             if (selectorColor.ShowDialog(this) == DialogResult.OK)
  189.             {
  190.                 colorNuevo = selectorColor.Color;
  191.  
  192.                 colorActual = new Modelo.Color(colorNuevo.R, colorNuevo.G, colorNuevo.B);
  193.  
  194.                 triangulo.ColorRelleno = colorActual;
  195.  
  196.                 Repintar();
  197.             }
  198.         }
  199.         #endregion
  200.  
  201.         #region Puntos de extensión.
  202.         /// <summary>
  203.         /// Punto de extensión no. 1.
  204.         /// </summary>
  205.         public void MetodoExtension1()
  206.         {
  207.             MessageBox.Show(this, triangulo.MetodoExtension1(), "Método Extensión No. 1", MessageBoxButtons.OK, MessageBoxIcon.Information);
  208.         }
  209.         /// <summary>
  210.         /// Punto de extensión no. 2.
  211.         /// </summary>
  212.         public void MetodoExtension2()
  213.         {
  214.             MessageBox.Show(this, triangulo.MetodoExtension2(), "Método Extensión No. 2", MessageBoxButtons.OK, MessageBoxIcon.Information);
  215.         }
  216.         #endregion
  217.     }
  218. }