我在我的 C# 应用程序中使用 Microsoft Visio 作为 COM 对象。我想在 Visio 页面上自动排列形状。我应该为这个任务编写什么代码?形状是数据库实体。
userView.Shapes.SomeMethod();
userView 是 COM 对象的名称,但应该SomeMethod
是什么?
我知道这是一个“较旧”的问题,但我正在做一些非常相似的事情,并设法使用以下代码“自动布局”流程图:
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
不久前我需要做类似的事情..
我使用 Microsoft 的 Glee 库进行布局。下载中包含非常好的示例,向您展示如何添加节点和关系并使它们“自动排列”。但是请注意,Glee 并非免费用于商业用途。
然后我使用此示例将计算出的位置从 Glee 转换为 Visio 绘图。
基本上我所做的就是添加我所有的节点和关系 Glee,然后获取节点列表及其位置,并使用第二个链接将它们添加到 Visio。
这是 Glee 可以做什么的图表示例:
这可能会有所帮助
相关报价
要布置页面、母版或组的形状子集,请建立一个 Selection 对象,在其中选择要布置的形状,然后调用 Layout 方法。如果在 Selection 对象上执行 Layout 方法并且该对象没有选择任何形状,则布局页面、母版或选择组中的所有形状。
编辑:noonand 2012-09-21 添加了有关 LayoutIncremental 方法的信息
刚刚又看了一下对象模型,看来您想要的方法是 LayoutIncremental 方法
相关帮助主题的摘录说:
Page.LayoutIncremental(AlignOrSpace, AlignHorizontal, AlignVertical, SpaceHorizontal, SpaceVertical, UnitsNameOrCode)