Форум пользователей 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" целевого ВЭ. До обновления ВЭ. Ну конечно, это не совсем удобно, ручная работа. :D
Ладно, я тебя понял. Подумаю.

Автор:  9rey [ 03 окт 2016, 10:22 ]
Заголовок сообщения:  Re: Видовой экран

да. именно это. может сумбурно выразился.
просто сразу стал пробовать второй вариант с выделением группы шейпов. и стал "ломать" :) стирать, дорисовывать. смотрел код. как себя ведет в разных условиях.
ну и увидел такое поведение.
обычно же как: пользователь выделяет рамкой ту область, которую ему надо видеть и работать только с тем, что в нее попадает (например, как в автокаде).
не спорю, твой вариант тоже полезен, когда надо вынести в ВЭ только определенные объекты.
можно же реализовать оба варианта.
ну а вручную добавлять по ID, да, как-то кисло :D

Автор:  Shishok [ 03 окт 2016, 10:33 ]
Заголовок сообщения:  Re: Видовой экран

Проще наверное, для твоего случая, создавать ВЭ для всего листа и настраивать его на нужную область.
Ну а повторить функционал Autocad до тонкостей - это сам понимаешь.
Тем более я не очень представляю как макросом определять отмеченную пользователем область.
Использовать WithEvents? Так код должен быть в модуле документа, а у меня все в .vss.
И метод Selection.BoundingBox работает только для одного шейпа. :cry:

Автор:  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/