я мог Репрографический это Aswell, но есть некоторые детали к этому, которые предлагают BoundingBox() работает отлично в visio16,
Shape.BoundingBox() принимает флаг в качестве первого параметра, который упоминается здесь »((короткий) Visio.VisBoundingBoxArgs.visBBoxUprightText», который используется для получения ограничивающей рамки прямоугольника, в который заключен текст. Вот метод catch, Shape.BoundingBox() проверяет форму .type(), который в этом случае возвращается как прямоугольник, и флаг говорит, чтобы получить ограничивающий прямоугольник для t ext, который заканчивается в случае сбоя и, следовательно, на выходе, как наблюдалось.
Выше заявление может быть подтверждено с информацией приведенной здесь, https://msdn.microsoft.com/en-us/library/office/ff766755.aspx
«Если метод BoundingBox возвращает ошибку, или если просят вернуть прямоугольник, охватывающий нулевые формы, прямоугольник Возвращается {слева: 0, bottom: 0, right: -1, top: -1}, в противном случае возвращенный прямоугольник оставил меньше или равно (< =) справа, а нижнее значение меньше или равно (< =) вверх. возвращены во внутренних единицах (дюймах) ».
Кроме того, чтобы убедиться, что BoundingBox() возвращает правильное значение, мы можем попробовать использовать флаг «visBBoxUprightWH», который дает точный ограничивающий прямоугольник для прямоугольника, на который мы запрашиваем ограничительную рамку. (Код ниже)
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
}
Визио внутри первой получает временный прямоугольник текста внутри фактического прямоугольника, а затем вызывает метод BoundingBox на этой температуры прямоугольника формы всякий раз, когда используется флаг «visBBoxUprightText» при запросе для BoundingBox() который в конечном итоге отлично работает без каких-либо сбоев.
Привет, я подтверждаю, что вижу ту же самую разницу между 2013 и 2016 годами и поднял ее с командой Visio. – JohnGoldsmith
@JohnGoldsmith - вы слышали новости из команды Visio? Как вы думаете, можно ли исправить проблему в любом входящем пакете Office 2016? – Sal
Привет, Просто обновите, что исправление для этого сейчас находится на пути: https://support.microsoft.com/en-gb/help/3203473/july-5-2017-update-for-visio- 2016-kb3203473 – JohnGoldsmith