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

これは役立つかもしれません

関連する引用

ページ、マスタ シェイプ、またはグループの図形のサブセットをレイアウトするには、レイアウトする図形が選択されている Selection オブジェクトを確立してから、Layout メソッドを呼び出します。Selection オブジェクトに対して Layout メソッドが実行され、オブジェクトで図形が選択されていない場合は、選択範囲のページ、マスター、またはグループ内のすべての図形がレイアウトされます。

編集: noonand 2012-09-21 LayoutIncremental メソッドに関する情報を追加

オブジェクト モデルをもう一度見てみると、必要なメソッドは LayoutIncremental メソッドのようです

関連するヘルプ トピックからの抜粋:

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

少し前に似たようなことをする必要がありました..

レイアウトには Microsoft の Glee ライブラリを使用しました。ダウンロードには非常に優れたサンプルが含まれており、ノードとリレーションを追加してそれらを「自動配置」する方法を示しています。ただし、Glee の商用利用は無料ではないことに注意してください。

次に、この例を使用して、計算された位置を Glee から Visio 図面に変換しました。

基本的には、すべてのノードとリレーションを Glee に追加してから、ノードとその位置のリストを取得し、2 番目のリンクを使用して Visio に追加します。

Glee ができることのグラフの例を次に示します。

グリーの画像例

于 2012-11-08T13:39:42.840 に答える