Форум пользователей Visio http://visio.getbb.ru/ |
|
Наложение фигур http://visio.getbb.ru/viewtopic.php?f=6&t=1319 |
Страница 1 из 1 |
Автор: | is308 [ 04 апр 2018, 14:23 ] |
Заголовок сообщения: | Наложение фигур |
Уважаемые форумчане. Подскажите, пожалуйста, каким образом можно реализовать отбор среди всех фигур листа по следующему условию: отбираемая фигура должна находиться в пределах площади искомой фигуры? Пример. Отбираются круги (красные), находящиеся в пределах квадрата. Вариант с группировкой и контейнером не подходят. Спасибо |
Автор: | Shishok [ 04 апр 2018, 14:27 ] |
Заголовок сообщения: | Re: Наложение фигур |
На основе вот этого: http://visio.getbb.ru/viewtopic.php?f=15&t=671 |
Автор: | nbelyh [ 04 апр 2018, 15:17 ] |
Заголовок сообщения: | Re: Наложение фигур |
shape.SpatialSearch / shape.SpatiaRelation / shape.SpatialNeighbors ? Если надо быстро и фигуры прямоугольные, то лучше руками по координатам (как подсказал Shishok) |
Автор: | 9rey [ 04 апр 2018, 15:29 ] |
Заголовок сообщения: | Re: Наложение фигур |
Скорее всего SpatialNeighbors применительно к прямоугольнику, в котором идет поиск. Будет сформирован список шейпов, попавших в его границы. Пройти по ним в цикле и найти красные. |
Автор: | nbelyh [ 04 апр 2018, 15:32 ] |
Заголовок сообщения: | Re: Наложение фигур |
9rey писал(а): Скорее всего SpatialNeighbors применительно к прямоугольнику, в котором идет поиск. Будет сформирован список шейпов, попавших в его границы. Пройти по ним в цикле и найти красные. SpatialXXX - меееедленные. Если фигур много (сотни), и их можно считать прямоугольниками, то просто по координатам (PinX/Width/PinY/Height) сильно быстрее |
Автор: | Shishok [ 04 апр 2018, 15:53 ] |
Заголовок сообщения: | Re: Наложение фигур |
Код: 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 |
Автор: | Shishok [ 05 апр 2018, 10:04 ] |
Заголовок сообщения: | Re: Наложение фигур |
Если нужно все шейпы выделить, то можно цикл заменить на: Код: ActiveWindow.Selection = sel
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |