Форум пользователей Visio http://visio.getbb.ru/ |
|
Движение маркера(Controls) вдоль кривой/пути http://visio.getbb.ru/viewtopic.php?f=5&t=727 |
Страница 1 из 2 |
Автор: | Tanatos [ 23 янв 2015, 17:38 ] |
Заголовок сообщения: | Движение маркера(Controls) вдоль кривой/пути |
День добрый уважаемые форумчане! Есть линейный объект. К нему есть подпись и маркер (Controls) задающий положение подписи. Мне необходимо привязать перемещение маркера к контуру линейного объекта, нужным мне образом работает функция POINTALONGPATH(<Фигура>,<Смещение от 0 до 1>), но как использовать маркер для указания того самого положения!? Желательно при этом координаты этого самого маркера привязать к самому контуру фигуры ... чтобы он двигался как ползунок на регуляторе (не забываем, что фигура не обязательно прямолинейная) Заранее всем спасибо! |
Автор: | Tumanov [ 24 янв 2015, 15:33 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
До меня не дошло, что от чего зависит. 1. В зависимости от некоторого числа устанавливается положение маркера, а затем и надписи? 2. Или наоборот - мышкой тянется маркер-ползунок и нужно, чтобы он шел по нужной кривой? |
Автор: | Tanatos [ 26 янв 2015, 14:36 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Второй вариант в точку на 100%. Тянем за маркер, но он тянется не в любую сторону а только вдоль кривой. |
Автор: | Tanatos [ 03 фев 2015, 15:43 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Нет идей как это можно реализовать? Не обязательно готовое решение, достаточно идеи как это сделать. |
Автор: | Qwertiy [ 03 фев 2015, 16:33 ] |
Заголовок сообщения: | |
У меня есть 2 идеи, что можно сделать: 1. Пересчитывать координаты маркера в координаты на линии (проекция) и использовать их. 2. Разрешить движение только по одной из осей, а вторую задать формулой. А способа сказать маркеру двигаться только по конкретной линии я не видел. |
Автор: | Tumanov [ 03 фев 2015, 20:16 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Цитата: Нет идей как это можно реализовать? Не обязательно готовое решение, достаточно идеи как это сделать. Немного поломал голову, но результата нет Для прямой делается достаточно легко. Для кривых видно (пока) только громоздкий вариант - в параллель Visio рассчитывать зависимость Y от X. В принципе, это наверное решаемо, но как-то совсем не хочется. Может быть со временем проклюнется что-то еще... |
Автор: | nbelyh [ 03 фев 2015, 22:04 ] | ||||
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути | ||||
Привет. Можно попробовать так. см. аттачмент (вроде работает)! Что происходит: 1. На измение control point срабатывает User.SetPos (из-за DEPENDSON) -> в ячейку User.Pos записывается текущая ближайшая точка вдоль пути 2. На изменение этой позиции (опять же из-за DEPENDSON) срабатывают User.SetX и User.SetY, которые переписывают позицию control point Угол текста задается через ANGLEALONGPATH(User.Pos)
|
Автор: | Tanatos [ 05 фев 2015, 10:37 ] | ||
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути | ||
nbelyh писал(а): Привет. Можно попробовать так. см. аттачмент (вроде работает)! Примного благодарен! Теперь работа с маркерами стала гораздо удобней. P.S. Может кто-то знает как сделать позиционирование меню "Action Tags", зависимым от масштаба страницы? У меня пока получается, что при уменьшении масштаба иконка "Action Tags" перекрывает фигуру и маркеры и с ней ничего не сделать. Приходиться приближать, брать за маркер и отдалять. Иллюстрация во вложении. Хотелось бы добиться фиксированного расстояния (в пикселях) от иконки до маркера при всех масштабах.
|
Автор: | Tanatos [ 05 фев 2015, 14:19 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
У меня в документе используется единица измерения миллиметры, а в примере дюймы. Подозреваю, что одна из функций работает только с дюймами, так как при повторном присвоении значения ячейке у меня маркер скачет между двумя положениями (нажали два раза Enter на ячейке в ShapeShet и маркер переместился, еще раз нажали - вернулся обратно) Перерыл весь хелп но не смог найти явного упоминания в каких единицах параметры и результат в используемых функциях ... хотя может я не совсем верно перенес формулы!? ... я не использую раздел User& а все разместил в Scratch. И еще один момент: если маркер стоит в начале или в конце линии, то перемещение маркера за пределы фигуры соответственно не обновляет "Pos" и маркер благополучно вылетает за пределы линии. Для меня это не критично, но хочется красивого решения И спасибо всем откликнувшимся ! |
Автор: | Tanatos [ 06 фев 2015, 12:22 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Не хватает моих познаний в Visio чтобы понять почему предложенный уважаемым "nbelyh" способ периодически не работает. Что в какой последовательности происходит понятно, формулы понятны, а результат непредсказуем. Маркеры, то выходят за границы фигуры, то вовсе зависимость формул рушится (будто dependson не прописан), и все это происходит без единого вмешательства в ShapeSheet - достаточно просто подольше потягать маркер туда-сюда, нет-нет да и произойдет какой ни будь глюк. Пока сделал реализацию через смесь ShapeSheet и VBA: В секцию Scratch в строку 8 в ячейки X Y A записал следующие формулы: Код: =POINTALONGPATH(Geometry1.Path,Scratch.A8) =POINTALONGPATH(Geometry1.Path,Scratch.A8) =NEARESTPOINTONPATH(Geometry1.Path,Controls.Label1,Controls.Label1.Y) и соответственно в коде документа обработчик: Код: Public WithEvents MyPage As Visio.Page Public WithEvents MyApplication As Visio.Application ' Для связи между обработчиками Private Sub Document_DocumentOpened(ByVal Doc As IVDocument) Set MyApplication = Application End Sub ' Для связи между обработчиками Private Sub MyApplication_ViewChanged(ByVal Window As IVWindow) Set MyPage = ActivePage End Sub ' Непосредственно наш обработчик Private Sub MyPage_CellChanged(ByVal Cell As IVCell) Dim X, XOld As Cell Dim Y, YOld As Cell If Cell.Name = "Controls.Label1" Or Cell.Name = "Scratch.X8" Then Set XOld = Cell.Shape.CellsSRC(visSectionControls, Cell.Shape.CellsRowIndexU("Controls.Label1.X"), visX) Set X = Cell.Shape.CellsSRC(visSectionScratch, Cell.Shape.CellsRowIndexU("Scratch.X8"), visScratchX) If XOld.FormulaU <> X.FormulaU Then XOld.FormulaForceU = X.FormulaU End If End If If Cell.Name = "Controls.Label1.Y" Or Cell.Name = "Scratch.Y8" Then Set YOld = Cell.Shape.CellsSRC(visSectionControls, Cell.Shape.CellsRowIndexU("Controls.Label1.Y"), visY) Set Y = Cell.Shape.CellsSRC(visSectionScratch, Cell.Shape.CellsRowIndexU("Scratch.Y8"), visScratchY) If YOld.FormulaU <> Y.FormulaU Then YOld.FormulaForceU = Y.FormulaU End If End If End Sub Меня такой вариант вполне устраивает, так как кода у меня и без того полно и убиваться для избавления от него смысла нет. В дополнение, в будущем планирую в контекстное меню добавить команды для выравнивания меток по горизонтальной или вертикальной линии, а так же возможность точного позиционирования в виде указания расстояния от края в мм (но это потом). |
Автор: | nbelyh [ 06 фев 2015, 13:01 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Похоже что дело в том как оно зависимости пересчитывает - надо чтобы одновременно X и Y пересчитывало, похоже что это сейчас не так (или не всегда так?). У тебя есть какой-нибудь файлик где этот глюк с левым позиционированием стабильно воспроизводится? |
Автор: | Tanatos [ 06 фев 2015, 15:19 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Да на твоем же примере можно утянуть маркер за пределы фигуры. Тянешь за пределы, отпускаешь - все отлично позиционируется в край, делаешь тоже самое и со второго раза уже маркер не позиционируется на начало линии, а остается в пространстве. Да и если поменять тип соединительной лини на "прямую" и выровнять по горизонтали позиционирование маркера вовсе рушится и его можно тягать куда хочешь и сколько хочешь. |
Автор: | nbelyh [ 06 фев 2015, 23:14 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Я запощу вопрос на visguy. Может что предложат. |
Автор: | nbelyh [ 07 фев 2015, 03:18 ] | ||
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути | ||
Упрощенная версия (по совету visguy)! Просто проставляются координаты надписи, control point обратно не снапится. Вроде все просто тогда получается и работать должно быстро и надежно.
|
Автор: | Tumanov [ 07 фев 2015, 13:04 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Типа, "простенько и со вкусом"... Красиво. |
Автор: | Tumanov [ 07 фев 2015, 15:01 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Однако, кажется и здесь есть проблемы. Шейп получается каким-то не очень копируемым. Возможно потому, что это не просто шейп, а еще и динамический коннектор. Ячейки TxtPinX, TxtPinY при копировании вместо формул принимают значения, поэтому поведение дубля становится не таким, как у эталона. (Обнаружено в Visio 2013). |
Автор: | nbelyh [ 07 фев 2015, 15:47 ] | ||
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути | ||
Достаточно просто GUARD() на TxtPinX, TxtPinY поставить. Пофиксил.
|
Автор: | nbelyh [ 08 фев 2015, 14:45 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Топик тут кстати: http://visguy.com/vgforum/index.php?topic=6279 Там еще один импрувмент сделали: чтобы маркер не дергался, а двигался плавно, можно выключить Misc.LiveDynamics. |
Автор: | nbelyh [ 09 фев 2015, 19:06 ] |
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути |
Еще одно улучшение (там же). Чтобы не сбрасывалось непонятно как (из-за зависимостей), можно пользовать черную магию вроде SETATREEXPR() и типа того. Вроде в последней версии http://visguy.com/vgforum/index.php?top ... 5#msg25745 все красиво, и маркер ползает точно по кривой. |
Автор: | Tim Umix [ 04 янв 2023, 22:16 ] | ||
Заголовок сообщения: | Re: Движение маркера(Controls) вдоль кривой/пути | ||
Сделал фигуру с маркером , который ползает по кругу, все работает. Но если эту фигуру сохранить в набор элементов и вытащить на страницу, то перестает работать, чтобы заработало нужно переписать формулу в User.Pos. В чем может быть проблема? Я где то ошибся или опять косяк моей версии визио 2021? Содержимое спрятано под спойлер ↓ Спойлер: ▼
|
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |