
GraphicsPath. Como crear una lista List(Of T)
Publicado por anonymous (2 intervenciones) el 16/03/2016 12:28:08
Buenos días,
Necesito hacer una lista del tipo List(Of T) con elementos GraphicsPath y no lo consigo. Estoy usando Visual Basic 2005.
Se trata de lo siguiente:
Voy a dibujar unos 350 tramos entre líneas y arcos y quiero poner cada uno de los tramos en un GraphicsPath (es decir, cada GraphicsPath tendrá una sola línea o arco) y una vez dibujado todo en la pantalla poder seleccionar cada una de las líneas o arcos mediante el ratón. Para poder saber cual es el tramo seleccionado con el ratón tengo que buscarlo en la List(Of T) mediante For each.
Ya tengo hecho el siguiente código en el que se dibujan 2 arcos y que al hacer click con el ratón en alguno de ellos me muestra un mensaje que indica cual es el arco seleccionar pero sería larguísimo hecerlo mediante este código para los aproximadamente 350 tramos a dibujar. Por eso creo que la mejor solución es mediante List(Of T). El código:
Imports System.Drawing.Drawing2D
Partial Public Class MainForm
Dim arco1 As GraphicsPath
Dim arco2 As GraphicsPath
Dim trazo As Pen
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
arco1 = New GraphicsPath()
arco2 = New GraphicsPath()
arco1.AddArc(10, 10, 200, 200, 0, 90)
arco2.AddArc(150, 150, 200, 200, 0, -90)
trazo = New Pen(Color.Red, 3)
End Sub
Private Sub MainForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
If IsNothing(arco1) Then Return
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.DrawPath(trazo, arco1)
e.Graphics.DrawPath(trazo, arco2)
End Sub
Private Sub MainForm_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
If IsNothing(arco1) Then Return
If arco1.IsOutlineVisible(e.Location, trazo) Then
MessageBox.Show("clic en arco1")
End If
If arco2.IsOutlineVisible(e.Location, trazo) Then
MessageBox.Show("clic en arco2")
End If
End Sub
End Class
Alguien sabe como?
Muchas gracias.
Necesito hacer una lista del tipo List(Of T) con elementos GraphicsPath y no lo consigo. Estoy usando Visual Basic 2005.
Se trata de lo siguiente:
Voy a dibujar unos 350 tramos entre líneas y arcos y quiero poner cada uno de los tramos en un GraphicsPath (es decir, cada GraphicsPath tendrá una sola línea o arco) y una vez dibujado todo en la pantalla poder seleccionar cada una de las líneas o arcos mediante el ratón. Para poder saber cual es el tramo seleccionado con el ratón tengo que buscarlo en la List(Of T) mediante For each.
Ya tengo hecho el siguiente código en el que se dibujan 2 arcos y que al hacer click con el ratón en alguno de ellos me muestra un mensaje que indica cual es el arco seleccionar pero sería larguísimo hecerlo mediante este código para los aproximadamente 350 tramos a dibujar. Por eso creo que la mejor solución es mediante List(Of T). El código:
Imports System.Drawing.Drawing2D
Partial Public Class MainForm
Dim arco1 As GraphicsPath
Dim arco2 As GraphicsPath
Dim trazo As Pen
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
arco1 = New GraphicsPath()
arco2 = New GraphicsPath()
arco1.AddArc(10, 10, 200, 200, 0, 90)
arco2.AddArc(150, 150, 200, 200, 0, -90)
trazo = New Pen(Color.Red, 3)
End Sub
Private Sub MainForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
If IsNothing(arco1) Then Return
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.DrawPath(trazo, arco1)
e.Graphics.DrawPath(trazo, arco2)
End Sub
Private Sub MainForm_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
If IsNothing(arco1) Then Return
If arco1.IsOutlineVisible(e.Location, trazo) Then
MessageBox.Show("clic en arco1")
End If
If arco2.IsOutlineVisible(e.Location, trazo) Then
MessageBox.Show("clic en arco2")
End If
End Sub
End Class
Alguien sabe como?
Muchas gracias.
Valora esta pregunta


0