Domingo 17 de Noviembre de 2024, 23:25
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Curva XY moldeable con el mouse
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Curva XY moldeable con el mouse (Leído 1877 veces)
enzo84
Nuevo Miembro
Mensajes: 3
Curva XY moldeable con el mouse
«
en:
Martes 27 de Septiembre de 2011, 15:58 »
0
Hola a todos los programadores, este es mi primer post, me presento, mi nombre es Enzo de Argentina y estoy tratando de hacer una gráfica similar a esta:
http://www.youtube.com/watch?v=TuKL_K5hgbg
Si observan bien, al minuto del video se ve lo que quiero hacer.
Básicamente es una gráfica xy donde puedo modificar la posición de los puntos y agregar o quitarlos, por medio del puntero del mouse.
Siempre he programado en C, y esto del C# es totalmente nuevo para mi, tengo el Microsoft Visual C# 2010 Express, pero no entiendo mucho.
Alguien me puede dar una mano para poder realizar este cometido? Aunque sea poder dibujarlo sobre el mismo formulario.
Muchas gracias foreros, mis respetos y saludos!
Enzo.
Tweet
«
última modificación: Miércoles 28 de Septiembre de 2011, 17:09 por enzo84
»
enzo84
Nuevo Miembro
Mensajes: 3
Re:Curva XY moldeable con el mouse
«
Respuesta #1 en:
Miércoles 28 de Septiembre de 2011, 16:11 »
0
Bueno estuve probando, grafico con GDI sobre el mismo formulario para probar.
Uso tres puntos e hice que el del medio se mueva con el mouse con el evento MouseDown.
Funciona, pero ahora quiero partir de dos puntos, uno al inicio y otro al final.
Y luego al hacer clic, que se agreguen puntos y luego los pueda mover si me acerco a ellos.
Lo que hago es graficar un círculo en cada punto, y lo que haría para mover un punto es comparar la posición x,y del mouse si es que está dentro de este círculo cambiarlo de color para indicar que se está en condiciones de mover ese punto.
Primero lo probé con un arreglo de tres pares de puntos siendo el del medio dinámico y funcionó.
Como según creo, un arreglo es fijo, no puedo usarlo para lo que quiero, no se como agregarle puntos a un arreglo, entonces usé una lista y para pasarsela al DrawLines lo convierto a arreglo con ToArray(), pero no me une el primer punto con el segundo, y no se tampoco si es lo mejor, ojalá puedan aportar alguna idea, gracias.
Pongo el código:
Código: C#
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
;
namespace
PruebaDeGraficos
{
public
partial
class
Form1
:
Form
{
int
x, y
;
int
finx, finy
;
int
ox, oy
;
int
maxescx, maxescy
;
int
rpunto
;
bool
clicdowncurva
=
false
;
private
List
<
Point
>
mispuntos
=
new
List
<
Point
>
(
)
;
public
Form1
(
)
{
InitializeComponent
(
)
;
x
=
150
;
y
=
40
;
mispuntos
.
Add
(
new
Point
(
0
,
1
)
)
;
mispuntos
.
Add
(
new
Point
(
1
,
1
)
)
;
mispuntos
.
Add
(
new
Point
(
2
,
1
)
)
;
}
private
void
Form1_Paint
(
object
sender, PaintEventArgs e
)
{
rpunto
=
4
;
ox
=
30
;
oy
=
30
;
finx
=
this
.
Width
-
85
;
finy
=
this
.
Height
-
95
;
maxescx
=
finx
-
ox
;
maxescy
=
finy
-
oy
;
mispuntos
[
0
]
=
new
Point
(
ox, finy
)
;
mispuntos
[
1
]
=
new
Point
(
finx, finy
)
;
System.
Drawing
.
Pen
myPen
=
new
System.
Drawing
.
Pen
(
System.
Drawing
.
Color
.
Red
)
;
System.
Drawing
.
Graphics
formGraphics
;
formGraphics
=
this
.
CreateGraphics
(
)
;
formGraphics
.
DrawRectangle
(
myPen, ox,oy,maxescx,maxescy
)
;
mispuntos
[
2
]
=
new
Point
(
x, y
)
;
formGraphics
.
DrawEllipse
(
myPen, x
-
rpunto, y
-
rpunto,
2
*
rpunto,
2
*
rpunto
)
;
Font pruebaFont
=
new
Font
(
"Haettenschweiler"
,
10
)
;
Brush blackBrush
=
Brushes
.
Black
;
formGraphics
.
DrawString
(
x
.
ToString
(
)
+
" , "
+
y
.
ToString
(
)
, pruebaFont, blackBrush, x, y
-
20
)
;
myPen
.
Color
=
Color
.
Blue
;
formGraphics
.
DrawLines
(
myPen, mispuntos
.
ToArray
(
)
)
;
myPen
.
Dispose
(
)
;
formGraphics
.
Dispose
(
)
;
}
private
void
Form1_MouseMove
(
object
sender, MouseEventArgs e
)
{
if
(
clicdowncurva
)
{
x
=
e
.
X
;
y
=
e
.
Y
;
Invalidate
(
)
;
}
}
private
void
Form1_MouseDown
(
object
sender, MouseEventArgs e
)
{
clicdowncurva
=
true
;
x
=
e
.
X
;
y
=
e
.
Y
;
Invalidate
(
)
;
}
private
void
Form1_MouseUp
(
object
sender, MouseEventArgs e
)
{
clicdowncurva
=
false
;
}
}
}
Edito: creo que el problema es esa lista, me cambia el orden de los puntos cuando lo paso a array me parece...
UPDATE: El problema era que asigno el punto incial y final seguidos, ahora lo cambie a:
Código: C#
mispuntos
[
0
]
=
new
Point
(
ox, finy
)
;
mispuntos
[
2
]
=
new
Point
(
finx, finy
)
;
mispuntos
[
1
]
=
new
Point
(
x, y
)
;
Y funciona, prueben si quieren, pero todavía falta para lo que quiero.
La idea es poder agregar puntos, moverlos y tambien quitarlos.
Todavía no se como.
«
última modificación: Miércoles 28 de Septiembre de 2011, 17:09 por enzo84
»
enzo84
Nuevo Miembro
Mensajes: 3
Re:Curva XY moldeable con el mouse
«
Respuesta #2 en:
Lunes 3 de Octubre de 2011, 01:57 »
0
Bueno, logré lo que quería aunque no puedo eliminar el parpadeo:
http://www.youtube.com/watch?v=u2TfBZw0-Gg
Escuché del double buffering, entonces, agrego la linea:
Código: C#
this
.
DoubleBuffering
=
true
;
Pero no funciona, peor, no me grafica la línea hasta que muevo el mouse y parece que parpadea más todavía.
Alguna idea?
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Curva XY moldeable con el mouse