Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д.

Координаты

Перечень литературы

13.10.2022  Метод XYToPage   Kuzin Alexander    

22.07.2019  Excel+Visio+VBA Работаем в Excel - рисуем в Visio   Vigil   Видео 

31.03.2019  Как изменить координаты фигуры программно   Kuzin Alexander    

26.03.2019  Особенности метода Drop Shape   Геннадий Туманов    

Ответы на вопросы

Подскажите, как в 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")