2016-09-28 8 views
0

Visioアドインでは、幾何学的形状を持たない図形をいくつか作成します。 C#コードは、Visioのページの中央にテキストを作成するために使用され、以下:C#アドインでのVisio 2016シェイプの作成

Master MyMaster = MyStencil.Masters["Navigation"]; 

Shape MyShape = MyPage.Drop(MyMaster, PageRight/2.0, PageTop/2.0); 

MyShape.Text = "Some text"; 

double ShapeLeft, ShapeBottom, ShapeRight, ShapeTop; 

MyShape.BoundingBox((short)VisBoundingBoxArgs.visBBoxUprightText, 
    out ShapeLeft, out ShapeBottom, out ShapeRight, out ShapeTop); 

テキスト形状は、そのバウンディングボックスは、ページの他のコンポーネントを生成するために計算されて作成された後。それがされたVisioの2010年の

テキスト形状のバウンディングボックス

のVisioの以前のバージョンではなく、Visioの2016年に完全に働いたおよびVisio 2013:Visioの2016年

ShapeLeft = 5.48 
ShapeBottom = 4.05 
ShapeRight = 6.20 
ShapeTop = 4.21 

形状のバウンディングボックスである:

ShapeLeft = 0.0 
ShapeBottom = 0.0 
ShapeRight = -1.0 
ShapeTop = -1.0 

Visio 2016のShape.BoundingBox()メソッドで何が問題になっていますか?

私はこのaswellをREPROでしたが、にBoundingBoxを(提案これにいくつかの詳細があり、

サル

+0

こんにちは、私は2013年と2016年の間に同じ差異があることを確認し、Visioチームと提携しました。 – JohnGoldsmith

+0

@JohnGoldsmith - Visioチームからのお知らせはありますか?着信するOffice 2016 SPでこの問題が修正されると思われますか? – Sal

+0

こんにちは、ちょうど更新するには、このための修正が今のところにあるようだ:https://support.microsoft.com/en-gb/help/3203473/july-5-2017-update-for-visio- 2016-kb3203473 – JohnGoldsmith

答えて

0

をいただき、ありがとうございます)visio16で正常に動作している、

Shape.BoundingBoxは()のフラグを取ります最初のパラメータとして "((short)Visio.VisBoundingBoxArgs.visBBoxUprightText")を使用して、テキストが囲む矩形のバウンディングボックスを取得します。ここでキャッチはShape.BoundingBox()メソッドがシェイプをチェックします.type()この場合は矩形として返され、フラグはtのバウンディングボックスを取得するように指示しますextは、失敗事例で終わり、したがって、出力は観測されます。声明の上

は、ここで与えられた情報で検証することができhttps://msdn.microsoft.com/en-us/library/office/ff766755.aspx

「このBoundingBoxメソッドがエラーを返すか、それがゼロ形状を囲む矩形を返すように要求された場合、返される矩形は{左の場合: 0、bottom:0、right:-1、top:-1};そうでない場合、返される矩形は(< =)right以下で、bottomは(< =返されるのは内部単位(インチ)です。

また、BoundingBox()が正しい値を返していることを確認するには、境界ボックスを照会する矩形の正確な境界ボックスを示すフラグ "visBBoxUprightWH"を使用してみます。このBoundingBoxを照会しながら、フラグ「visBBoxUprightText」を使用するたびに(以下コード)

private void button1_Click(object sender, RibbonControlEventArgs e) 
{ 
     Visio::Application application = Globals.ThisAddIn.Application; 
     Visio::Page page = application.ActivePage; 
     Visio::Document basicStencil = application.Documents.OpenEx("basic_u.vssx", (short)(Visio.VisOpenSaveArgs.visOpenRO | Visio.VisOpenSaveArgs.visOpenHidden)); 
     var master = basicStencil.Masters.ItemU["Rectangle"]; 
     double pinX = 5.5; 
     double pinY = 5.5; 
     double height = 2.0; 
     double width = 2.0; 
     Visio::Shape shape = page.Drop(master, pinX, pinY); 
     String text = "I am here"; 
     shape.Text = text; 
     Visio.Cell cell = shape.get_CellsU("Height"); 
     cell.ResultIUForce = height; 
     cell = shape.get_CellsU("Width"); 
     cell.ResultIUForce = width; 


     double Left = 0.0; 
     double Right = 0.0; 
     double Bottom = 0.0; 
     double Top = 0.0; 
       shape.BoundingBox((short)Visio.VisBoundingBoxArgs.visBBoxDrawingCoords, out Left, out Bottom, out Right, out Top); 
     Console.WriteLine(Left);  //4.5 
     Console.WriteLine(Right); //6.5 
     Console.WriteLine(Bottom); //6.5 
     Console.WriteLine(Top);  //4.5 
} 

Visioは内部で第一)(実際の矩形内のテキストの一時矩形を取得し、この一時矩形形状でこのBoundingBoxメソッドを呼び出し最終的には問題なく正常に動作します。

+0

BoundingBoxメソッドは、通常のジオメトリに対しては正常に機能しますが、ジオメトリを持たないOPでは正しく動作しません。2013年の同じコードが期待どおりに実行されるため、2つのバージョンの間に違いはありません。 – JohnGoldsmith

+0

詳細な調査を行ったため、これを引き起こしたShape.BoundingBox()メソッドにいくつかの最近の変更が加えられたことが判明しました。回避策として、Shape.VisualBoundingBox()を使用できます – bluemoonstudios

関連する問題