【问题标题】:Linewidth increases when zooming in on vector drawing .NET放大矢量图.NET时线宽增加
【发布时间】:2017-11-09 03:54:51
【问题描述】:

在 Visual Basic .NET 中放大矢量图时,在某个点之后,每次缩放操作都会使线条变粗。

App功能基本上是画了一些线:

  • 使用转换和缩放设置图形矩阵以使整个绘图填充画布(使用 g.Transform = myMatrix)
  • 画线(使用“g.DrawLine(...)”)

...放大时:

  • 调整变换矩阵以放大鼠标指针位置
  • 矩阵的比例因子增加了 1.1 倍

在 PrepareDrawing 方法中设置矩阵:

Private Function PrepareDrawing(ByRef g As Graphics) As Matrix
    'Create transformation matrix
    Dim myMatrix = New Matrix

    'Determine the zoom factor
    If zoomfactor > 10000 Then zoomfactor = 10000
    If zoomfactor < 0.001 Then zoomfactor = 0.001

    scaleFactor = zoomfactor * BORDERFACTOR * Math.Min(pb.Width / viewportModel.Width, pb.Height / viewportModel.Height)

    'Determine the offset to keep everything centered
    If panningOffset.IsEmpty Then
        ZoomToNetwork()
    End If

    myMatrix.Translate(panningOffset.X, panningOffset.Y)
    myMatrix.Scale(scaleFactor, -scaleFactor, MatrixOrder.Append)

    'transform current graphics
    g.Transform = myMatrix

    Return myMatrix
End Function

并且缩放功能是在 ZoomInWithMouseWheel 方法中设置的:

 Public Sub ZoomInWithMouseWheel(ByVal e As Point, ByVal delta As Single)
    Dim orgZoomfactor = zoomfactor
    Dim screenX As Double = e.X 
    Dim screenY As Double = e.Y 

    If delta > 0 Then
        zoomfactor = zoomfactor * 1.1 
    Else
        zoomfactor = zoomfactor / 1.1 
    End If

    scaleFactor = zoomfactor * BORDERFACTOR * Math.Min(pb.Width / viewportModel.Width, pb.Height / viewportModel.Height)

    Dim perc = zoomfactor / orgZoomfactor
    panningOffset.Offset(-(perc * screenX - screenX) / scaleFactor, (perc * screenY - screenY) / scaleFactor)

End Sub

事实证明,当矩阵的第一个元素变得大于1时,线宽随着这个数的增加而增加。

对正在发生的事情以及如何防止线宽增加有任何想法吗?

【问题讨论】:

    标签: .net zooming basic drawing2d


    【解决方案1】:

    好的,找到答案了。线宽应补偿矩阵元素(0),例如:

    g.DrawLines(New Pen(Color.Blue, lineWidth / g.Transform.Elements(0)), pnts)
    

    其中 lineWidth 为 1 为例

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 2011-02-19
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多