vb.如何在不包含贝塞尔句柄位置的情况下获取GraphicsPath的边界 &



我正试图在GraphicsPath周围做一个边界,以方便分组大小。这工作得很好,但当我将其中一个点转换为贝塞尔时,它包括贝塞尔手柄在边界内的位置,使选择矩形比预期的要大得多。

这是路径第一次创建时的样子,默认情况下,点是没有bezier的线。选择矩形按预期工作

非bezier行为右

当我双击一个点时,它会自动将这些点转换为贝塞尔曲线(如果是贝塞尔曲线,则切换回直线),然后选择矩形也会在路径中反映手柄点。

当使用bezier路径时

正如你所看到的,它应该在贝塞尔曲线下方停止矩形,但它似乎也扩展到手柄。

下面是计算矩形周长的代码。


Public Overrides subdrawselectionrectangle (ByVal g As Graphics)SelectionRectangle = New RectangleF(0,0,0,0)

Dim GP As GraphicsPath = _lastGp 'DAVE

如果GP不是Nothing则如果_lastGp。PointCount祝辞1然后试一试Dim BH作为新单曲;Dim TH作为新单曲;Dim LW作为新单曲;Dim RW作为新单曲

TH = GP.PathPoints(0).Y
LW = GP.PathPoints(0).X
For i = 0 To GP.PathPoints.Length - 1
With GP.PathPoints(i)
If .Y < TH Then TH = .Y
If .X < LW Then LW = .X
If .Y > BH Then BH = .Y
If .X > RW Then RW = .X
End With
Next i
'DAVE - This code won't work as it doesn't factor in for space made by the actual bezier curves, GP path must be followed. BUT! this is a tidier solution.
'SelectionRectangle = New RectangleF(0, 0, 0, 0)
'If _pointArray IsNot Nothing Then
' If _pointArray.Count > 1 Then
'  Try
'   Dim BH As New Single : Dim TH As New Single : Dim LW As New Single : Dim RW As New Single
'   LW = _pointArray(0).P.X
'   TH = _pointArray(0).P.Y
'   For i = 0 To _pointArray.Count - 1
'    With _pointArray(i).P
'     If .Y < TH Then TH = .Y
'     If .X < LW Then LW = .X
'     If .Y > BH Then BH = .Y
'     If .X > RW Then RW = .X
'    End With
'   Next i
'=================================
SelectionRectangle = New RectangleF(New PointF(LW, TH), New SizeF(RW - LW, BH - TH))
Dim r As RectangleF = DrawRectangle.GetNormalizedRectangle(SelectionRectangle)
Dim gpen As Pen = New Pen(Color.Gray, MyBase.StrokeWidth)
gpen.DashStyle = DashStyle.Dash
g.DrawRectangle(gpen, r.X, r.Y, r.Width, r.Height)
gpen.Dispose()
Catch ex As Exception
ErrH.Log("DrawSelectionRectangle", "Draw", ex.ToString(), ErrH._LogPriority.Info)
End Try
End If

如果结束

结束子


对一个简单的解决方案的任何帮助将不胜感激。:)

我已经尝试使用实际的点数组作为参考,但这并没有考虑到贝塞尔抛出的曲线。如果运行上面注释的代码,请参见示例。

尝试遵循路径数组而不是图形路径

WOW…

花了一段时间,但我找到了答案!

字面意思是1行!

GP。平

固定线路

相关内容

最新更新