Разъемы формы в Visio - PullRequest
1 голос
/ 23 июня 2011

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

Вопрос

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

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

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

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

Итак, если у вас есть квадратная форма (shape1), соединенная с другой квадратной формой (shape2) с линией соединителя (соединитель), то, что вы на самом деле имеете, это: разъем подключен к shape1 разъем подключен к shape2

Итак, на 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
0 голосов
/ 24 июня 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;
...