Отображение геометрии SQL в VB Picturebox - PullRequest
0 голосов
/ 14 декабря 2018

Мой первый пост здесь и несколько новый для VB.NET, поэтому я знаю, что могу нарушить некоторые протоколы.Поэтому, пожалуйста, будьте терпеливы.

Немного предыстории о том, что я пытаюсь сделать.Я создал форму Windows с картинкой, на которой пользователь может рисовать объекты (представляющие стены, двери и т. Д.).Координаты для объектов сохраняются в бэкэнде SQL (воспринимайте его как векторное рисование в интерфейсе, подобном Paint).Следующим шагом является перемещение источника света (например, человека), проходящего через объект.Я создал легкий многоугольник в SQL, представляющий грубую 2D трассировку лучей, и создал это отличие от многоугольника мата.По сути, это различие представляет пути света, где могут быть видны объекты.

Последний шаг, на котором я застрял, заключается в том, как отобразить окончательную геометрию, которую я создаю (сложный изогнутый полигон), в окне рисунка, которыйпо существу покроет объекты, которые еще не освещены источником света.В основном, как вы импортируете геометрию из SQL, а затем отображаете ее в графическом окне в форме / графическом окне Windows.

Спасибо и оцените любую помощь.Имейте в виду, что я несколько новичок в .NET, и я использую этот проект как способ научить себя VB.NET и SQL.

1 Ответ

0 голосов
/ 25 декабря 2018

Немного разочарован тем, что никто не может ответить на этот вопрос, но это происходит.Поэтому я нашел обходной путь, который, хотя и не идеален, но, надеюсь, поможет кому-то, кто застрял в такой же ситуации.Может быть, кто-то увидит это и предложит более элегантное решение.

Так что, когда у меня есть последний «теневой» многоугольник, я не могу найти решение VB.NET, чтобы нарисовать его как есть, но это не так.Я не могу преобразовать его в формат, который можно нарисовать в картинке.Вот код, который я придумал:

    Private Sub createShadows()
    Dim myPen As Pen
    Dim myBrush As Brush
    Dim myPoints As Point()
    Dim listPoints As New List(Of Point)
    Dim x As Double
    Dim y As Double

    ' Convert the complex shape into a polygon shape in SQL and bring all the vertex
    ' points into VB and put into a string variable (curBlack)
    mConn.Open()
    Dim cmd = New SqlCommand("Select CurrentBlack.STCurveToLine().STAsText() From tbl_Map_Master Where MapID = " &
                             cmbDN.SelectedItem(0), mConn)
    Dim curBlack As String = cmd.ExecuteScalar
    mConn.Close()

    ' Now parse the vertex points from SQL format into a set of VB points 
    curBlack = curBlack.Replace("POLYGON ((", "").Replace(")", "") & ",,"
    While curBlack.Length > 1
        x = CInt(Strings.Left(curBlack, InStr(curBlack, " "))) * iZoom + centerX
        curBlack = Strings.Right(curBlack, Len(curBlack) - InStr(curBlack, " "))
        y = CInt(Strings.Left(curBlack, InStr(curBlack, ",") - 1)) * iZoom + centerY
        curBlack = Strings.Right(curBlack, Len(curBlack) - InStr(curBlack, ",") - 1)
        listPoints.Add(New Point(x, y))
    End While
    myPoints = listPoints.ToArray

    ' Now use the points array to draw a filled polygon
    myPen = New Pen(Drawing.Color.White, 0)
    myBrush = New SolidBrush(Color.FromArgb(170, 0, 0, 0))
    Dim myGraphics As Graphics = pbDN.CreateGraphics
    myGraphics.DrawPolygon(myPen, myPoints)
    myGraphics.FillPolygon(myBrush, myPoints)
End Sub

Как я уже сказал, это не идеальное решение, поэтому оно немного замедляет производительность, но работает.Я уверен, что являюсь любителем VB.NET, черт возьми, я даже не могу заставить пример кода выглядеть прямо здесь, даже текущий код не оптимален, но он выполняет свою работу.Надеюсь, кто-то найдет это полезным.

...