VBA - установка размера графического блока в соответствии с нарисованными элементами - PullRequest
0 голосов
/ 16 июня 2019

Я рисую элементы на растровом изображении и хочу установить для поля изображения PB_Visualizer размер, необходимый для размещения всех нарисованных элементов.Сначала я устанавливаю для растрового изображения и PB_Visualizer известный размер, а для сброшенных смещенных значений NEG и POS смещения устанавливается значение 0. PB_Visualizer и BB_VIS сверху и слева - это одно и то же местоположение.

    PB_Visualizer.Width = 5
    PB_Visualizer.Height = 5


    BB_Vis = New Bitmap(PB_Visualizer.Width, PB_Visualizer.Height)

    Offset_POS_Last = New Point(0, 0)       '// Reset
    Offset_NEG_Last = New Point(0, 0)

Затем я проверяю все точки PixleVisualizerPoint.и если они превышают ширину и высоту, тогда добавьте сумму, которую они превысили к смещению.Я делаю это как для X, так и для Y и проверяю отрицательно.

If PixleVisualizerPoint(ArrString_Nodes_Array(StringNumbertouse)(Row)).X + int_VisGridSpace > PB_Visualizer.Width Then
                        bln_Colision = True
                        Offset_Temp.X = PB_Visualizer.Width - PixleVisualizerPoint(ArrString_Nodes_Array(StringNumbertouse)(Row)).X + int_VisGridSpace
                        Offset_POS.X = PB_Visualizer.Width - PixleVisualizerPoint(ArrString_Nodes_Array(StringNumbertouse)(Row)).X + int_VisGridSpace

If Offset_POS.X < 0 Then
Offset_POS.X = (Offset_POS.X * -1)
End If
If Offset_POS_Last.X < Offset_POS.X Then
Offset_POS_Last.X = Offset_POS.X
Console.WriteLine("POS X   " & Offset_POS_Last.X)
End If

Затем я беру значения POS и NEG с превышением смещения, добавляю их к известным начальным значениям и устанавливаю PB_Visualizer.Размер составляет половину необходимой ширины и необходимой высоты.Offset_POS - это всегда отрицательные числа, где я предполагаю, что все они будут положительными, поскольку они всегда превышают точки за пределами ширины и высоты.Я что-то упустил?

PB_Visualizer.Height = PB_Visualizer.Height+ (Offset_NEG_Last.Y + Offset_POS_Last.Y)
PB_Visualizer.Width =  PB_Visualizer.Width+(Offset_NEG_Last.X + Offset_POS_Last.X)

1 Ответ

0 голосов
/ 17 июня 2019

Это новый код, который я использую.Просто проверяя все точки и получая самый правильный и самый нижний, чтобы установить размер окна.Работает нормально.

Private Sub SetLayoutSize()

    Dim Offset_POS_Last As Point
    Offset_POS_Last = New Point(0, 0)       '// REset

    For i = 0 To intSoftware_Total_Pixels
        If PixleVisualizerPoint(i).X > Offset_POS_Last.X Then
            Offset_POS_Last.X = PixleVisualizerPoint(i).X
        End If

        If PixleVisualizerPoint(i).Y > Offset_POS_Last.Y Then
            Offset_POS_Last.Y = PixleVisualizerPoint(i).Y
        End If
    Next
    '// Check size if less then increase
    If PB_Visualizer.Height < Offset_POS_Last.Y + int_VisGridSpace Then
        PB_Visualizer.Height = Offset_POS_Last.Y + int_VisGridSpace
        bln_Resize = True

    End If

    If PB_Visualizer.Width < Offset_POS_Last.X + int_VisGridSpace Then
        PB_Visualizer.Width = Offset_POS_Last.X + int_VisGridSpace
        bln_Resize = True
    End If

    Center_of_Drawing.X = PB_Visualizer.Width / 2
    Center_of_Drawing.Y = PB_Visualizer.Height / 2

End Sub
...