none
como desenhar uma linha em curva? RRS feed

Respostas

  • Que tipo de curva?

    Se vc se refer ea uma funçao, entao faça assim:

    http://visualbasic.w3computing.com/vb2008/14/vb-imagecube-plotting-functions.php

    agora se for só para desenhar uma curva, faça assim:

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.PaintEventArgs) Handles _
        MyBase.Paint
        Dim pts() As Point = { _
            New Point(50, 50), _
            New Point(250, 150), _
            New Point(150, 200), _
            New Point(100, 90), _
            New Point(50, 120) _
        }
        e.Graphics.SmoothingMode = _
            Drawing2D.SmoothingMode.AntiAlias
    
        ' Draw the curve.
        e.Graphics.DrawCurve(Pens.Black, pts)
    
        ' Draw the points.
        For i As Integer = 0 To pts.Length - 1
            e.Graphics.FillRectangle(Brushes.White, pts(i).X - _
                2, pts(i).Y - 2, 4, 4)
            e.Graphics.DrawRectangle(Pens.Black, pts(i).X - 2, _
                pts(i).Y - 2, 4, 4)
        Next i
    End Sub
    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 28 de agosto de 2014 18:08
    Moderador

Todas as Respostas

  • Que tipo de curva?

    Se vc se refer ea uma funçao, entao faça assim:

    http://visualbasic.w3computing.com/vb2008/14/vb-imagecube-plotting-functions.php

    agora se for só para desenhar uma curva, faça assim:

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.PaintEventArgs) Handles _
        MyBase.Paint
        Dim pts() As Point = { _
            New Point(50, 50), _
            New Point(250, 150), _
            New Point(150, 200), _
            New Point(100, 90), _
            New Point(50, 120) _
        }
        e.Graphics.SmoothingMode = _
            Drawing2D.SmoothingMode.AntiAlias
    
        ' Draw the curve.
        e.Graphics.DrawCurve(Pens.Black, pts)
    
        ' Draw the points.
        For i As Integer = 0 To pts.Length - 1
            e.Graphics.FillRectangle(Brushes.White, pts(i).X - _
                2, pts(i).Y - 2, 4, 4)
            e.Graphics.DrawRectangle(Pens.Black, pts(i).X - 2, _
                pts(i).Y - 2, 4, 4)
        Next i
    End Sub
    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 28 de agosto de 2014 18:08
    Moderador
  • Olá William,

    Muito bom!!

    funcionou perfeitamente mas, tem como engrossar a linha?

    A linha da curva ficou muito fina....

    quinta-feira, 28 de agosto de 2014 21:44
  • Isso vc controla atraves da propriedade pen. No exemplo acima a curva usa o padrao Pens.Black, isto é uma caneta de 1 pixel e cor preta.

    Mas voce pode criar sua propria caneta, com a espessura desejada (em pixels), cor (rgb) e estilo (tracejado, pontilhado, solido, ponto-traço, etcc)

    Veja um exemplo (linha espessura 3, verde, traço-ponto-ponto):

    pen1 = New System.Drawing.Pen(Color.Green, 3)
    pen1.DashStyle = Drawing.Drawing2D.DashStyle.DashDotDot
    
    e.Graphics.DrawCurve(pen1, pts)
    
    
    

    Para outros estilos (ou mesmo criar o seu), veja aqui:

    http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.dashstyle(v=vs.110).aspx

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 29 de agosto de 2014 12:59
    Moderador
  • Oi, William.

    Funcionou mas, uma dúvida...

    Os códigos funcionam somente dentro do evento PAINT?

    Sempre preciso colocar os codigos dentro disso (abaixo)?

    PrivateSubPictureBox1_Paint(ByValsender AsObject, ByVale AsSystem.Windows.Forms.PaintEventArgs) HandlesPictureBox1.Paint


    Não tenho como trabalhar por exemplo ao clicar um botão, faça a curva?

    por ex: PrivateSubbtnSELEÇÃO_Click(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) HandlesbtnSELEÇÃO.Click

    quarta-feira, 3 de setembro de 2014 19:17
  • Tem sim...

    veja o codigo inteiro aqui: http://www.java2s.com/Tutorial/VB/0260__GUI/DrawonaPictureBox.htm

    Se vc notar esta parte:

    Dim pen1 As New System.Drawing.Pen(Color.Green, 4)
    Dim g As System.Drawing.Graphics
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            PictureBox1.Refresh()
            g = PictureBox1.CreateGraphics
            g.DrawCurve(pen1, pts)' eu mudei o codigo original para o exemplo da curva
    End Sub
    vai ver que o processo de desenho é feito no click... 


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 3 de setembro de 2014 19:32
    Moderador
  • Então, eu tenho seguinte codigo abaixo e gostaria de executar ao clicar num botão.

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

            Dim bola() As Point = {New Point(147, 421), New Point(156, 428), _

                                  New Point(123, 460), New Point(116, 451)}

            e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

            e.Graphics.FillClosedCurve(Brushes.LightYellow, bola)

           ' Desenhar(Linha) de acordo com o tamanho do lápis (ex. 9)

            Dim teste() As Point = {New Point(198, 239), New Point(199, 262)}

            Dim Lapis1 As New Drawing.Pen(Brushes.LightYellow, 9)

            e.Graphics.DrawCurve(Lapis1, teste)

                End Sub

    ===============================

    Quero colocar dentro de...

    Private Sub btnSELEÇÃO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSELEÇÃO.Click

    ' Aqui dentro....

    End Sub

    quarta-feira, 3 de setembro de 2014 20:01
  • Faz assim:

    Private Sub btnSELEÇÃO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSELEÇÃO.Click
    
         PictureBox1.Refresh()
         g = PictureBox1.CreateGraphics
    
     Dim bola() As Point = {New Point(147, 421), New Point(156, 428),New Point(123, 460), New Point(116, 451)}
    
            g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    
            g.FillClosedCurve(Brushes.LightYellow, bola)
    
    
           ' Desenhar(Linha) de acordo com o tamanho do lápis (ex. 9)
    
            Dim teste() As Point = {New Point(198, 239), New Point(199, 262)}
    
            Dim Lapis1 As New Drawing.Pen(Brushes.LightYellow, 9)
    
            g.DrawCurve(Lapis1, teste)
    End Sub
    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 3 de setembro de 2014 20:16
    Moderador
  • Olá William,

    consegui converter e funcionou perfeitamente.

    Muito obrigado.

    abs,

    quarta-feira, 3 de setembro de 2014 20:58