我的第一篇文章是VB.NET的新手,所以我知道我可能会违反某些协议。所以请耐心等待。
关于我要做什么的背景知识。我创建了一个带有图片框的Windows窗体,用户可以在该窗体上绘制对象(代表墙壁,门等)。对象的坐标保存在SQL后端中(可以将其视为在Paint like界面中的矢量绘图)。下一步是移动穿过对象的光源(像人一样)。我已经在SQL中创建了一个表示多边形2D光线跟踪的轻型多边形,并与垫子的多边形创建了一个区别。本质上,这种差异代表可以看到物体的光路。
最后一步,也是我坚持的一步,是如何在图片框上显示我创建的最终几何图形(复杂的CurvePolygon),该图形实际上将掩盖尚未被光源照明的对象。最基本的方法是如何从SQL导入几何,然后将其显示在Windows窗体/图片框的图片框中。
感谢并感谢您的帮助。请记住,我是.NET的新手,并且正在使用此项目作为自学VB.NET和SQL的方法。
答案 0 :(得分:0)
有点失望的是,没有人可以回答这个问题,但是它确实发生了。因此,我想出了一种解决方法,尽管这种方法并不理想,但希望能够帮助陷入困境的其他人。也许有人会看到这一点,并提出一个更优雅的解决方案。
因此,一旦有了最终的“阴影”多边形,就找不到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的业余爱好者,哎呀,我什至无法在这里看到代码示例,即使当前代码也不是最优的,但它可以完成工作。希望有人觉得这有帮助。