# Creando controles de Instrumentacion para c# 2010



## george.manson.69

He creado un control en c#, despues de bastante tiempo sin moverle a programas
,hace ayer me propuso a preguntarme como hacer sus propios controles de
instrumentacion en c# para nuestros proyectos.

El archivo contiene todo el proceso del programa como se realizo.

El dibujo de abajo es una pequena idea de como se tiene de empezar 
a sacar valores.

Este control fue creado en Microsoft Visual C# 2010 express.


----------



## Meta

Muy bueno, técnicas del GDI+.

Estas cosas lo tengo en mente desde el 2008 para hacer un manual sobre ello. Uno más como he hecho con otros. Ya que lo controlas mejor que yo, puedes hacer un mini manual en Word para saber tod@s como hiciste ese control independiente. Llegué a pensar que sólo se puede crear sólo con los de pago, Visual Studio de pago.

Ver manual de ejemplo.

Saludo.

Edito:

Decirte que no me funciona el ejecutable, no el código fuente.


----------



## george.manson.69

Que raro Meta...tu computadora es de 64 bit? o 32? porque a un amigo tampoco funciono y era su compu de 64 bit...pero deja lo subo otro dia el archivo, tiene visual c#2010? si es asi se puede abirir almenos el projecto?

Ah tambien pienso realizar el Manual....porque no1!!


----------



## ByAxel

Buena info.
Y @george-manson-69, eso del detalle sobre los bits de una PC, intenta modificar el compilado que supongo que es similar en el VS2008 y VS2010...
Vas a *"Propiedades del proyecto"*, en la opción *"Compilar"* y buscas el botón *"Opciones de compilación avanzadas"*; aparece una ventana y buscas *"CPU de destino"* que por defecto tiene la opción *"AnyCPU"* seleccionada; ahí mismo tienes para escoger entre *"X86 y X64"*. Aceptas, compilas y ya lo tienes compatible.

Saludos.


----------



## Meta

Hola:

Ya me funciona. Era que el origen del .BMP es diferente en mi PC. No podía cargar el formato imagen porque no lo encontraba. Me funciona  muy bien y está muy currado el programa detalladamente. Buen trabajo. 

Mi equipo es de 32 bits y funciona muy bien en la edición express 2010. El dibujo que está en .bmp lo puedes hacer también a GDI+ cosa que ya sabes. Lo que cuesta es hacerlo más que en decirlo.

Si decides hacer un manual, bienvenido sea, aprenderé de ti hacer controles a parte con la express 2010, el de pago si me sale con facilidad.

Saludo.


----------



## george.manson.69

Otro control de tanque muy sencillo para hacer...jeje!!!

Hecho enb Visual C# 2010 EXPRESS





Meta dijo:


> Hola:
> 
> Ya me funciona. Era que el origen del .BMP es diferente en mi PC. No podía cargar el formato imagen porque no lo encontraba. Me funciona  muy bien y está muy currado el programa detalladamente. Buen trabajo.
> 
> Mi equipo es de 32 bits y funciona muy bien en la edición express 2010. El dibujo que está en .bmp lo puedes hacer también a GDI+ cosa que ya sabes. Lo que cuesta es hacerlo más que en decirlo.
> 
> Si decides hacer un manual, bienvenido sea, aprenderé de ti hacer controles a parte con la express 2010, el de pago si me sale con facilidad.
> 
> Saludo.



Que bueno que halla funcionado...Espero realizar mas controles sencillos. ya que estoy viendo de que se hace cada vez mas complejo, cuando se quiere realizar otras cositas...
pero intentare  hacerlas...y cuando salgan hare un pequeño manual...

Saludos!!!


----------



## Meta

No me funciona el código fuente. jejeje.

Todo eso lo hacía fácil con el de pago del VS 2005, pero a ti con el Express te sale y funciona.


----------



## ByAxel

Hola @george-manson-69
Una consulta aunque no sea sobre el tema pero me pica la mano tener el VS2010,  dime que tantos recursos pide el Visual Studio 2010 ? ya que yo tengo el 2008 de pago pero que tanto le pediría a mi PC si adquiero el 2010 ya que mi PC no es de las mejores y como mucho supera por un poco los requisitos del Win7.

Gracias.
Saludos


----------



## Meta

Puedo dar mi opinión. ME bajé el gratuito, el 208 y el 2010 lo tengo instalado. Lo puedes descargar por aquí.

http://www.microsoft.com/express/Downloads/

Lo uso en un Pentium III 933 MHz, hasta que me compre otro ya que el nuevo se me quemó la placa base y no tengo dinero hasta el momento.

Sin contar con las novedades técnicas diré algunas:



 La interfaz ha cambiado.
 Ya se puede poner capas fuera y moverla del IDE.
 El 2010 tarda más en arrancar que el 2008.
 El 2008 es más estable que el 2010 ya tiene SP1 y se nota. Ya llegará el SP1 del 2010.
 El 2010 tarda más en compilar cualquier programas que hagas que el 2008.
 Chupa más recursos el 2010 hasta para cerrar el IDE.
 En resumen, el 2010 es más lento, tiene más novedades, pero si eres nuevo, no lo notarás mucho y el 2008 te funcionará muy bien.
 En equipos rápidos i5, i7, etc se nota la velocidad que tiene el 2008 en todo, claro que, lo notarás más obsoleto.
 
Saludo.


----------



## george.manson.69

Meta dijo:


> Puedo dar mi opinión. ME bajé el gratuito, el 208 y el 2010 lo tengo instalado. Lo puedes descargar por aquí.
> 
> http://www.microsoft.com/express/Downloads/
> 
> Lo uso en un Pentium III 933 MHz, hasta que me compre otro ya que el nuevo se me quemó la placa base y no tengo dinero hasta el momento.
> 
> Sin contar con las novedades técnicas diré algunas:
> 
> 
> 
> La interfaz ha cambiado.
> Ya se puede poner capas fuera y moverla del IDE.
> El 2010 tarda más en arrancar que el 2008.
> El 2008 es más estable que el 2010 ya tiene SP1 y se nota. Ya llegará el SP1 del 2010.
> El 2010 tarda más en compilar cualquier programas que hagas que el 2008.
> Chupa más recursos el 2010 hasta para cerrar el IDE.
> En resumen, el 2010 es más lento, tiene más novedades, pero si eres nuevo, no lo notarás mucho y el 2008 te funcionará muy bien.
> En equipos rápidos i5, i7, etc se nota la velocidad que tiene el 2008 en todo, claro que, lo notarás más obsoleto.
> Saludo.


 

