Author |
Topic |
|
krys
55 Posts |
Posted - 09/27/2006 : 13:44:49
|
Привет. Я работаю с Visual Studio C++ 6 и Visio2003. Я столкнулся с ситуацией, в которой на чертеже размещенны елементы(шейпы) обьедененные в группу. Если я перемещаю группу , то в область группы попадают другие шейпы. которые мне надо программно найти. Для етого я поочередно опрашивал шейпы группы и использовал свойство SpatialNeighbors- безрезультатно. Может ли кто-то предложить другое решение? Зарание спасибо
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/27/2006 : 18:26:09
|
В чем выражается безрезультатнсть? Не пробовали менять .IterationMode объекта Selection? |
|
|
krys
55 Posts |
Posted - 09/27/2006 : 19:50:12
|
_ У меня есть шейп в Форме квадрата |_|, который был созданы путем группирования линий. Таким образом если как бы внутри этого шейпа позже будет размещен другой шейп, то я использую свойство Shape.SpatialNeighbors с Флагом visSpatialContain что бы найти этот другой шейп программно. При этом он не селектирован и не является частью группы. Теперь я имею группу из квадратов. Я перемещаю группу по документу, так что она может наложится на другие шейпы Когда я обрабатываю событие QueryCancelUngroup. Я использую выше описанный Принцип : заполучив обьект описывающий Квадрат, я проверяю не находится ли внутри квадрата других элементов. В этом случае такие элементы не будут найдены. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2006 : 00:11:54
|
Пока не понятно, придется объяснять дальше :( Почему "такие элементы не будут найдены"? Они теоретически не должны быть найдены или просто не получается, не удается найти? Из-за того, что между компонентами группы дырки имеются что ли? |
|
|
elena
41 Posts |
Posted - 09/28/2006 : 12:37:45
|
Участвуют ли в "определении соседа" локальные координаты фигур? Ведь если группа вошла в соотав другой группы, то ее локальные координаты изменились... Если дело не в этом, то sorry |
|
|
krys
55 Posts |
Posted - 09/28/2006 : 16:31:33
|
...просто не получается:(
Я попытаюсь обьяснить ситуацию на примере:
На чертеже размещен 1 Шейп "Квадрат"(удaчнее будет имя "Рамка" :[ ]. При помощи мыши я перетаскиваю внутрь "Рамки" другой елемент е1. [ e1 ]:
функция "Рамка".SpatialNeighbors(visSpatialContain,...) возращает обьект Типа Selection. Selection->GetCount()=1: внутри "Рамки" находится 1 елемент
Теперь я группирую ети елементы с ,к примеру, другой рамкой:
[ e1 ] [ ]
После этого я мышкой перетаскиваю ещё один шейп, так что он визуально оказывается внутри "Рамки". [e1 e2] [ ]
Selection="Ramka".SpatialNeighbors(visSpatialContain,...) Selection->GetCount()=1.
Шейп е2 не найден. Примечание: в данном случае "Рамка" является поделементом Группы
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2006 : 20:55:31
|
SpatialNeighbors ищет шейпы только внутри одного пространства. В данном случае таким пространством может быть либо страница, либо группа. Манипулируйте четвертым параметром метода SpatialNeighbors. Если написать Set Se = Sh.SpatialNeighbors(visSpatialContain, 0.02, 0, ActivePage.PageSheet) то Вы найдете шейп е2 Если написать, например, Set Se = Sh.SpatialNeighbors(visSpatialContain, 0.02, 0, ActivePage.Shapes("Sheet.3")) где Sheet.3 - это группа, то найдете е1. |
|
|
krys
55 Posts |
Posted - 09/28/2006 : 21:23:51
|
проблемa решена.
|
|
|
krys
55 Posts |
Posted - 09/28/2006 : 22:26:16
|
предыдущее сообщение я написал, не читав вашего поста (я просто обошел проблему )
Сейчас последовал вашему совету - вроде как работает :).
Большое спасибо за помощь :) |
|
|
|
Topic |
|