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 を使用しています
これは役立つかもしれません
関連する引用
ページ、マスタ シェイプ、またはグループの図形のサブセットをレイアウトするには、レイアウトする図形が選択されている Selection オブジェクトを確立してから、Layout メソッドを呼び出します。Selection オブジェクトに対して Layout メソッドが実行され、オブジェクトで図形が選択されていない場合は、選択範囲のページ、マスター、またはグループ内のすべての図形がレイアウトされます。
編集: noonand 2012-09-21 LayoutIncremental メソッドに関する情報を追加
オブジェクト モデルをもう一度見てみると、必要なメソッドは LayoutIncremental メソッドのようです
関連するヘルプ トピックからの抜粋:
Page.LayoutIncremental(AlignOrSpace, AlignHorizontal, AlignVertical, SpaceHorizontal, SpaceVertical, UnitsNameOrCode)
少し前に似たようなことをする必要がありました..
レイアウトには Microsoft の Glee ライブラリを使用しました。ダウンロードには非常に優れたサンプルが含まれており、ノードとリレーションを追加してそれらを「自動配置」する方法を示しています。ただし、Glee の商用利用は無料ではないことに注意してください。
次に、この例を使用して、計算された位置を Glee から Visio 図面に変換しました。
基本的には、すべてのノードとリレーションを Glee に追加してから、ノードとその位置のリストを取得し、2 番目のリンクを使用して Visio に追加します。
Glee ができることのグラフの例を次に示します。