que raro que no ha funciona..tendre que chekar eso......!!!

Ah Y mi compu si corre bien el c# 2010 si se tarda un poco pero un poquito mas que el2008 pero casi no se persive
..
Voy a checar eso de que ha fallado el tal compaz que realize en c#

saludos


----------



## Meta

No encuantra algo llamado "Play" y no existe, pero si "Barra". Eso es lo que estoy viendo.


----------



## ByAxel

Hola de nuevo.
Me quedo con el VS2008 por ahora 

Adjunto un ejemplo con un control tipo Gauge en C# que use en algunas pruebas hace tiempo, el control solo tiene un par de modificaciones con respecto al original, además que es de código
abierto, así que es perfecto para las pruebas.

Lo que rescato es el modo en que usa el GDI+ que lo podemos usar como base para crear otros controles, así que pido la voluntaria colaboración para destripar el código de este control ya que en varios de sus procesos no los entiendo 

Saludos...


----------



## george.manson.69

ByAxel dijo:


> Hola de nuevo.
> Me quedo con el VS2008 por ahora
> 
> Adjunto un ejemplo con un control tipo Gauge en C# que use en algunas pruebas hace tiempo, el control solo tiene un par de modificaciones con respecto al original, además que es de código
> abierto, así que es perfecto para las pruebas.
> 
> Lo que rescato es el modo en que usa el GDI+ que lo podemos usar como base para crear otros controles, así que pido la voluntaria colaboración para destripar el código de este control ya que en varios de sus procesos no los entiendo
> 
> Saludos...



Orlae muy bueno...ya me da mas ideas de realizar otros controles...jejej!!}
gracias...
y saludos!


----------



## george.manson.69

Simple control de matrix 8x8...

Este prograjma te entrega valores que corresponden al dibuja que hallamoas puesto en la matrix, simplemente copiamos y pegamos a nuestro programa para el pic y listo.

Los que esten familiarizados con matrices de led...entenderan este programa sencillo


----------



## Meta

Van mejorando. ¿Manual?


----------



## george.manson.69

Meta dijo:


> Van mejorando. ¿Manual?



Claro que si aunque no he tenido ya tiempo para seguir aun con los manuales.... pero lo ya casi termino....a lo mejor la otra semana sin falta :=)


----------



## Meta

Tahnks you. Contigo se aprende mucho.


----------



## george.manson.69

Este manual menciona solo lo mas basico para la creacion de controles para instrumentacion.


----------



## Meta

Muchísimas gracias.

Muy bueno el tutorial, lo voy a seguir.  Contigo se aprende muchas cosas. Si vas a ampliarlo, bien venido sea.

Buen trabajo.


----------



## george.manson.69

Meta dijo:


> Muchísimas gracias.
> 
> Muy bueno el tutorial, lo voy a seguir.  Contigo se aprende muchas cosas. Si vas a ampliarlo, bien venido sea.
> 
> Buen trabajo.



Gracias...y si seguire apliando este tema...ya que es muy interesante.


----------



## Meta

Lo bueno que está relacionado con la electrónica. Me viene bien si lo conecto al puerto serie para hacer cositas en tre el PIC y tus dibujos GDI+.


----------



## george.manson.69

Ahora he desarrollado un software beta donde puedes cambiar el texto de una matriz de 14x30, y automatizar el texto, por ejemplo

que aparecesaza por 5 seg un texto y despues otro y asi, maximo 3 textos, claro que se puede ampliar a mas matrices, y asi, pueden usar los .DLL para generar sus codigos de C# y hacer sus propios programas.

Por ahora es todo.

nota: Tanto el programa y los archivos .DLL se pueden usar en platformas .NET de 3.5 en adelante.


----------



## ByAxel

Genial, me diste una idea...  en cuanto me de tiempo la hago y la subo por acá...

A, solo me funcionó con números y las letras no aparecen... o que es lo que ice mal


----------



## george.manson.69

ByAxel dijo:


> Genial, me diste una idea...  en cuanto me de tiempo la hago y la subo por acá...
> 
> A, solo me funcionó con números y las letras no aparecen... o que es lo que ice mal


 
se me olvido mencionar que funciona en mayusculas nada mas

y los numeros del 0 a 9 tmb , de la A a Z, no funciona la Ñ

y de los simploos nada mas  $  y '  ' (espacio)

tienes que usar en el text box solo 6 letras que corresponden a las 6 matricez de la primera fila y de la segunda tambien tienmen 6 matricez.


----------



## ByAxel

A, ok ya entendí


----------



## Meta

Muy  bueno. Sigue así. Cuando acabes cosas irás actualizando el manual. 

Buen trabajo campeón.


----------



## george.manson.69

He realizado controles como botones y leds, pueden usar los archivos .DLL para importarlos a sus proyectos para c#!!!


----------



## Meta

Buenísimo.

Estás hecho un profesional.


----------



## george.manson.69

para los interesados en el tema

aqui esta una pagina muuuuy buena para controles de intrumentacion!!!

www.codeproject.com

ahi encontre plotter, botones, y otras cosas que me dieron muchas ideas...para ser los controles anteriores que puse..

Por ahora estoy aprendiendo como hacer un tipo de programa que agarra y ponga cosas en una pantalla, tipo labview.
Saludos...


----------



## ByAxel

Interesante...
Eso es Drag and Drop y usa bastante las coordenadas del mouse, por lo que se; todo el ambiente de diseño es un control ya que hay varias cosas a tomar en cuenta...
- Drag and Drop de un control.
- selección de control (algo que lo resalte entre todos al seleccionarlo).
- múltiple selección (digamos, como se hace en proteus).
- ...

por eso digo que el mismo ambiente de diseño es un gran control...

Bueno, te paso un ejemplo de lo que ice hace un tiempo intentando lo mismo jeje,
esta en VB.NET pero te puede servir de algo. En el ejemplo:
> Inserta un control 'x' con el botón insertar.
> Coge y arrastra el control con el mouse sobre un grid (no se ve pero mantiene el orden).
> Al coger un control, se ve la descripción en el textBox inferior y con el botón debajo se puede mover el control a 'x' lugares. Con eso creo que he cubierto lo básico pero falta mucho 

Me avisas si no te funciona ya que ahí e usado un control llamado "TabControlEX.dll".

Un saludo...


----------



## george.manson.69

ByAxel dijo:


