Ну мне этот файл предоставили, в визио 2010 я с ним не работал, поэтому не знаю воспроизводится ли ошибка.
https://yadi.sk/d/PCP_xpUFyPXY9Сконвертировал в 2010.
На вход поступает:
Код:
Visio.Shape thisShape, Visio.Shape fromToShape, double xCoord, double yCoord, Visio.VisCellIndices cellIndices
Вот код метода, который склеивает стрелки с другими фигурами
Код:
x1 = fromToShape.Cells["BeginX"].ResultIU;
x2 = fromToShape.Cells["EndX"].ResultIU;
y1 = fromToShape.Cells["BeginY"].ResultIU;
y2 = fromToShape.Cells["EndY"].ResultIU;
if (Math.Abs(Math.Round(x1, 3) - Math.Round(x2, 3)) < VisioUtility.ТочностьПоУмолчанию) //ТочностьПоУмолчанию = 0.01
x1 = x2;
if (Math.Abs(Math.Round(y1, 3) - Math.Round(y2, 3)) < VisioUtility.ТочностьПоУмолчанию)
y1 = y2;
Visio.Cell cell = VisioUtility.ПолучитьЯчейку(thisShape, Visio.VisSectionIndices.visSectionObject, Visio.VisRowIndices.visRowXForm1D, cellIndices);
double xPos, yPos;
//Если цепляемся к стрелке и она прямая, то берём значение по умолчанию, оно не влияет на координату крепления
if (Math.Round(xCoord - x1, 4) == 0 && Math.Round(x2 - x1, 4) == 0 || Math.Round(x2 - x1, 4) == 0)
xPos = 0.5;
else
xPos = Math.Round((xCoord - x1) / (x2 - x1), 2);
if (Math.Round(yCoord - y1, 4) == 0 && Math.Round(y2 - y1, 4) == 0 || Math.Round(y2 - y1, 4) == 0)
yPos = 0.5;
else
yPos = Math.Round((yCoord - y1) / (y2 - y1), 2);
cell.GlueToPos(fromToShape, xPos, yPos);