VB中的交互式贝塞尔曲线

问题描述

为了准备秋季即将开课的 Adob​​e Illustrator 课程,学生们在学习钢笔工具和如何绘制贝塞尔曲线时总是骂人,我想我会为他们提供一些 Illustrator 之外的“理论基础”。到目前为止,我能够通过在单独的文本框中输入的 x 和 y 坐标描述的四个点来演示曲线的工作原理(请参阅附加的屏幕截图)。我的问题是,如何通过让学生“选择”控制点(以蓝色显示)并在图片框周围移动它们来将这个静态演示“转换”为交互式演示?这不是一个简单的问题。任何指针将不胜感激。

这是我目前的源代码

Public Class Form1
Dim Point1_X,Point1_Y,Point2_X,Point2_Y,Point3_X,Point3_Y,Point4_X,Point4_Y As Integer
Dim LignesDeDirection As Boolean

Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load

    LignesDeDirection = False

    Point1_X = 100
    Point1_Y = 100
    Point2_X = 200
    Point2_Y = 200
    Point3_X = 50
    Point3_Y = 250
    Point4_X = 400
    Point4_Y = 400

    tbPoint1_X.Text = Point1_X
    tbPoint1_Y.Text = Point1_Y
    tbPoint2_X.Text = Point2_X
    tbPoint2_Y.Text = Point2_Y
    tbPoint3_X.Text = Point3_X
    tbPoint3_Y.Text = Point3_Y
    tbPoint4_X.Text = Point4_X
    tbPoint4_Y.Text = Point4_Y

End Sub

Private Sub PictureBox1_Paint(sender As Object,e As PaintEventArgs) Handles PictureBox1.Paint

    e.Graphics.Clear(Color.LightGray)
    Dim FondBlanc As New SolidBrush(Color.White)
    e.Graphics.FillRectangle(FondBlanc,PictureBox1.Width,PictureBox1.Height)

    Dim blackPen = New Pen(Color.FromArgb(128,128,128),1)
    Dim blackPen2pix = New Pen(Color.FromArgb(64,64,64),2)
    Dim EllipsePen = New Pen(Color.FromArgb(0,255),3)

    Dim blackPen3 = New Pen(Color.Black,5.0F)
    Dim blackPen2 = New Pen(Color.FromArgb(164,164,164),1)

    Dim CouleurPoint As New SolidBrush(Color.magenta)
    Dim CouleurControl As New SolidBrush(Color.Blue)
    Dim Color2 = New Pen(Color.FromArgb(128,1)

    Dim Penbleu As New Pen(Color.Black,2.0F)
    Penbleu.EndCap = System.Drawing.drawing2d.LineCap.Flat  'Penbleu.StartCap = System.Drawing.drawing2d.LineCap.ArrowAnchor
    Penbleu.CustomEndCap = New System.Drawing.drawing2d.adjustableArrowCap(8,8)

    Dim point1 As New Point(Point1_X,Point1_Y)
    Dim point2 As New Point(Point2_X,Point2_Y)
    Dim point3 As New Point(Point3_X,Point3_Y)
    Dim point4 As New Point(Point4_X,Point4_Y)

    e.Graphics.FillEllipse(CouleurPoint,Point1_X - 5,Point1_Y - 5,10,10)
    e.Graphics.FillEllipse(CouleurControl,Point2_X - 5,Point2_Y - 5,Point3_X - 5,Point3_Y - 5,10)
    e.Graphics.FillEllipse(CouleurPoint,Point4_X - 5,Point4_Y - 5,10)

    Dim PenDashmagenta As New Pen(Color.magenta,1.5F)
    PenDashmagenta.DashStyle = drawing2d.DashStyle.Dash

    Dim PenRéférence As New Pen(Color.ForestGreen,1.0F)
    If cbDirectionLines.Checked = True Then

        LignesDeDirection = True

        e.Graphics.DrawLine(PenRéférence,Point1_X,Point2_Y)
        e.Graphics.DrawLine(PenRéférence,Point4_Y)
    Else
        LignesDeDirection = False
    End If

    e.Graphics.DrawEllipse(PenDashmagenta,Point1_X - 40,Point1_Y - 40,80,80)
    e.Graphics.DrawEllipse(PenDashmagenta,Point4_X - 40,Point4_Y - 40,80)

    e.Graphics.DrawBezier(Penbleu,point1,point2,point3,point4)

End Sub

Private Sub btndisplay_Click(sender As Object,e As EventArgs) Handles btndisplay.Click

    Point1_X = tbPoint1_X.Text
    Point1_Y = tbPoint1_Y.Text
    Point2_X = tbPoint2_X.Text
    Point2_Y = tbPoint2_Y.Text
    Point3_X = tbPoint3_X.Text
    Point3_Y = tbPoint3_Y.Text
    Point4_X = tbPoint4_X.Text
    Point4_Y = tbPoint4_Y.Text

    PictureBox1.Invalidate()


End Sub

结束类

Screen Capture

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)