我正在从代表流程图的分层数据集创建动态VSD。我不想/需要充分利用这些元素的绝对定位 - 自动布局选项可以正常工作。
问题是我无法弄清楚如何通过代码执行此命令。在UI(Visio 2010)中,命令位于功能区上:设计(选项卡) - >布局(组) - >重新布局(SplitButton)。
任何这些都可以。浏览Visio SDK文档和谷歌搜索几天没有太多用处。
有什么想法吗? (使用C#,但VB / VBA会这样做)
答案 0 :(得分:3)
Page.Layout()方法本身是不够的。
在WBSTreeView.sln示例项目(VB.Net)中,我找到了如何完成此任务,但是在8小时之后无法发布我的答案:-x
通过查看下面使用的枚举,可以实现其他布局类型。 紧凑 - >对于我们正在创造的大多数流程,DownRight最终变得更好。
转换为C#:
// auto-layout, Compact Tree -> Down then Right
var layoutCell = this._page.PageSheet.get_CellsSRC(
(short)VisSectionIndices.visSectionObject,
(short)VisRowIndices.visRowPageLayout,
(short)VisCellIndices.visPLOPlaceStyle);
layoutCell.set_Result(
VisUnitCodes.visPageUnits,
(short)VisCellVals.visPLOPlaceCompactDownRight);
layoutCell = this._page.PageSheet.get_CellsSRC(
(short)VisSectionIndices.visSectionObject,
(short)VisRowIndices.visRowPageLayout,
(short)VisCellIndices.visPLORouteStyle);
layoutCell.set_Result(
VisUnitCodes.visPageUnits,
(short)VisCellVals.visLORouteFlowchartNS);
//// to change page orientation
//layoutCell = this._page.PageSheet.get_CellsSRC(
// (short)VisSectionIndices.visSectionObject,
// (short)VisRowIndices.visRowPrintProperties,
// (short)VisCellIndices.visPrintPropertiesPageOrientation);
//layoutCell.set_Result(
// VisUnitCodes.visPageUnits,
// (short)VisCellVals.visPPOLandscape);
// curved connector lines
layoutCell = this._page.PageSheet.get_CellsSRC(
(short)VisSectionIndices.visSectionObject,
(short)VisRowIndices.visRowPageLayout,
(short)VisCellIndices.visPLOLineRouteExt);
layoutCell.set_Result(
VisUnitCodes.visPageUnits,
(short)VisCellVals.visLORouteExtNURBS);
// perform the layout
this._page.Layout();
// optionally resize the page to fit the space taken by its shapes
this._page.ResizeToFitContents();
//
更改连接线颜色
如果您不熟悉颜色公式的工作方式,这也可能非常令人沮丧。 By default你可以用int作为字符串来获得预定义的颜色,但这并不是很有用,因为没有一种简单的方法可以弄清楚每种颜色是什么。 (有一个Page.Colors集合,但您必须检查每个RGB值并从中找出颜色。)
相反,您可以将自己的RGB值用于公式。
private void SetConnectorLineColor(Shape connector, string colorFormula)
{
var cell = connector.get_Cells("LineColor");
cell.Formula = colorFormula;
}
internal static class AnswerColorFormula
{
public static string Green = "RGB(0,200,0)";
public static string Orange = "RGB(255,100,0)";
public static string Yellow = "RGB(255,200,0)";
public static string Red = "RGB(255,5,5)";
}
答案 1 :(得分:1)
调用Layout对象上的Page方法。如果在此页面上选择了形状,则此方法仅对当前选择进行操作。您可能需要先在DeselectAll上致电ActiveWindow。