> Interesante...
> Eso es Drag and Drop y usa bastante las coordenadas del mouse, por lo que se; todo el ambiente de diseño es un control ya que hay varias cosas a tomar en cuenta...
> - Drag and Drop de un control.
> - selección de control (algo que lo resalte entre todos al seleccionarlo).
> - múltiple selección (digamos, como se hace en proteus).
> - ...
> 
> por eso digo que el mismo ambiente de diseño es un gran control...
> 
> Bueno, te paso un ejemplo de lo que ice hace un tiempo intentando lo mismo jeje,
> esta en VB.NET pero te puede servir de algo. En el ejemplo:
> > Inserta un control 'x' con el botón insertar.
> > Coge y arrastra el control con el mouse sobre un grid (no se ve pero mantiene el orden).
> > Al coger un control, se ve la descripción en el textBox inferior y con el botón debajo se puede mover el control a 'x' lugares. Con eso creo que he cubierto lo básico pero falta mucho
> 
> Me avisas si no te funciona ya que ahí e usado un control llamado "TabControlEX.dll".
> 
> Un saludo...



eXCELENTE!!!....

lo voy a chekar como lo hiciste y a ver si le puedo aprender algo...si se abrio !!!


----------



## george.manson.69

Este archivo .Dll podremos exportarlo a nuestros programas que vallamos hacer en c# por ejemplo podemos realizar un software tipo frecuenciometro que pueda medir de 0 a 9999999Hz
solo es un ejemplo.

Necesitamos usar los tres archivos .DLL para que funcione correctamente el contador.

la funcion seria _counter.VALOR(long numero)_

numero es un valor que valla de 0 a 9999999

si se desea nada mas tener tres display, entonces solo usaremos los dos archivos .DLL que son BARRA.DLL y DISPLAY.DLL, 
Al importar a nuestro programa los dos arcchivos, solo tomaremos como referencia el DISPLAY 
del cual al agregarlo y para cambiar de numero por ejemplo de 0 a 9 (como un display tipico)
seria la funcion
_
DISPLAY.cambio(byte b)_ o _change_ no me acuerdo bien...jejeje
y listo...


----------



## ByAxel

Que tal.
Como antes mencione respecto al control tipo matriz de LEDs logré crear mi primer control echo totalmente en VS2010 C#, lo tengo en fase inicial pero iré subiendo las versiones hasta lograr cada objetivo.

*Control/generador matriz de LEDs:*
Objetivos:
> Visualizar texto, números y símbolos soportados por el sistema en una matriz de LEDs.
> Cambiar el tipo de texto en la matriz (Cualquier fuente instalada en el sistema) y variar la resolución (tamaño) del texto.
> Cambiar el color de los LEDs y diseño del mismo.
> Generar código para memorias externas o tablas con código para compilar en los lenguajes asm, C y Basic para microcontroladores.
> Editor, lograr que cada LED sea sensible al mouse para lograr crear diseños personalizados.

Versiones:
*V1* Pro y contras:
- El control soporta re-dimensionado (se puede cambiar el tamaño del mismo). 
- Visualiza texto con un límite de 10 caracteres incluidos espacios, restringido por el tipo de letra (hay fuentes alargadas, de símbolos, gráficas, etc) que reducen el espacio de la visualización.
- Para los LEDs: soporta el cambio de colores, cambio de diseño (circular o cuadrado) y separación entre LEDs.
- La resolución va desde matrices de 7 x 5 hasta 32 x 200 LEDs, cada LED se ajusta al tamaño del control.
- Algunas letras/símbolos no pueden ser correctamente visualizados (problema del algoritmo).
- Y un par de bugs.

*V2* = mejorar V1 + (En proceso para el siguiente post...)

*NOTA*: Para hacer funcionar el ejemplo se requiere como mínimo tener instalado el Framework 3.5 o 4.0.

Es todo por ahora y aprovecho para preguntar; ¿saben de algún editor para memorias (por ejemplo 24xx1025)? o ¿como debe ser la sintaxis de un archivo *.hex o *.bin para grabar las memorias directamente por medio del PicKit2 u otro programador?.

saludos.


----------



## Meta

Está buenísimo, sigan así.


----------



## george.manson.69

Excelente proyecto...!!!


----------



## Meta

Si amplian nuevos tutos mejor. Vale la pena sus trabajos.


----------



## ByAxel

_*Control/generador matriz de LEDs V2:*_
> Programa de ejemplo totalmente funcional que genera arreglos en lenguaje C o archivos *.bin para memorias; dentro del archivo adjunto está el programa, un pequeño manual, el dll y todo lo necesario.

*V2*
> Soporta cualquier texto instalado en el sistema.
> El tamaño del texto y de la matriz son totalmente independientes.
> Genera código en (*.bin) para memorias externas y (*.c) arreglo de bytes en lenguaje C para compiladores C de microcontroladores.
> El límite de filas y columnas se ha ampliado a (500 x 500 leds 'no probado').
> El dll del control tiene algunas propiedades que solo podrán ser usadas desde Visual C# para los que quieran usarlo de otras maneras (ver manual). (Se pueden lograr efectos animados puesto que se puede controlar cada led del control matriz o agregar más texto o gráficos para luego generar el archivo *.bin o *.c). Con lo anterior e visto que el control dll es capaz de generar datos para LCDs gráficos (lo tengo bajo pruebas).

*V3* = Generador de código para LCDs gráficos GLCD.

saludos


----------



## george.manson.69

Excelente...proyecto...sigue asi!!!

Subire al rato un proyecto parecido...pero no tan padre como el tuyo...jaja...pero bueno algo es algo...


----------



## Meta

Muy buenos. Ánimo y adelante. Pueden ampliar sus tutotiale s en PDF, vale la pena para aprender.


----------



## george.manson.69

Este software que fue realizado en Microsoft Visual C# ofrece la posibilidad de cambiar el texto de una matriz de 8x24, del cual solo podemos escribir los 32 caracteres completos para que no surga un error de envio.

En el archivo .ZIP se encuentra todo lo necesario para simular correctamente tanto el software y simulacion en proteus.

y muy pronto actualizare el manual anterior, para crear otros controles de intrumentacion.


----------



## ByAxel

Muy bueno *george.manson.69*, creo que yo me estoy excediendo jeje...

Una pregunta, más es una consulta, ideas u opinión a los dos "*Meta* y *george.manson.69*"...

- Mi dilema es respecto a la *V3* del control que estoy haciendo, puesto que no sigo lo que dice el título "Creando controles de Instrumentacion para c# 2010"  , el control solo quedaría como un visor de gráficos o animación (pero que usualmente??) y la posibilidad de generar código (y otros en la V3) lo incluiría dentro de un programa funcional, estaría bien?.

