Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 21 сен 2018, 06:08

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 14:23 
Не в сети
Новичок

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 30
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Уважаемые форумчане.
Подскажите, пожалуйста, каким образом можно реализовать отбор среди всех фигур листа по следующему условию:
отбираемая фигура должна находиться в пределах площади искомой фигуры?
Пример. Отбираются круги (красные), находящиеся в пределах квадрата.
Изображение

Вариант с группировкой и контейнером не подходят.

Спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 14:27 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 100

Добавить очки репутацииУменьшить очки репутации
На основе вот этого:
http://visio.getbb.ru/viewtopic.php?f=15&t=671


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 15:17 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 590
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100603

Добавить очки репутацииУменьшить очки репутации
shape.SpatialSearch / shape.SpatiaRelation / shape.SpatialNeighbors ?

Если надо быстро и фигуры прямоугольные, то лучше руками по координатам (как подсказал Shishok)

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Последний раз редактировалось nbelyh 04 апр 2018, 15:30, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 15:29 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
Скорее всего SpatialNeighbors применительно к прямоугольнику, в котором идет поиск. Будет сформирован список шейпов, попавших в его границы. Пройти по ним в цикле и найти красные.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 15:32 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 590
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100603

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
Скорее всего SpatialNeighbors применительно к прямоугольнику, в котором идет поиск. Будет сформирован список шейпов, попавших в его границы. Пройти по ним в цикле и найти красные.


SpatialXXX - меееедленные.
Если фигур много (сотни), и их можно считать прямоугольниками, то просто по координатам (PinX/Width/PinY/Height) сильно быстрее

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 04 апр 2018, 15:53 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 100

Добавить очки репутацииУменьшить очки репутации
Код:
Option Explicit

Sub StartSelect() 'старт
If Not (ActiveWindow.Type = visDrawing And ActiveWindow.SubType = visPageWin And ActiveWindow.Selection.Count <> 1) Then Call SelectShapes(ActiveWindow.Selection.PrimaryItem)
End Sub

Private Sub SelectShapes(sh As Visio.Shape)
Dim sel As Visio.Selection, sht As Visio.Shape

Set sel = sh.SpatialNeighbors(visSpatialContain, 0, 0)  'определение соседей целевого шейпа

ActiveWindow.DeselectAll

For Each sht In sel 'выделение на экране всех найденных шейпов попадающих под целевой прямоугольник
    ActiveWindow.Select sht, visSelect
Next sht

End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Наложение фигур
СообщениеДобавлено: 05 апр 2018, 10:04 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 100

Добавить очки репутацииУменьшить очки репутации
Если нужно все шейпы выделить, то можно цикл заменить на:
Код:
ActiveWindow.Selection = sel


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB