2

我在我的 C# 应用程序中使用 Microsoft Visio 作为 COM 对象。我想在 Visio 页面上自动排列形状。我应该为这个任务编写什么代码?形状是数据库实体。

userView.Shapes.SomeMethod();

userView 是 COM 对象的名称,但应该SomeMethod是什么?

4

3 回答 3

3

我知道这是一个“较旧”的问题,但我正在做一些非常相似的事情,并设法使用以下代码“自动布局”流程图:

public enum GraphStyles { TopDown, LeftRight };
public void ArrangeGraph(GraphStyles Style)
{
    if (Style == GraphStyles.TopDown)
    {
        // set 'PlaceStyle'
        var placeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOPlaceStyle).ResultIU = 1;
        // set 'RouteStyle'
        var routeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLORouteStyle).ResultIU = 5;
        // set 'PageShapeSplit'
        var pageShapeSplitCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOSplit).ResultIU = 1;
    }
    else if (Style == GraphStyles.LeftRight)
    {
        // set 'PlaceStyle'
        var placeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOPlaceStyle).ResultIU = 2;
        // set 'RouteStyle'
        var routeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLORouteStyle).ResultIU = 6;
        // set 'PageShapeSplit'
        var pageShapeSplitCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
            (short)VisSectionIndices.visSectionObject,
            (short)VisRowIndices.visRowPageLayout,
            (short)VisCellIndices.visPLOSplit).ResultIU = 1;
    }
    else { throw new NotImplementedException("GraphStyle " + Style.ToString() + " is not supported"); }
    VisApp.ActivePage.Layout();
}

希望这可以节省一些时间。我花了一段时间才弄清楚。

我正在使用 visio 2010 和 Visual Studio 2010

于 2013-07-19T17:56:55.427 回答
0

不久前我需要做类似的事情..

我使用 Microsoft 的 Glee 库进行布局。下载中包含非常好的示例,向您展示如何添加节点和关系并使它们“自动排列”。但是请注意,Glee 并非免费用于商业用途。

然后我使用此示例将计算出的位置从 Glee 转换为 Visio 绘图。

基本上我所做的就是添加我所有的节点和关系 Glee,然后获取节点列表及其位置,并使用第二个链接将它们添加到 Visio。

这是 Glee 可以做什么的图表示例:

欢乐合唱团图片示例

于 2012-11-08T13:39:42.840 回答
0

可能会有所帮助

相关报价

要布置页面、母版或组的形状子集,请建立一个 Selection 对象,在其中选择要布置的形状,然后调用 Layout 方法。如果在 Selection 对象上执行 Layout 方法并且该对象没有选择任何形状,则布局页面、母版或选择组中的所有形状。

编辑:noonand 2012-09-21 添加了有关 LayoutIncremental 方法的信息

刚刚又看了一下对象模型,看来您想要的方法是 LayoutIncremental 方法

相关帮助主题的摘录说:

Page.LayoutIncremental(AlignOrSpace, AlignHorizontal, AlignVertical, SpaceHorizontal, SpaceVertical, UnitsNameOrCode)
于 2012-09-19T09:48:57.537 回答