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에서 완벽하게 작동하지만,하지의 Visio에서의 Visio 2010 및 Visio 2013 년 2016

텍스트 형태의 경계 상자이었다 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() 메서드에 문제가 있습니까?

Shape.BoundingBox() 플래그 소요 visio16에서 잘 작동) 나는이 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

을 주셔서 감사합니다 첫 번째 매개 변수는 "((short) Visio.VisBoundingBoxArgs.visBBoxUprightText"이며 텍스트가 둘러싼 사각형의 경계 상자를 가져 오는 데 사용됩니다.) 다음은 catch에 대한 Shape.BoundingBox() 메서드가 Shape를 확인하는지 여부입니다. .type()이 경우 사각형으로 반환되며 플래그는 t에 대한 경계 상자를 가져 오라고 말합니다. ext는 실패 사례에서 끝나며 따라서 출력을 관찰합니다. 문 위

, 여기에 주어진 정보로 검증 할 수 https://msdn.microsoft.com/en-us/library/office/ff766755.aspx

"BoundingBox의 방법은 오류를 반환하거나, 제로 모양을 둘러싸는 사각형을 반환하도록 요청하는 경우, 반환 된 사각형 {왼쪽 인 경우 : 0, bottom : 0, right : -1, top : -1}, 그렇지 않으면 반환 된 사각형은 오른쪽 (< =)보다 작거나 같고 바닥은 (< =)보다 작거나 같습니다. 반환 된 값은 내부 단위 (인치)입니다. "

또한 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 년에 같은 코드가 예상대로 수행되므로 두 버전 간에는 차이가 있습니다. – JohnGoldsmith

+0

추가 조사를 수행하여 Shape.BoundingBox() 메소드에 최근 변경된 사항이 있음을 확인했습니다. 해결 방법은 Shape.VisualBoundingBox()를 사용할 수 있습니다. – bluemoonstudios