Professional Documents
Culture Documents
Materia: GRAFICACION
MTI. Juan Salvador Rodriguez Aguirre
Manual de Practicas
https://cursos.javanianos.com/moodle
soporte_macrosat@hotmail.com soporte@javanianos.com
19 de agosto de 2017 1
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 1 . Disear la Clase Graficacin y utilizar un bitmap con un PictureBox para
dibujar un Punto y una lnea.
Existen muchas formas distintas de manejar grficos utilizando C#, en esta ocasin
crearemos una clase que llamaremos Graficacion en donde manejaremos 1 PictureBox por
referencia.
Podremos crear mltiples PictureBox en nuestra forma y cada una tendr un objeto Bitmap
asignado, y crearemos un objeto de nuestra clase Graficacin por cada PictureBox cuyo
Bitmap queramos manipular.
Por lo pronto crearemos 2 mtodos en nuestra clase Form1(Se le puede cambiar el
nombre):
Punto: Dibujar un pixel en la pantalla de dimensin 11 en el lugar que le indiquemos.
(Recibir 2 enteros que representarn la posicin X y Y del pixel en el Bitmap, y un objeto
Color para determinar el color del pixel que queremos dibujar).
Lnea: Este mtodo dibujar una lnea en el Bitmap utilizando el mtodo Analizador
Diferencial Digital o DDA por sus siglas en ingls. (Recibir las posiciones X y Y iniciales y
finales).
Empezamos creando una nueva clase y llamndola Graficacion(o Form1 por defecto) con
lo siguiente:
2 propiedades: 1 objeto de la clase Graphics que ser del que utilizaremos las funciones
bsicas para graficar en el Bitmap que estemos manejando.
1 Constructor: Recibir la referencia de un PictureBox.
19 de agosto de 2017 2
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Form1 graficador1;
public Form1()
{
InitializeComponent();
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
graficador1 = new Form1(ref pictureBox1);
19 de agosto de 2017 3
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
graficador1.Punto(5, 5, Color.Black);
Por lo tanto dibujar un pixel negro en la posicin (5, 5) del Bitmap del PictureBox como se
muestra a continuacin:
Ahora creamos el mtodo Lnea (Que utilizar el mtodo pixel). En nuestra clase
agregamos:
private void Linea(int xa, int ya, int xb, int yb)
{
int dx = xb - xa, dy = yb - ya, steps, k;
float xIncrement, yIncrement, x = xa, y = ya;
if (Math.Abs(dx) > Math.Abs(dy)) steps = Math.Abs(dx);
else steps = Math.Abs(dy);
xIncrement = dx / (float)steps;
yIncrement = dy / (float)steps;
Punto(Convert.ToInt32(Math.Round(x)),Convert.ToInt32(Math.Round(y)),Color.Black);
for (k = 0; k < steps; k++)
{
x += xIncrement;
y += yIncrement;
Punto(Convert.ToInt32(Math.Round(x)),
Convert.ToInt32(Math.Round(y)), Color.Black);
}
}
19 de agosto de 2017 4
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Y al darle click nos deber mostrar una lnea que va desde el punto (10, 10) hasta el punto
(50, 50), de esta forma:
19 de agosto de 2017 5
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 2 . Crear un proyecto tipo Windows Form y emplear el mtodo DrawLine
que permite trazar una lnea.
Ir a la ventana de cdigo despus de la clase crear los objetos Graphics y Pen:
public partial class Form1 : Form
{
System.Drawing.Graphics g;
Pen Lapiz;
Se insertar un botn1 para probar la ejecucin del mtodo. En la propiedad text del
botn colocar: Lnea Horizontal
button1.Text = "Lnea Horizontal";
Una vez insertado el botn hacer doble clic para agregar el siguiente cdigo:
g = this.CreateGraphics();
Lapiz = new Pen(Color.Blue, 1);
// Columna 20 Fila 100 hasta columna 300 Fila 100
g.DrawLine(Lapiz, 20, 100, 300, 100);
}
Se insertar un botn2 para probar la ejecucin del mtodo. En la propiedad text del
botn colocar: Lnea Horizontal
button1.Text = "Lnea Vertical";
Una vez insertado el botn hacer doble clic para agregar el siguiente cdigo:
g = this.CreateGraphics();
Lapiz = new Pen(Color.Blue, 1);
// Columna 20 Fila 100 hasta columna 200 Fila 300
g.DrawLine(Lapiz, 20, 100, 20, 300);
}
19 de agosto de 2017 6
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 7
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 3 . De acuerdo con la prctica anterior, deber crear un cuadrado empleando
el mtodo DrawLine y usuando un botn.
El botn en su propiedad text deber tener:
button1.Text = "Cuadrado con Lneas";
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 8
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
g = this.CreateGraphics();
Lapiz = new Pen(Color.Blue, 1);
Lapiz.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
g.DrawLine(Lapiz, 20, 20, 100, 100);
Nota: Recordar que se debe tener creado el objeto g de la clase Graphics, as como el objeto Lpiz
de la clase Pen dentro del mbito de la clase del proyecto.
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 9
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
p[1].X = 53;
p[1].Y = 111;
p[2].X = 114;
p[2].Y = 86;
p[3].X = 34;
p[3].Y = 34;
p[4].X = 165;
p[4].Y = 7;
g = pictureBox1.CreateGraphics();
g.DrawPolygon(Lapiz, p);
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 10
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
};
g = pictureBox1.CreateGraphics();
g.FillPolygon(Lapiz, puntos);
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 11
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
1. PictureBox
2. Boton 1 con la propiedad text = FillPolygon
3. Boton 2 con la propiedad text = Circulo
Al hacer clic deber mostrar la figura correspondiente y al cambiar sin sobreponer las
figuras
};
g = pictureBox1.CreateGraphics();
g.FillPolygon(Lapiz, puntos);
19 de agosto de 2017 12
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
g = this.CreateGraphics();
g = pictureBox1.CreateGraphics();
g.DrawEllipse(p, 0, 0, 100, 100);
Y para hacer el efecto de borrar las figuras para dibujar la otra se usa el evento Leave o
puede usar cualquier evento que se adapte a sus necesidades.
Para seleccionar los eventos primero se debe seleccionar el control y hacer doble clic en el
evento:
19 de agosto de 2017 13
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 14
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 15
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 16
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 10 . Proyecto Final. Deber desarrollar un juego o algn elemento grfico
que tenga algn uso Pedaggico, Matemtico, Social o Simule algn Entorno real
(Escenario, Radar, Reloj Analgico, Mtodo de ordenamiento de nmeros, etc).
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 17
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 11 . Traslacin. Disee un cuadrado que permita desplazarse desde el centro
del formulario hacia arriba, abajo, izquierda, derecha.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using System.IO;
namespace Rotacion_2D
{
public partial class Form1 : Form
{
Graphics g;
int ex = 1;
int ey = 1;
int dx = 0;
int dy = 0;
PointF[] pt = {
new Point(-25,-25),
new Point(25,-25),
new Point(25,25),
new Point(-25,25),
new Point(-25,-25)
};
//Creamos el bitmap para rotar
Bitmap bmp;
public Form1()
{
InitializeComponent();
}
19 de agosto de 2017 18
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
//dy -= 5;
pt = Traslacion(pt, 0, -2);
ptboxDibujo.Refresh();
break;
case Keys.S:
//dy += 5;
pt = Traslacion(pt, 0, 2);
ptboxDibujo.Refresh();
break;
case Keys.A:
//izquierda
//dx -= 5;
pt = Traslacion(pt, -2, 0);
ptboxDibujo.Refresh();
break;
case Keys.D:
// derecha
//dx += 5;
pt = Traslacion(pt, 2, 0);
ptboxDibujo.Refresh();
break;
}
}
//}
}
}
}
19 de agosto de 2017 19
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 20
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 12 Disear un cubo en 3D con WPF en Visual Studio 2010 en Perspectiva
empleando PerspectiveCamera. Pintndolo de color Rojo.
Cargue Visual Studio y cree un proyecto tipo Windows Presentation Foundation con el nombre
Cubo3D
19 de agosto de 2017 21
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
<Window x:Class="_3Dimensiones.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Cubo en 3D" Height="350" Width="525">
<Grid>
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="-40,40,40" LookDirection="40,-40,-40 "
UpDirection="0,0,1" />
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<DirectionalLight Color="White" Direction="-1,-1,-3" />
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10
10,0,10 10,10,10 0,10,10"
TriangleIndices="0 1 3 1 2 3 0 4 3 4 7 3 4 6 7 4 5 6
0 4 1 1 4 5 1 2 6 6 5 1 2 3 7 7 6 2"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Green"/>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
</Window>
Se tendr la siguiente salida despus de copiar el cdigo (sin ejecutar aun). Bastar cambiar las
etiquetas Title, PerspectiveCamera en la propiedad position o cualquier otra para observar los
cambios
Ejecutar la aplicacin y observar que error genera. Para solucionar el error solo se deber ir al
fichero MainWindow.xaml.cs y comentar la lnea de InitializeComponent();dentro del mtodo
MainWindow() como se muetra a continuacin:
19 de agosto de 2017 22
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Para probar la Aplicacin deber ir al men Depurar y hacer clic en iniciar depuracin
19 de agosto de 2017 23
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
19 de agosto de 2017 24
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Practica No. 13 Disear un Dodecaedro empleando tecnologa de Desarrollo Web para Front End.
Index.html
Efecto.css
Fichero index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="efectos.css" />
<title>Dodecaedro</title>
</head>
<body>
<div class="view">
<div class="plane main">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
</div>
</body>
</html>
19 de agosto de 2017 25
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Fichero efecto.css
html, body {
background: #222;
overflow: hidden;
width: 100%;
height: 100%;
}
.view {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
-webkit-perspective: 400;
perspective: 400;
}
.plane {
width: 120px;
height: 120px;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.plane.main {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
-webkit-transform: rotateX(60deg) rotateZ(-30deg);
transform: rotateX(60deg) rotateZ(-30deg);
-webkit-animation: rotate 20s infinite linear;
animation: rotate 20s infinite linear;
}
.plane.main .circle {
width: 120px;
height: 120px;
position: absolute;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
border-radius: 100%;
box-sizing: border-box;
19 de agosto de 2017 26
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
19 de agosto de 2017 27
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
@-webkit-keyframes rotate {
0% {
-webkit-transform: rotateX(0) rotateY(0) rotateZ(0);
transform: rotateX(0) rotateY(0) rotateZ(0);
}
100% {
-webkit-transform: rotateX(360deg) rotateY(360deg)
rotateZ(360deg);
transform: rotateX(360deg) rotateY(360deg)
rotateZ(360deg);
}
}
@keyframes rotate {
0% {
-webkit-transform: rotateX(0) rotateY(0) rotateZ(0);
transform: rotateX(0) rotateY(0) rotateZ(0);
}
100% {
-webkit-transform: rotateX(360deg) rotateY(360deg)
rotateZ(360deg);
transform: rotateX(360deg) rotateY(360deg)
rotateZ(360deg);
}
}
19 de agosto de 2017 28
MTI. Juan Salvador Rodrguez Aguirre
MANUAL DE PRACTICAS DE GRAFICACION EN C#
Actividades a complementar:
19 de agosto de 2017 29
MTI. Juan Salvador Rodrguez Aguirre