Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created June 1, 2014 21:39
Show Gist options
  • Save Fhernd/8883c631e066d7675a99 to your computer and use it in GitHub Desktop.
Save Fhernd/8883c631e066d7675a99 to your computer and use it in GitHub Desktop.
Formulario con la interfaz principal de la aplicación.
// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: ManipulacionCadenas.cs
//
// Original en: http://goo.gl/rgtOdI
//
// Propósito: Demostrar el uso uso eficiente de StringBuilder
//
============================================================*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ElTriangulo.Modelo;
namespace ElTriangulo.GUI
{
/// <summary>
/// Formulario principal de la interfaz gráfica de usuario.
/// </summary>
public partial class Principal : Form
{
#region Atributos
/// <summary>
/// Triángulo a manipular.
/// </summary>
private Triangulo triangulo;
#endregion
#region Atributos (Componentes)
/// <summary>
/// Control de botones de manipulación estado de triángulo.
/// </summary>
private ControlBotones controlBotones;
/// <summary>
/// Imagen de título de la aplicación.
/// </summary>
private ControlImagen controlImagen;
/// <summary>
/// Control con botones para los puntos de atención.
/// </summary>
private ControlOpciones controlOpciones;
/// <summary>
/// Control con el lienzo de dibujo del triángulo.
/// </summary>
private ControlTriangulo controlTriangulo;
/// <summary>
/// Control de entrada de valores para puntos del triángulo.
/// </summary>
private DialogoPuntos dialogoPuntos;
#endregion
#region Propiedades
/// <summary>
/// Modifica y recupera el triángulo.
/// </summary>
public Triangulo Triangulo
{
get
{
return triangulo;
}
}
#endregion
#region Constructores
/// <summary>
/// Carga la interfaz principal.
/// </summary>
public Principal()
{
InitializeComponent();
ConfiguracionComponentes();
Repintar();
}
#endregion
#region Métodos
/// <summary>
/// Carga las propiedades de los controles integrales de
/// la interfaz principal de usuario.
/// </summary>
private void ConfiguracionComponentes()
{
this.Icon = (Icon)Properties.Resources.TrianguloIcon;
// Puntos por defecto para el triángulo:
Punto punto1 = new Punto(120.0, 20.0);
Punto punto2 = new Punto(220, 200);
Punto punto3 = new Punto(20, 200);
// Colores para el relleno y la línea:
Modelo.Color colorRelleno = new Modelo.Color(0, 0, 255);
Modelo.Color colorLineas = new Modelo.Color(0, 255, 0);
triangulo = new Triangulo(punto1, punto2, punto3, colorRelleno, colorLineas);
controlImagen = new ControlImagen();
controlBotones = new ControlBotones(this);
controlBotones.Location = new Point(0, 68);
controlTriangulo = new ControlTriangulo(triangulo);
controlTriangulo.Location = new Point(173, 68);
controlOpciones = new ControlOpciones(this);
controlOpciones.Location = new Point(0, 288);
this.Controls.Add(controlImagen);
this.Controls.Add(controlBotones);
this.Controls.Add(controlTriangulo);
this.Controls.Add(controlOpciones);
}
/// <summary>
/// Cambia los puntos del triángulo.
/// </summary>
public void cambiarPuntos()
{
dialogoPuntos = new DialogoPuntos(this);
dialogoPuntos.ShowDialog();
}
/// <summary>
/// Valida que los puntos integrales del triángulo no sean colineales.
/// </summary>
/// <param name="punto1x">Ordeanda X del punto 1.</param>
/// <param name="punto1y">Coordenada Y del punto 1.</param>
/// <param name="punto2x">Ordenada X del punto 2.</param>
/// <param name="punto2y">Coordenada Y del punto 2.</param>
/// <param name="punto3x">Ordenada X del punto 3.</param>
/// <param name="punto3y">Coordenada Y del punto 3.</param>
/// <returns></returns>
public bool Colineales(double punto1x, double punto1y, double punto2x, double punto2y, double punto3x, double punto3y)
{
// Aplicación fórmula (http://goo.gl/Ua5BfP): 1/2 { (x1 y2 + x2 y3 + x3 y1) - ( x2 y1 + x3 y2 + x1 y3) } == 0?
return (1.0 / 2.0) * ((punto1x * punto2y + punto2x * punto3y + punto3x * punto1y) - (punto2x * punto1y + punto3x * punto2y + punto1x * punto3y)) == 0.0;
}
/// <summary>
/// Redibuja el triángulo.
/// </summary>
public void Repintar()
{
controlTriangulo.Refresh();
controlBotones.CambiarInformacion(triangulo.CalcularPerimetro(), triangulo.CalcularArea(), triangulo.CalcularAltura());
}
/// <summary>
/// Cambia el color de las líneas del triángulo.
/// </summary>
public void CambiarColorLineas()
{
Modelo.Color colorActual = new Modelo.Color(triangulo.ColorLineas.Rojo, triangulo.ColorLineas.Verde, triangulo.ColorLineas.Azul);
System.Drawing.Color colorNuevo;
ColorDialog selectorColor = new ColorDialog();
selectorColor.ShowHelp = false;
if (selectorColor.ShowDialog(this) == DialogResult.OK)
{
colorNuevo = selectorColor.Color;
colorActual = new Modelo.Color(colorNuevo.R, colorNuevo.G, colorNuevo.B);
triangulo.ColorLineas = colorActual;
Repintar();
}
}
/// <summary>
/// Cambia el color de fondo (relleno) del triángulo.
/// </summary>
public void CambiarColorFondo()
{
Modelo.Color colorActual = new Modelo.Color(triangulo.ColorRelleno.Rojo, triangulo.ColorRelleno.Verde, triangulo.ColorRelleno.Azul);
System.Drawing.Color colorNuevo;
ColorDialog selectorColor = new ColorDialog();
selectorColor.ShowHelp = false;
if (selectorColor.ShowDialog(this) == DialogResult.OK)
{
colorNuevo = selectorColor.Color;
colorActual = new Modelo.Color(colorNuevo.R, colorNuevo.G, colorNuevo.B);
triangulo.ColorRelleno = colorActual;
Repintar();
}
}
#endregion
#region Puntos de extensión.
/// <summary>
/// Punto de extensión no. 1.
/// </summary>
public void MetodoExtension1()
{
MessageBox.Show(this, triangulo.MetodoExtension1(), "Método Extensión No. 1", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
/// <summary>
/// Punto de extensión no. 2.
/// </summary>
public void MetodoExtension2()
{
MessageBox.Show(this, triangulo.MetodoExtension2(), "Método Extensión No. 2", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment