Функция Visio VBA, чтобы увидеть, есть ли фигура перед / позади фигуры - PullRequest
5 голосов
/ 30 сентября 2008

Есть ли способ в Visio VBA проверить, есть ли фигура перед или позади фигуры в Visio?

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

1 Ответ

4 голосов
/ 01 октября 2008

Свойство Shape.SpatialRelation сообщит вам о касании двух фигур. Свойство Shape.Index сообщит вам, что находится впереди или сзади в z-порядке.

Вот простой пример:

Public Sub DoShapesIntersect(ByRef shape1 As Visio.Shape, ByRef shape2 As Visio.Shape)

    '// do they touch?
    If (shape1.SpatialRelation(shape2, 0, 0) <> 0) Then

        '// they touch, which one is in front?
        If (shape1.Index > shape2.Index) Then
            Debug.Print shape1.Name + " is in front of " + shape2.Name
        Else
            Debug.Print shape1.Name + " is behind " + shape2.Name
        End If
    Else
        Debug.Print "shape1 and shape2 do not touch"
    End If

End Sub

Подробнее здесь:

Свойство Shape.SpatialRelation для MSDN

...