Как перенаправить соединитель в Visio программно? - PullRequest
1 голос
/ 25 марта 2019

Я разрабатываю надстройку VSTO для Visio 2013. Мне нужно перенаправить коннектор, поскольку схема сложна и состоит из множества шагов. У автоматически маршрутизируемого соединителя нет четкого пути. Есть ли способ перенаправить соединитель программно? Так же, как перетаскивание точек подключения в приложении Visio вручную.

Я прочитал некоторые документы VBA https://docs.microsoft.com/en-us/office/vba/api/visio.connect но никто не дает мне понимание.

1 Ответ

0 голосов
/ 10 апреля 2019

Вы вдохновили меня на это, так как мне нужно сделать нечто подобное. Вот способ, который я нашел, чтобы заставить его работать. Эта подпрограмма берет ссылку на форму соединителя, скрывает автоматически проложенную линию, добавляет новый геометрический участок и вручную корректирует несколько точек в этом разделе (на основе процентной высоты / ширины первоначально видимой линии). Очевидно, что вы можете корректировать количество / местоположение программно.

Sub CustomRoutedConnector(shpConnectorShape As Shape)

    With shpConnectorShape
        'Hide the automatically routed connector line (still there, just hidden)
        .CellsSRC(visSectionFirstComponent, 0, 2).FormulaU = "TRUE"

        'Make a custom geometry section
        .AddSection visSectionFirstComponent + 1
        .AddRow visSectionFirstComponent + 1, visRowComponent, visTagComponent
        .AddRow visSectionFirstComponent + 1, visRowVertex, visTagLineTo
        .AddRow visSectionFirstComponent + 1, visRowVertex, visTagMoveTo

        'Set up the new geometry section rows (11,1 and 11,2 are the start and end rows)
        .CellsSRC(11, 0, 0).FormulaForceU = "TRUE"
        .CellsSRC(11, 0, 1).FormulaForceU = "FALSE"
        .CellsSRC(11, 0, 2).FormulaForceU = "FALSE"
        .CellsSRC(11, 0, 3).FormulaForceU = "FALSE"
        .CellsSRC(11, 0, 5).FormulaForceU = "FALSE"
        .CellsSRC(11, 1, 0).FormulaU = "0"
        .CellsSRC(11, 1, 1).FormulaU = "0"
        .CellsSRC(11, 2, 0).FormulaU = "0"
        .CellsSRC(11, 2, 1).FormulaU = "0"

        'Add two additional rows for demonstration (could be programatically 
        'adjusted to however many points you need)

        .AddRow visSectionFirstComponent + 1, 2, visTagLineTo
        .CellsSRC(11, 2, 0).FormulaU = "0"
        .CellsSRC(11, 2, 1).FormulaU = "0"

        .AddRow visSectionFirstComponent + 1, 3, visTagLineTo
        .CellsSRC(11, 3, 0).FormulaU = "0"
        .CellsSRC(11, 3, 1).FormulaU = "0"

        'Adjust the geometry of the rows (the doubles given are percentages of the height/width of the original connector)
        'I recommend stepping through this to see how it moves the points:
        .CellsSRC(visSectionFirstComponent + 1, 2, 0).FormulaU = ".5"
        .CellsSRC(visSectionFirstComponent + 1, 3, 0).FormulaU = ".5"
        .CellsSRC(visSectionFirstComponent + 1, 3, 1).FormulaU = ".5"
        .CellsSRC(visSectionFirstComponent + 1, 4, 0).FormulaU = "1"
        .CellsSRC(visSectionFirstComponent + 1, 4, 1).FormulaU = "1"

    End With

End Sub

Конечные точки этого пользовательского маршрута все еще привязаны к начальной и конечной фигурам. Чтобы полностью уничтожить все автоматические маршруты, используйте свойство .LayoutRoutePassive на странице . (Это может дать вам то, что вы ищете, но это займет некоторое время).

...