Форум пользователей Visio
http://visio.getbb.ru/

Запретить концу стрелки сдвигаться при GlueToPos
http://visio.getbb.ru/viewtopic.php?f=6&t=1048
Страница 1 из 1

Автор:  Bill17 [ 10 ноя 2016, 17:38 ]
Заголовок сообщения:  Запретить концу стрелки сдвигаться при GlueToPos

Бросаю на диаграмму несколько динамических коннекторов и склеиваю их между собой.
При склейке двух коннекторов конец одного из них сдвигается. Можно ли как-то запретить меняться координатам при коннекте?

Автор:  Tumanov [ 10 ноя 2016, 17:54 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

А вот у меня ничего не сдвигается.
Значит, дело в каких-то особенностях: что клеится, к чему, каким методом и в каком окружении.
В Вашем вопросе такая информация отсутствует.
Хорошо бы было иметь образец файла и перечень действий, позволяющих однозначно воспроизвести ситуацию.

Автор:  Bill17 [ 11 ноя 2016, 09:21 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Собственно в том и проблема, что сдвигается не всегда. Вообще я формирую новый файл по данным из старого и эта проблема возникает в нём, возможно какие-то настройки не выставлены.
Вот изначальная диаграмма: https://yadi.sk/d/kmNlfHiOyNXNc
Проблема возникает со стрелкой "ММ".

Ещё может быть я ошибаюсь с расчётом точки коннекта и поэтому идёт смещение.

Автор:  Bill17 [ 11 ноя 2016, 09:35 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Склеиваются две стрелки методом GlueToPos.
А перечень действий таков: Дроп подряд всех фигур на диаграмме на новую диаграмму. стрелки склеиваются с теми фигурами с которыми они связаны.
В результате одна стрелка "ММ" ошибается.
Проблема возникает как я понимаю с системой из трёх стрелок. То есть есть стрелка, которую мы не рассматриваем, есть вторая, которая выходит из первой, она прямая и есть третья с углом, выходит из второй. В этой системе третья стрелка сдвигается

Автор:  Shishok [ 11 ноя 2016, 11:23 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Надо бы файлик в формате .vsd выложить. Не у всех же Visio 2013 и выше.

Автор:  Surrogate [ 11 ноя 2016, 11:28 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

и конвертер снова перестал работать у меня
Tumanov в сообщении #4480 писал(а):
хоть снова запрещай выкладывать документы в vsdx/vsdm на форуме ? а вот на разных яндекс дисках то никак не запретишь !

Автор:  Tumanov [ 11 ноя 2016, 11:42 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Цитата:
Надо бы файлик в формате .vsd выложить
Да, вот и я тоже смогу в этом формате посмотреть только вечером.
Но запрещать смысла нет.
Народ должен сам понимать, что при наличии правильного формата вероятность ответа повышается.

Автор:  Surrogate [ 11 ноя 2016, 11:52 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Tumanov писал(а):
Народ должен сам понимать, что при наличии правильного формата вероятность ответа повышается.
надо тогда где-то это большими и горящими буквами написать !!!
сделал однако см. над заголовком темы

Автор:  Dmitrii [ 11 ноя 2016, 14:32 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Bill17,
файл в формате vsdx, и кода в нем конечно нет :(
остается гадать что было в вашем коде !
Кстати ваша контора крутой продукт запилила !

Автор:  Bill17 [ 11 ноя 2016, 15:25 ]
Заголовок сообщения:  Re: Запретить концу стрелки сдвигаться при GlueToPos

Ну мне этот файл предоставили, в визио 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);

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/