Соединители фигур в Visio

Я пишу надстройку для Visio 2010 в Studio 2010 на С#. Мне нужно прочитать схему, открытую в Visio. Я умею читать формы диаграммы.

Вопрос в том

  1. если у меня есть объект фигуры, свойства которого могут дать мне координаты фигуры на странице и других фигур (если есть), с которой связана текущая,
  2. если у меня есть соединительный объект, какие свойства могут дать мне формы, которые он соединяет, и направление соединения.

person Daniil Belonin    schedule 23.06.2011    source источник


Ответы (2)


Подключения в Visio обрабатываются через объекты Connect. Каждая фигура имеет коллекцию входящих и исходящих объектов соединения. Их имена — FromConnects и Connects соответственно.

Каждый объект соединения имеет свойства FromSheet и ToSheet, которые являются просто указателями на объекты Shape, причем фигура FromSheet — это фигура, которая соединяется с фигурой ToSheet.

Итак, если у вас есть квадратная фигура (фигура1), соединенная с другой квадратной фигурой (форма2) соединительной линией (коннектором), на самом деле вы имеете следующее: соединитель соединен с фигурой1 соединитель соединен с фигурой2

Итак, в shape1 вы посмотрите на FromConnects и увидите один элемент Connects, где FromSheet ссылается на коннектор, а ToSheet ссылается на shape1. Форма 2 будет такой же. Если вы посмотрите на Connects на фигуре соединителя, вы увидите тот же элемент Connects с теми же ссылками на объекты.

Таким образом, выяснение того, соединяется ли shape1 с shape2 или наоборот, зависит от порядка на соединителе... Объект Connects 1 будет фигурой «From», а объект Connects 2 будет фигурой «To».

Вот две подпрограммы VBA, которые получают входящие и исходящие клеи для формы, которую вы передаете, и возвращают объект коллекции. Я знаю, вы сказали, что используете C#, но я использую VBA для Visio. Код просто иллюстрирует необработанную информацию о соединении. Я бы посоветовал вам попробовать разобраться в VBA и посмотреть, как все это работает, потому что это все еще меня смущает.

Public Function GetShapesThatConnectTo(TheShp As Visio.Shape) As Collection
    Dim Result As Collection
    Set Result = New Collection
    For i = 1 To TheShp.FromConnects.Count
        Result.Add TheShp.FromConnects.Item(i).FromSheet
    Next i
    Set GetShapesThatConnectTo = Result
End Function

Public Function GetWhatShapeConnectsTo(TheShp As Visio.Shape) As Collection
    Dim Result As Collection
    Set Result = New Collection
    For i = 1 To TheShp.Connects.Count
        Result.Add TheShp.Connects.Item(i).ToSheet
    Next i
    Set GetWhatShapeConnectsTo = Result
End Function
person Jon Fournier    schedule 23.06.2011
comment
Хорошо. Мы получили связи. Как насчет координат самой формы. Как я могу получить разумные значения фигур X и Y на странице? Что касается соединителей, я также использую метод ConnectedShapes() Shape, который имеет два параметра: первый позволяет найти исходящие соединения, а второй позволяет найти входящие соединения. - person Daniil Belonin; 23.06.2011
comment
эй, попробовал ваш код, но я не нашел с его помощью какой-либо объединенной формы. Вместо этого мой соединитель (имя формы - динамический соединитель) показывает обе формы как элементы листа при повторении с использованием Result.Add TheShp.Connects.Item(i).ToSheet - person 0cool; 16.11.2011

Для координат:

foreach (Visio.Page Page in Pages)
{
   Visio.Shapes Shapes = Page.Shapes;
   foreach (Visio.Shape Shape in Shapes)
   {
      double x = Shape.Cells["PinX"].ResultIU;
      double y = Shape.Cells["PinY"].ResultIU;
person Daniil Belonin    schedule 24.06.2011