Además varios compiladores ya tienen librerías gráficas por lo que e decidido no reinventar la rueda (desde mi punto de vista )...

- Por otro lado ya vi la manera de incluir "Drag & Drop" al control en la V3 pero solo dentro de un programa funcional (free) donde por ejemplo, el texto, botones, formas, etc se puedan mover con el mouse y cambiar sus propiedades (forma, tamaño, fuente, etc) (como si se tratase de un programa de diseño)... todo dentro de la pantalla simulando un LCD gráfico para luego generar el código respectivo... voy por buen camino?, críticas?, sugerencias?...

- Con respecto a la V2, la voy a mejorar... si lo han probado, han visto cual es el problema? o algo más para agregar o quitar...

saludos...


----------



## george.manson.69

ByAxel estas haciendo un buen trabajo....! el V2 que realizaste es  bueno, ya que da muchas ideas, para los que ya saben programar  microcontroladores y hacer interfaces USB o Serial y que apenas se esten  involucrandose en la programacion de C# es buen comienzo para ellos y  para mi...jeje...ya que se dan la idea realizar un proyecto con matrices...Todo lo que sriva para ayudar hacer proyectos con electronica, que se necesite tener un software como control entrara o para generar codigos como tu dices para glcd por supesto entra a este tema...porque no..


----------



## Meta

Lo bueno es hacer un manual sobre C# con botoncitos, USB y que se pueda apagar y encender el del PIC.

¿Alguien se siente capaz de hacer al menos esta tarea? ¿Parece fácil verdad?
No tengo idea de USB de PIC. Cuando me entere haré un manual como este de C# como hice con el puerto serie y otro manual del puerto paralelo.

Ánimo, poco a poco se hará.


----------



## ByAxel

*iMatriz V2.1*
Dentro del manual adjunto, dejo las funciones avanzadas para que la usen en Visual C#.

Programa Test del control Matriz de LEDs V2.1, se agregó nuevas funciones.
- El texto no se dibuja directamente, para eso se usa un método que devuelve el arreglo del texto, haciendo posible la escritura multilinea que se dibuja por coordenadas usando otro método.
- Matriz bi/multi-color, los buffer de dibujo bicolor y multicolor son independientes. En modo multicolor cada color del Led es independiente.
- Método para dibujar imágenes multicolor en la matriz. Tiene la posibilidad de indicarle donde inicia el dibujo y la región de la imagen que se desea dibujar.s:
- Método para borrar toda la matriz, para borrar una región rectangular, para obtener una región rectangular, para dibujar una región rectangular, para cambiar el color a un Led, etc... lo ven en el manual.

Sobre el USB, solo tengo en HID pero aun no se como ponerlo como control  ... Edito... 

saludos.


----------



## george.manson.69

Tienes un 100!!! esta bueno tu programa ya que se puede sacar los valores necesarios para despues visualizarlo en un cirucito que maneje matrices tricolores...


----------



## Meta

Buenísimo, van haciendo explicaciones en PDF y todo.
Felicidades al grupo.


----------



## george.manson.69

En este Manual crearemos un control "display" para mostrar el valor analogo de un microcontrolador PIC16F886.
Espero que sea de su agrado.

en la pagina ucursos.webs.com he subido un controlador de servos el software fue realizado en C#!


----------



## Meta

Menudo trabajo campeón. Está bueno saber lo del CAD y por puerto serie con C#. Aunque la idea que tenía es con ASM cuya forma de hacerlo es larrrrrrrrrrgo y pesado.

El manual cada vez más está de lujo, te guía bien con imágenes y explicaciones incluidas.

Buen trabajo artista.


----------



## dcastibl1

bueno felicitaciones a george.manson.69 por el excelente aporte y trabajo que esta realizando y todos los demas q han colaborado... george quisiera q me aconsejaras un libro para iniciar c# ya que en la u vi este tema pero la verdad se me olvido y nunca segui practicando... bueno ya viendo los aportes que han hecho me ha llamado mucho la atencion sobre esto y quisiera aprenderlo entonces agradeceria su colaboracion salu2...


----------



## Meta

Hola:

Puedes mirar un poco de que va la interfaz aprendiendo desde aquí.
http://electronica-pic.blogspot.com/2008/11/electrnica-pic.html

También aquí aprender un poco de que va C#.
http://electronica-pic.blogspot.com/2010/05/introduccion-visual-c-2005-express.html

Uno que dicen que es muy bueno en Inglés. Este es español, este libro de paso a paso con C# 2010.






Fuente:
http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&codigo_comercial=2301538


----------



## betodj

Muchas felicidades por compartir sus conocimientos y experiencias con el foro. Es de aplaudir y valorar el estupendo trabajo realizado por ustedes .  En hora buena y un fraternal saludo..


----------



## ByAxel

Continuando, subo el control para que lo usen en sus proyectos junto a un pequeño manual que describe las propiedades del mismo y un programa de Test.

*Control en C# Termómetro V1*
- El control visualiza la temperatura en un doble escala, una principal y otra que le he llamado cursor. Ambos son independientes y tiene la posibilidad de generar un evento cuando el valor de la temperatura principal supera al valor establecido en Cursor.
- Visualiza tres escalas (Celsius, Farenheit y Kelvin), incluye un método para convertir entre escalas.
- Prácticamente se pueden cambiar todos los colores del control, incluye la posibilidad de poner una imagen de fondo y fuente/color del texto.
- El cursor de la escala también puede ser dinámico, es decir que se puede variar por medio del mouse.
*>* El resto está en el manual para que hagan lo que quieran con él  .

--------------
Sobre GDI+, estos link son muy buenos...
System.Drawing (Espacio de nombres)
Graphics (Miembros)
Con eso e podido crear la mayoría de cosas que he subido...

PD: Alguien se anima a crear controles con WPF "Windows Presentation Foundation", dicen que con eso los controles sales preciosos  en aspecto.

saludos


----------



## Meta

Funciiona bien el programa hasta los colores.

El PDF está de lujo bien explicado.

Estáis hecho unos profesionales.


----------



## george.manson.69

ByAxel

Buen control...me ganaste  ya estaba pensando apenas realizar un termometro...pero aparece ya no lo voy hacer...jeje...Saludos!


----------



## dcastibl1

gracias meta por el dato de visual c# se le agradece mucho... ahora toca es leer y practicar en serio 
salu2.


----------



## ByAxel

