All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как найти шейп внутри другого шейпа?
Author Previous Topic Topic Next Topic  

krys

55 Posts

Posted - 05/09/2007 :  13:52:19
Здраствуйте.
Имеется следующая ситуация:
Шейп находится внутри другого шейпа. В свою очередь он содержит ещё один шейп. (Эдакая 2-х мерная матрешка).


Если я использую свойство SpatialRelation с флагами visSpatialContained или visSpatialContainedIn,
то получаю все Шейпы которые включают данный Шейп или которые содержатся в этом шейпе.

Мне же надо найти непосредственного "родителя" и непосредственного "ребенка" для каждого шейпа.

Как это можно сделать?

Edited by - krys on 05/09/2007 13:53:17

Tumanov

Russia
1198 Posts

Posted - 05/09/2007 :  15:34:13
Если на листе только чистая матрешка и ничего лишнего, то вот таким образом можно пересортировать все шейпы.
В массиве sort первым будет идти индекс самого большого шейпа, потом поменьше и т.д. Соответственно, если мы захотим определить родителя и ребенка шейпа ActivePage.Shapes(sort(i)), то родителем будет ActivePage.Shapes(sort(i-1)), а ребенком ActivePage.Shapes(sort(i+1))
Sub ttt()
Dim sort()
Count = ActivePage.Shapes.Count
ReDim sort(Count)
For i = 1 To Count
sort(i) = i
Next
f = 1
While f <> 0
f = 0
For i = 1 To Count - 1
If (ActivePage.Shapes(sort(i)).SpatialRelation(ActivePage.Shapes(sort(i + 1)), 0.1, 0) And visSpatialContain) = 0 Then
a = sort(i)
sort(i) = sort(i + 1)
sort(i + 1) = a
f = 1
End If
Next
Wend
For i = 1 To Count
Debug.Print ActivePage.Shapes(sort(i)).NameID
Next
End Sub
Go to Top of Page

krys

55 Posts

Posted - 05/09/2007 :  16:40:45
K сожалению не все так просто.
На чертеже может быть множество "матрешкоподобных" формаций. И кроме того один шейп может содержать несколько шейпов, которые в свою очередь могут содержать шейпы и т.д.
Однако самый большой Шеип в такой формации имеет ячейку user.Class ='FRAME', что наверное может позволить сортировку отталкиваясь от этого шейпа.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)