Форум пользователей Visio http://visio.getbb.ru/ |
|
Видовой экран http://visio.getbb.ru/viewtopic.php?f=15&t=1030 |
Страница 1 из 1 |
Автор: | Shishok [ 02 окт 2016, 21:54 ] |
Заголовок сообщения: | Видовой экран |
Тема поднималась - http://visio.getbb.ru/viewtopic.php?f=3&t=694 Ну так вот я доделал свою задумку по этому поводу. В принципе можно применять, если необходимо. Справка в файле. Скачать ViewPort.zip. https://yadi.sk/d/qbpj9WI9d2eqF |
Автор: | 9rey [ 03 окт 2016, 09:05 ] |
Заголовок сообщения: | Re: Видовой экран |
интересный подход. работает, если потом ничего не дорисовывать в этой области, так как новая фигура не попадет в видовой экран при обновлении. для этого видимо надо запоминать область первоначального выделения, и потом при обновлении видового экрана выделять все шейпы в зоне и строить картинку. ну либо как-то еще... а в целом принцип зачетный! |
Автор: | Shishok [ 03 окт 2016, 09:35 ] |
Заголовок сообщения: | Re: Видовой экран |
9rey писал(а): интересный подход. работает, если потом ничего не дорисовывать в этой области, так как новая фигура не попадет в видовой экран при обновлении. для этого видимо надо запоминать область первоначального выделения, и потом при обновлении видового экрана выделять все шейпы в зоне и строить картинку. ну либо как-то еще... а в целом принцип зачетный! 9rey, ты не прав. Вариант 1: Если ВЭ создавался для всего листа, все что дорисовано попадет в ВЭ, все что удалено - исчезнет. Вариант 2: Если ВЭ создавался для выделенных шейпов, все что дорисовано НЕ попадет в ВЭ, все что удалено (удалено из выделенных при создании ВЭ) - исчезнет. Правда в этом случае есть нюанс. Если был выделен, например Sheet.45 (среди прочих) и он был удален, а потом добавлены некие другие шейпы и среди этих новых будет опять Sheet.45, то этот новый шейп тоже попадет в ВЭ. Как то так. |
Автор: | 9rey [ 03 окт 2016, 09:58 ] |
Заголовок сообщения: | Re: Видовой экран |
да это все понятно. для всего листа создавать видовой экран не вижу смысла (для меня). меня интересовал второй вариант. а там все как я и писал. дорисовал новый элемент без удаления старых - он не отобразится на ВЭ. в чем я тут не прав? надо при обновлении опираться не на запомненные ID, а заново выделять шейпы макросом, попавшие в ту область, которую юзер выделил первый раз. т.е. запоминать не шейпы, а координаты зоны. ну это как бы я сделал. тут дело твоё. с ID шейпов это мутно. не ясно как визио и чего там присваивает (вроде Surrogate говорил, что в новых версиях пустые ID не заполняются, в отличие от старых версий) |
Автор: | Shishok [ 03 окт 2016, 10:03 ] |
Заголовок сообщения: | Re: Видовой экран |
9rey, я наверно не допонял твой коммент. Ты видимо имел в виду создание ВЭ для выделенных шейпов в какой то области листа. Да действительно, если в эту область что то дорисовать, то это не войдет в обновленный ВЭ. Проблема решается просто как очистка апельсина. Дописать Id дорисованных шейпов в ячейку "User.ShapesID.Value" целевого ВЭ. До обновления ВЭ. Ну конечно, это не совсем удобно, ручная работа. Ладно, я тебя понял. Подумаю. |
Автор: | 9rey [ 03 окт 2016, 10:22 ] |
Заголовок сообщения: | Re: Видовой экран |
да. именно это. может сумбурно выразился. просто сразу стал пробовать второй вариант с выделением группы шейпов. и стал "ломать" стирать, дорисовывать. смотрел код. как себя ведет в разных условиях. ну и увидел такое поведение. обычно же как: пользователь выделяет рамкой ту область, которую ему надо видеть и работать только с тем, что в нее попадает (например, как в автокаде). не спорю, твой вариант тоже полезен, когда надо вынести в ВЭ только определенные объекты. можно же реализовать оба варианта. ну а вручную добавлять по ID, да, как-то кисло |
Автор: | Shishok [ 03 окт 2016, 10:33 ] |
Заголовок сообщения: | Re: Видовой экран |
Проще наверное, для твоего случая, создавать ВЭ для всего листа и настраивать его на нужную область. Ну а повторить функционал Autocad до тонкостей - это сам понимаешь. Тем более я не очень представляю как макросом определять отмеченную пользователем область. Использовать WithEvents? Так код должен быть в модуле документа, а у меня все в .vss. И метод Selection.BoundingBox работает только для одного шейпа. |
Автор: | 9rey [ 03 окт 2016, 11:20 ] |
Заголовок сообщения: | Re: Видовой экран |
Shishok писал(а): Проще наверное, для твоего случая, создавать ВЭ для всего листа и настраивать его на нужную область. если так, то да. наверно это решает проблему. тогда можно ничего и не делать больше. Shishok писал(а): Использовать WithEvents? Так код должен быть в модуле документа, а у меня все в .vss. не обязательно. при загрузке vss можешь использовать событие DocumentOpened и в нем инициализировать переменную с модификатором WithEvents, отвечающую за документ, в который подгружаешь стенсил или вообще за приложение. и ловить события уже в своем vss. но это уже наверно и не надо, если работает вариант с ВЭ всего листа. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |