Tumanov
Russia
1198 Posts |
Posted - 12/09/2009 : 15:58:33
|
Возможность есть. Один из вариантов - накрыть каждое помещение соответствующим шейпом, а потом отслеживать совмещение такого шейпа "пространство" с шайпами "компьютер". Перекрытие шейпов определяется функцией SpatialNeighbors. Примерно так: 'Set tolerance argument intTolerance = 0.25 'Set Spatial Relation argument intSpatialRelation = visSpatialContainedIn 'Get the set of spatially related shapes 'that meet the criteria set by the arguments. Set vsoReturnedSelection = Shape.SpatialNeighbors _ (intSpatialRelation, intTolerance, 0) Один шейп берется в качестве исходного, а функция возвращает коллекцию шейпов, перекрывающихся с ним. Шейп "помещение" можно поместить на самый задний план и даже сделать невидимым, чтобы он не портил изображение. Собственно перетаскивание можно ловить обработчиком события перемещения шейпов. Перетаскиваемый шейп будет передан к него в качестве параметра. А можно и по нажатию кнопки запустить макрос, который обойдет все "помещения" и соберет для каждого из них шейпы "компьютер". Могут быть и другие варианты. Например, поставить в каждом помещении Connection Point, а на шейпе управляющую точку. Если после перемещения шейпа делать еще одно лишнее движение - перетащить управляющую точку на Connection Point помещения, то потом шейпы, принадлежащие помещению можно собрать, анализируя соединения. |
|
|