![]() |
Форум visio.getbb.ru |
О форумах
Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
13.10.2022
22.07.2019
31.03.2019
26.03.2019
Подскажите, как в VBA получить координаты шейпа
Подскажите, как в VBA получить координаты шейпа относительно страницы, на которой он находится?
Координаты шейпа относительно листа рисунка хранятся в шейп-листе данного шейпа в секции ShapeTransform в ячейках PinX и PinY. При этом под координатами шейпа понимаются координаты центра описанного прямоугольника. Доступ из VBA производится по имени ячейки .Cells("PinX") и .Cells("PinY"). Например, выражение ActivePage.Shapes(1).Cells("PinX") даст X координату первого шейпа на активной странице. Координаты считаются от левого нижнего угла страницы в дюймах.
Где взять инфу про Pinx и Piny?
Где взять инфу про Pinx и Piny?
Немножко есть прямо в Help'е, только не в основном, а в том, который открывается из окна Visual Basic. Побольше - в DVS - (Developing Visio Solutions), который чаще всего входит в комплект поставки Visio. Правда, и то и другое на английском. Да и что о них говорить-то особо. Просто координаты центра вращения шейпа, которые сидят в секции Shape Transform.
Как обратиться к шейпу по координатам?
Подскажите, можно ли узнать принадлежит ли точка с координатами X,Y какому-нибудь шейпу (и соответственно его имя), и принадлежит ли эта точка какой то линии в этом шейпе (если он составной из нескольких фигур (линий))?
Например, перебираем всю коллекцию шейпов, вычисляя для них
intRet = object.HitTest(x, y, tolerance)
где object - очередной шейп. Как только натыкаемся на шейп, выдающий visHitOnBoundary или visHitInside, выбираем имя данного шейпа.
Как определить путь?
Я хочу взять элемент из трафарета. У меня на компьютере он лежит C:\Program Files\Visio\Solutions\папкастрафаретами , а у соседа чего-то там Visio10/1033/ и вообще какой-то другой путь. Если я напишу Set stnObj = appVisio.Documents.Open(appVisio.Path & "\Solutions\centel\adress_узел.vss"), то соседний компьютер все равно не поймет, у него же между программной директорией и папкой Solutions лежит еще папка 1033. Нельзя ли как-то указать на папку Solutions вне зависимости от версии Visio?
У объекта Application существуют свойства: AddonPaths, StartupPaths, DrawingPaths, StencilPaths, FilterPaths, TemplatePaths, and HelpPaths. В данном случае следует использовать Set stnObj = appVisio.Documents.Open(appVisio.StencilPaths & "\centel\adress_узел.vss")