Author |
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 |
|
|
krys
55 Posts |
Posted - 05/09/2007 : 16:40:45
|
K сожалению не все так просто. На чертеже может быть множество "матрешкоподобных" формаций. И кроме того один шейп может содержать несколько шейпов, которые в свою очередь могут содержать шейпы и т.д. Однако самый большой Шеип в такой формации имеет ячейку user.Class ='FRAME', что наверное может позволить сортировку отталкиваясь от этого шейпа. |
|
|
|
Topic |
|
|
|