Como información, sin ánimo de promover la piratería...
Encontré estos controles hace un tiempo, véanlo ya que les puede dar algunas ideas
para hacer sus propios controles.
http://www.dundas.com/Components/Gallery/Flash/Gauge/

Aclaro que sus controles son algo pesados en ciertas tareas, pero son bonitos  ... yo mismo quiero intentar crear/copiar algunos...

saludos.


----------



## george.manson.69

Estaba realizando un tipo velocimetro en c# pero tuve algunas cosas sin aclarar, ya que cuando cada vez se movia al aguja todo el control parpadeaba estuve intentando pero no encontre la solucion...subo todo el archivo del control para que lo modifiquen, encuentren la solucion...


----------



## ByAxel

Incluye:


		Código:
	

using System.Drawing.Drawing2D;


Para optimizar el diseño puedes incluir esto debajo de InitializeComponent();


		Código:
	

[COLOR="Blue"]this[/COLOR].SetStyle(ControlStyles.ResizeRedraw, [COLOR="blue"]true[/COLOR]);
[COLOR="Blue"]this[/COLOR].SetStyle(ControlStyles.AllPaintingInWmPaint, [COLOR="blue"]true[/COLOR]);
[COLOR="blue"]this[/COLOR].SetStyle(ControlStyles.UserPaint, [COLOR="blue"]true[/COLOR]);
[COLOR="blue"]this[/COLOR].SetStyle(ControlStyles.OptimizedDoubleBuffer, [COLOR="blue"]true[/COLOR]);


En OnPaintBackground y OnPaint usa directamente la clase Graphics para dibujar algo...
Quita Graphics g = CreateGraphics(); y usa directamente la clase:


		Código:
	

e.Graphics.DrawEllipse(p,0,0,[COLOR="Blue"]this[/COLOR].Width-2,[COLOR="blue"]this[/COLOR].Height-2);

 por ejemplo.


----------



## Moyano Jonathan

Che la verdad me impresiona el laburo de ustedes ....FELICITACIONES !!! 

PD: Tengo que aprender como se hacen esos controles


----------



## george.manson.69

Gracias ByAxel por la ayuda voy a modificar el control a ver que sale...


----------



## george.manson.69

Bueno subo un control muy sencillo un Medidor Circular.

Saludos.


----------



## Meta

Que bueno. ¿Lo hiciste desde cero o con una librería .dll a parte que modificaste?


----------



## george.manson.69

Meta dijo:


> Que bueno. ¿Lo hiciste desde cero o con una librería .dll a parte que modificaste?



desde cero meta...no quedo tan profesional..per algo es algo..jejej...un poco mas arriba esta el codigo....pero tuve algunos probelmas con parpadeos..y ya lo solucione...gracias por unos consejos de ByAxel...
Saludos


----------



## Meta

Lo probé, pero no sale como que a contado una descarga al menos una vez con PDF incluido. Lo bueno es que funciona, lo de profesional lo puedes hacer si dedidas más tiempo. Sabes más que yo en temas de GDI+. Gracias a ustedes estoy en ello poco a poco.

Lo que no se como haces lo del .dll a parte.


----------



## ByAxel

El mundo del Visual Studio realmente es bien amplio (creo que nunca se termina )...

Un libro manual que les va a gustar, poco más de 1000 páginas  .
Pro .NET 2.0 Windows Forms and Custom Controls in C#


saludos.


----------



## Meta

Y eso que no han sacado para el .NET 4.0.


----------



## ByAxel

Aunque poco, es muy útil.
Pro C# 2010 and the .NET 4 Platform
Pro WPF in C# 2010


----------



## Meta

Aquí hay algo más español.







http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&codigo_comercial=2301538

Este libro su original es en Inglés y está mejor, este está traducido al español y con las quejas que he leído por Internet, es difícil de entender y no lo recomiendan, claro que es el 2008, pero este es el 2010 y no se como será.


----------



## george.manson.69

Subo un simple control parecido al trackbar del programa C#.

Espero que le guste.


----------



## ByAxel

No se me ocurre nada  , bueno poco a poco sale... ahora estoy viendo el diseño de gráficos circulares que realmente me han echo revisar otra vez mis libros de la escuela  por no decir que falta incluir efectos para que estos se vean más reales (en cierto modo estoy comprendiendo la complejidad que tienen esos programas de diseño gráfico ).

En fin les dejo el código fuente de los ejemplos anteriores que hice.

saludos...


----------



## Meta

ME están dando ideas para hcer control de depósitos de agua a base de gráficos.


----------



## ByAxel

Sin ánimo de ser copión pero no se me ocurrió otro nombre ...

*Control iSlide V1*


Esto fue entre dos; control Slide donde la escala es la que se desplaza cuando el valor cambia.


----------



## Meta

Muy buenas:

¿Ese componente está hecho desde cero o haz utilizado una librería? Los gráficos están muy bien conseguidos con degradado de fondo incluido.

Ver el archivo adjunto 43122

No se como hiciste en el mismo punto para mover la rueda, con dos velocidades diferentes en el mismo espacio-tiempo.

Ánimos y adelante...


----------



## ByAxel

Es puro código.
Para conseguir un dibujo sin pixelado utilizo:
- ControlStyles... con sus atributos para que el estilo y comportamiento sean estables.
- Aprovecho OnPaintBackground() ya que aquí se dibuja antes de mostrar el control, además le incluyo:
*e.Graphics.SmoothingMode = SmoothingMode.HighQuality;*

Para las sombras:
- Lo hace en dos partes; un rectángulo que va desde el mínimo hasta la mitad del control y otro que va desde la mitad del control hasta el máximo.
- Crea un LinearGradientBrush con dos colores (Color Sombra y color de fondo) usando un valor Alpha de 255 para un color y 0 para el otro color, de esa forma simula transparencia.

Lo de la rueda es solo un efecto gracias a las sombras, si te fijas bien solo cambia el punto de inicio para dibujar la escala cuando cambia el valor.

No hay ningún efecto físico (nada de velocidad), el efecto se consigue variando la propiedad "Rango visible"...


Que solo permite ver un rango de la escala, si se pone 100 entonces se verá de -100 hasta +100 sin importar el valor actual que apunte el cursor (aguja).

Era simple, yo tampoco lo entendí a la primera, me ayudo un amigo...

----------------

Sobre efectos físicos como rebote o grabedad lo he estado viendo pero no entiendo , pregunté en el foro de MSDN pero sigo con dudas... me interesaría darle un efecto de tiempo al movimiento de las agujas que seria algo más real en cuanto a controles análogos...

Saludos


----------



## george.manson.69

Wow! excelente control!!! ByAxel

Saludos!


----------



## Meta

¿Se peude hacer estas cosas? ¿Complicado?






Hay que aprovechar hacer cosas para electrónica con la capacidad que tienen ustedes de hacer GDI+.

http://jogomez.webs.upv.es/ayuda.htm

Saludo.


----------



## ByAxel

De poder se puede a un nivel similar -no se cuanto tiempo tome crear uno con más cosas- el detalle es preparar al simulador para todo -fórmulas, errores en conexión y demás- no se, es posible que yo mismo me esté complicando. ya veré. Puedes dar más ideas, yo me quedé sin nada...

-----------
Para toda edad, lo considero la mejor forma de aprender a programar.
http://scratch.mit.edu/


----------



## george.manson.69

Subo el Manual Actualizado..del cual pongo un simple termometro.

Saludos


----------



## Meta

Buenísimo.

Esto si que es una recopilación en un PDF y ejemplos del C# con código fuete listo para investigar.

Me gustó lo de la Matriz de Led, los display y sobre todo lo del termómetro. Si no te importa algún día de estos los voy a usar siguiento tu ejemplo en el pdf.

Por ahora estoy entretenido con el temporizador DS1820 y PIC16F84A, no se si podré hacer las dos cosas juntas con el RS232 bajo los códigos de este libro.

Se me quemó el 16F84A por ponerlo al revés sin querer, pero tengo el 16F88 que debo adaptar.






Muy buenos sus proyectos, sigan así amigos. Con ustedes se aprende mucho.


----------



## george.manson.69

Les traigo un simple Graficador para que puedan visualizadados datos que ustedes deseen.

Saludos!


----------



## ByAxel

Está bueno...


----------



## Meta

La verdad es que si. ¿Se puede hacer algo como medir el rendimiento de su propia aplicación? Como el que hace Windows.


----------



## george.manson.69

He realizado dos practicas donde utiliza el graficador y el termometro de los controles anteriores de post...
Recuerda simepre utilizar el MAX232 para comunicaciones seriales entre PC a PIC.

'''''''''''''''''''''''''''''''''''''
CONTROL DE SERVOS

Aunque no tenga nada que ver el software con el tema...lo subo esta practica ya que es un software practico y funcional que lo probe en mi escuela es para controlar 8 servomotores.
el programa que contiene el Micro esta realizado en HI TECH compiler para pic16 en modo lite.


----------



## Alerce

Esto de los Controles esta muy interesante,pero me gustaria saber si pudieran dar alguna explicacion de como se desarrollan los codigos fuentes, por ejemplo me gusto mucho el del 
Test PanelLed V2,podrian hacer una guia para los que nos iniciamos. 

gracias


----------



## Meta

La verdad que son impresionantes.


----------



## enzo84

george.manson.69 dijo:


> Bueno subo un control muy sencillo un Medidor Circular.
> 
> Saludos.


Hola george.manson.69 está buenísimo recién lo probé.
Estoy trabajando en un proyecto para la facu, un dinamómetro inercial, es para medir la potencia de los motores de ciclomotores. La idea es mostrar las rpm con un tacómetro como este instrumento que hiciste y al costado ir mostrando en tiempo real la curva de potencia.
Estoy viendo como sería eso de ir graficando sobre un bitmap la curva de rpm y la curva de potencia, la idea es que pueda insertar valores de potencia  vs valor de rpm (x) a medida que me llegan los datos del pic desde el puerto serie.
Cualquier ayuda será bienvenida.

Saludos.

Cómo puedo hacer para graficar una curva en un PictureBox y después poder guardar la imagen? Sin usar ningún componente extra como zedgraph...


----------



## enzo84

Update: Probé con el componente COM NTGraph, funciona bien, bastante fluido, con autoescala y todo.
El problema que tengo es que grafico dos curvas, es decir, dos elementos, entonces, como la amplitud máxima de una de las curvas es totalmente distinta a la otra la grafica no queda bien.
Alguien usó NTGraph y sabe como agregar ejes Y independientes en el mismo gráfico? Como para que el AutoRange se realice bien para las dos curvas. Saludos!


----------



## Meta

Los componentes que están haciendo, incluso los pedazos de manuales incluidos están del diez.


----------



## einkatze

bueno, quiero decirles que me gusta lo que hacen, yo solo pude graficar lineas que se mueven pero leyendo la entrada analogica del pic, y con un pot irlo variando, y asi tener una linea "animada", por asi decirlo, y me agradan sus ejemplos, porque quiero modificar controles asi como el temometro, grax


----------



## einkatze

hola george.manson tengo unas preguntas acerca de tu control osciloscopio, como fue que logra ste redibujar sin borrar toda la pantalla o acaso no la borras.

para que tu dibujo se vea como el pasado es cambiado por el presente. y por ulktimo como puedo agregar tu archivo .dll para poder usar tu control, o no se si me podrias facilitar tu codigo mas o menos completp o decirme como ver tu .dll, yo estoy haciendo algo parecido como tu control, igual grafico, pero al final de mi picturebox limpio y empiezo a dibujar de nuevo, bueno, gracias por leer este mensaje y ojala pudieras darme una contestacion. gracias


----------



## Meta

Hola:

Ver el archivo adjunto 37010
Viendo esta imagen. Estoy intentando ahcer un círculo, no un eclipse, dentro de ella unpunto, luego una aguja que se mueve gracias al timer por cada segundo de 0 º a 306 º como un reloj.

Si alguien tiene un ejemplo de ello, pueden poner el código aquí. De momento hago rectas y flechas, pero no me sale en movimiento.







Saludos.

*Edito:*

He creado algo desde cero, todo a código.








		Código:
	

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;

namespace Probando
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Graphics papel = pictureBox1.CreateGraphics();

            // Creamos el lápiz inicial.

            // Dibujamos una línea recta.
            Pen lápiz2 = new Pen(Color.Green, 10);
            lápiz2.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
            lápiz2.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
            papel.DrawLine(lápiz2, 20, 188, 188, 188);

            // Dibujar rectángulo.
            Pen lápiz3 = new Pen(Color.Black);
            papel.DrawRectangle(lápiz3, 10, 10, 376, 376);

            // Dibujar círculo 100 % redondo.
            Pen lápiz4 = new Pen(Color.Red, 5);
            papel.DrawEllipse(lápiz4, 10, 10, 376, 376);
        }
    }
}


Ahora no se como controlar la aguja o flecha verde con el trackbar1.

Saludo.


----------



## ByAxel

Hola.
Utiliza el evento Paint del PictureBox, ahí dibujas...

Utiliza el evento del TrackbarChanged creo...,  así como para un button por defecto es el evento Click... el TrackBar tiene un evento por derfecto, solo daz doble clic sobre el mismo y aparece en la ventana de código...

En el evento del trackBar coloca:
pictureBox1.Refresh(); también se puede usar .Invalidate();

Esto produce que se vuelva a dibujar el control pictureBox y entre a su evento Paint...

Saludos.


----------



## Meta

Hola:

Pues tienes razón, ahora me funciona.








		Código:
	

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 System.Drawing.Drawing2D; // No olvidar.

namespace Lavadora
{
    public partial class Form1 : Form
    {
        // Definir un objeto para crear líneas y curvas.
        private Pen lápiz2;
        private Pen lápiz3;
        private Pen lápiz4;
        private float ángulo;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Size = new Size(300, 300);
            pictureBox1.BackColor = Color.AntiqueWhite;

            lápiz2 = new Pen(Color.Green, 10);
            lápiz2.StartCap = LineCap.ArrowAnchor;
            lápiz2.EndCap = LineCap.RoundAnchor;

            lápiz3 = new Pen(Color.Black);
            lápiz4 = new Pen(Color.Red, 5);

            ángulo = 0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ángulo += 10F;
            pictureBox1.Refresh();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ángulo -= 10F;
            pictureBox1.Refresh();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(lápiz3, 10, 10, pictureBox1.ClientSize.Width - 20, pictureBox1.ClientSize.Height - 20);
            e.Graphics.DrawEllipse(lápiz4, 10, 10, pictureBox1.ClientSize.Height - 20, pictureBox1.ClientSize.Height - 20);

            e.Graphics.TranslateTransform(pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
            e.Graphics.RotateTransform(ángulo);
            e.Graphics.TranslateTransform(-pictureBox1.ClientSize.Width / 2, -pictureBox1.ClientSize.Height / 2);
            e.Graphics.DrawLine(lápiz2, 20, pictureBox1.ClientSize.Height / 2, pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            ángulo = (float)trackBar1.Value;
            pictureBox1.Refresh();
            label_angulo.Text = ángulo.ToString();
        }
    }
}


No olvidar las propiedades esto.
            trackBar1.Maximum = 180;
            trackBar1.Minimum = -180;
            trackBar1.LargeChange = 1;

Ahora toca otro reto más complejo.




En el dibujo de arriba hecho con paint de Windows 7, todo lo dibujado  gris, si te fijas bien, gris fuerte es el círculo, gris flojo son  rallas, haré el código fíjo primero que requiere tiempo. La cuestión es,  que gire como la flecha verde. Como tiene muchas  líneas de dibujo. 



 ¿Cómo girar todo sincronizado al mismo tiempo?


 Ya no es tan fácil.


----------



## ByAxel

Hola...
No imaginé que usarias matriz de transformación para hacer girar el dibujo jeje... se puede pero me parece engorroso si que quiere hacer más cosas... Reiniciaciado la matriz y otros...

En las primeras páginas de este tema puse el código un control con manecilla... puede que te ayude, claro está algo más elavorado pero sirve.

Aquí un resumen de tal control, dibuja sobre un panel o control de usuario... al fin y al cavo casi en cualquier control se puede dibujar... incluso si se crea un control de usuario eredado se puede acceder a los eventos Paint y paintBackGround del mismo, ya sea pictureBox, Panel, Button, etc...



		Código:
	

public partial class Form1 : Form
    {
        int x, y, width, height;
        private float minValue = 0;
        private float maxValue = 50;
        private float currentValue;
        private float recommendedValue;
        
        float fromAngle = 90F;  // 135
        float toAngle = 450F;   // 405

        public Form1()
        {
            InitializeComponent();

            panel1.Paint += panel1_Paint;

            x = 5;
            y = 5;
            minValue = 0;
            maxValue = 100;
            width = panel1.Width - 10;
            height = panel1.Height - 10;
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            width = panel1.Width - x * 2;
            height = panel1.Height - y * 2;
            DrawPointer(e.Graphics, ((width) / 2) + x, ((height) / 2) + y);
        }

        private void DrawPointer(Graphics gr, int cx, int cy)
        {
            float radius = panel1.Width / 2 - (panel1.Width * .12F);
            float val = maxValue - minValue;

            gr.SmoothingMode = SmoothingMode.AntiAlias;

            val = (100 * (currentValue - minValue)) / val;
            val = ((toAngle - fromAngle) * val) / 100;
            val += fromAngle;

            float angle = GetRadian(val);
            float gradientAngle = angle;

            gr.DrawLine(new Pen(Color.Black, 2), 
                new PointF(cx, cy), 
                new PointF((float)(cx + radius * Math.Cos(angle)), (float)(cy + radius * Math.Sin(angle))));
        }

        public float GetRadian(float theta)
        {
            return theta * (float)Math.PI / 180F;
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            currentValue = (float)trackBar1.Value;
            panel1.Refresh();
        }
    }


El trackBar... mínimo es 0 y máximo 100.

Saludos


----------



## Meta

Holaaaaaa:

Me funciona demaravilla el como lo hiciste.

Tengo uno aquí hecho. Con colores cantosos para que se entienda, ya lo adaptaré cuando acabe todo.






Código bajo _*Visual C# Express 2013*_.



		Código:
	

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 System.Drawing.Drawing2D; // No olvidar.

namespace Lavadora_2
{
    public partial class Form1 : Form
    {
        private Pen lápiz2;
        private Pen lápiz3;
        private Pen lápiz4;
        private float ángulo;

        private GraphicsPath m_lavadora;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Size = new Size(300, 300);
            pictureBox1.BackColor = Color.AntiqueWhite;

            lápiz2 = new Pen(Color.Green, 10);
            lápiz2.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
            lápiz2.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;

            lápiz3 = new Pen(Color.Black);
            lápiz4 = new Pen(Color.Red, 10);

            ángulo = 0;
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(lápiz3, 10, 10, pictureBox1.ClientSize.Width - 20, pictureBox1.ClientSize.Height - 20);
            e.Graphics.DrawEllipse(lápiz4, 10, 10, pictureBox1.ClientSize.Height - 20, pictureBox1.ClientSize.Height - 20);

            e.Graphics.TranslateTransform(pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
            e.Graphics.RotateTransform(ángulo);
            e.Graphics.TranslateTransform(-pictureBox1.ClientSize.Width / 2, -pictureBox1.ClientSize.Height / 2);
            //e.Graphics.DrawLine(lápiz2, 20, pictureBox1.ClientSize.Height / 2, pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
            e.Graphics.DrawPath(lápiz2, m_lavadora);
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            ángulo = (float)trackBar1.Value;
            pictureBox1.Refresh();
        }

        private void pictureBox1_Resize(object sender, EventArgs e)
        {
            int ancho = pictureBox1.ClientSize.Width;
            int alto = pictureBox1.ClientSize.Height;

            m_lavadora = new GraphicsPath();

            m_lavadora.AddEllipse(20, 20, ancho - 40, alto - 40);
            m_lavadora.CloseFigure();
            m_lavadora.AddLine(20, (alto / 2), ancho - 20, (alto / 2));
            m_lavadora.CloseFigure();
            m_lavadora.AddLine(ancho / 2, 20, ancho / 2, alto - 20);
            m_lavadora.CloseFigure();
        }
    }
}

Hay algo que no me sale, añadí otro trackBar, para llenar hasta arriba o vaciar el agua por completo.






Se que no se parece nada a una lavadora, . Cuando acabe de hacer lo que quiero hacer, empezaré a diseñarlo a base de códigos una lavadora que se parezca algo a lo indicado abajo.





Una curiosidad. ¿Se puede hacer el agua azul transparente con GDI+?

Cuando me salga todo lo que quiero, haré una simulación real del comportamiento de una lavadora. jejejeje.

Saludo.

*Edito:*
Pues si, si tiene transparencia y es de agradecer. Sabía que tiene muchos efectos, pero no sabía si tenía transparencia.








		Código:
	

// Foros de electrónica http://www.forosdeelectronica.com
// By Meta.
// Fecha 14-04-2014.
// http://electronica-pic.blogspot.com.es

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 System.Drawing.Drawing2D; // No olvidar.

namespace Lavadora_4
{
    public partial class Form1 : Form
    {
        private Pen lápiz2;
        private Pen lápiz3;
        private Pen lápiz4;
        private float ángulo;
        private SolidBrush agua;

        private GraphicsPath m_lavadora;
        private GraphicsPath m_agua;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Size = new Size(300, 300);
            pictureBox1.BackColor = Color.AntiqueWhite;

            lápiz2 = new Pen(Color.Green, 10);
            lápiz2.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
            lápiz2.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;

            lápiz3 = new Pen(Color.Black);
            lápiz4 = new Pen(Color.Red, 10);

            ángulo = 0;

            agua = new SolidBrush(Color.FromArgb(200, 0, 0, 255)); // Transparencia del agua 200.
            trackBar2.Value = -90; // Para que empiece sin agua.
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(lápiz3, 10, 10, pictureBox1.ClientSize.Width - 20, pictureBox1.ClientSize.Height - 20);
            e.Graphics.DrawEllipse(lápiz4, 10, 10, pictureBox1.ClientSize.Height - 20, pictureBox1.ClientSize.Height - 20);

            e.Graphics.TranslateTransform(pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
            e.Graphics.RotateTransform(ángulo);
            e.Graphics.TranslateTransform(-pictureBox1.ClientSize.Width / 2, -pictureBox1.ClientSize.Height / 2);
            //e.Graphics.DrawLine(lápiz2, 20, pictureBox1.ClientSize.Height / 2, pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
            e.Graphics.DrawPath(lápiz2, m_lavadora);
            e.Graphics.ResetTransform();
            e.Graphics.FillPath(agua, m_agua); 
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            ángulo = (float)trackBar1.Value;
            pictureBox1.Refresh();
        }

        private void pictureBox1_Resize(object sender, EventArgs e)
        {
            int ancho = pictureBox1.ClientSize.Width;
            int alto = pictureBox1.ClientSize.Height;

            m_lavadora = new GraphicsPath();

            m_lavadora.AddEllipse(20, 20, ancho - 40, alto - 40);
            m_lavadora.CloseFigure();
            m_lavadora.AddLine(20, (alto / 2), ancho - 20, (alto / 2));
            m_lavadora.CloseFigure();
            m_lavadora.AddLine(ancho / 2, 20, ancho / 2, alto - 20);
            m_lavadora.CloseFigure();

            m_agua = new GraphicsPath();

            m_agua.AddArc(20, 20, ancho - 40, alto - 40, trackBar2.Value, 180 - 2 * trackBar2.Value);
            m_agua.CloseFigure();
        }

        private void trackBar2_ValueChanged(object sender, EventArgs e)
        {
            m_agua = new GraphicsPath();

            m_agua.AddArc(20, 20, pictureBox1.ClientSize.Width - 40, pictureBox1.ClientSize.Height - 40, -trackBar2.Value, 180 - 2 * -trackBar2.Value);
            m_agua.CloseFigure();
            pictureBox1.Refresh();
        }
    }
}







El próximo reto es hacer oleaje en el agua cuando el motor verde esté en marcha. Cuando se detenga, pues se queda quieta.


----------



## Meta

Buenas:

Empezamos hacer gráficos desde Visul C# 2010, dentro de poco nos tocarñá con l aversión 2015 y en este momento lo haré con la versión 2013 que uso ahora mismo.

Estoy por hacer esto.





Solo he hecho esto como base sin código de funciones algunas.





Código base que he echo ahora solo esto.


		Código:
	

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;  namespace Dibujo_Animado_GDI {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }          private void button_Activar_Click(object sender, EventArgs e)         {             timer1.Start(); // Activa el temporizador. Lo que no se si esto es mejor así o como indica abajo.             // timer1.Enabled = true;             timer2.Start();             timer3.Start();              // Tiempos en cada timer, lo que no me sale como cambiarlo desde el textBox. 1000 milisegundo son 1 segundo.             timer1.Interval = 100; // 0.1 segundos.             timer1.Interval = 500; // 0.5 segundos o medio segundo.             timer1.Interval = 1000; // 1 segundo.         }          private void button_Detener_Click(object sender, EventArgs e)         {             // Detener los timer.             timer1.Stop(); // También puede ser así: timer1.Enabled = false, lo que no se cual es el más adecuado para estos casos.             timer2.Stop();             timer3.Stop();         }     } }


Estoy recordando como se crea al menos un círculo guiado por aquí.

Descargar proyecto boceto C# 2013.

Saludos.

PD: Lo que quieran ayudar para aumentar de megas en DropBox aquí les dejo una invitación. Invitar.


----------



## Meta

Hola:

¿Algún control o librería sobre un dibujo de un depósito de agua?

Lo más parecido a esto.




Saludos.


----------

