Есть программка моделирования шкафов для iPad. Два вида — один 2D, другой 3D
На 2D виде и происходит моделирование. 3D вид просто для просмотра-кручения и настройки материалов.
Для удобства моделирования на 2D виде кроме самих объектов есть еще вспомогательные линейки для выравнивания объектов. Пользваотель добавляет линейки и сами объекты в любом порядке
И есть кнопка Undo — она убирает последний добавленную сущность (линейка или объект). На 2D виде все ок — нам и линейки и объекты есть и видно что откатилось при нажатии на Undo. Но вот на 3D виде нет линеек, там только объекты. И нажатие на Undo там может визуально вообще никак не менять сцену, так как откатилась линйка. Что есть криво. Юзер жмет-жмет, а ничего не происходит. Как быть?
Здравствуйте, Amon_RA, Вы писали:
A_R>Есть программка моделирования шкафов для iPad. Два вида — один 2D, другой 3D A_R>На 2D виде и происходит моделирование. 3D вид просто для просмотра-кручения и настройки материалов. A_R>Для удобства моделирования на 2D виде кроме самих объектов есть еще вспомогательные линейки для выравнивания объектов. Пользваотель добавляет линейки и сами объекты в любом порядке
Информации не хватает. Нужно больше букв.
Насколько виды 2d и 3d пересекаются по функциям? Это 2 независимых редактора? Если так, то можно откатывать в каждом только "его" функции.
Пусть функциональность пересекается. Возьмем 2 категории пользователей: профессиональные и домашние. Для профи сквозной undo и невидимость эффекта от некоторых откатов проблемы не составит, они поймут и привыкнут. Домашних же пользователей может запутать, хотя, я считаю, не насмерть. Ситуация с невидимым эффектом от undo встречается не так уж редко.
Можно о домашних позаботиться. Откаты, не имеющие видимого эффекта, можно обозначать. Например, "пролетающей" строкой; символической анимашкой, на долю секунды показывать полупрозрачный вид 2d с изменением и т.п. Необычно, конечно. Да, спикером посвистывать.
Но в целом надо смотреть конкретно по воркфлоу. Так трудно что-то сказать. Допустим, может оказаться, что откатывать в каждом виде только его ф-ии будет в целом хорошо для всех.
Здравствуйте, Amon_RA, Вы писали:
A_R>И есть кнопка Undo — она убирает последний добавленную сущность (линейка или объект). На 2D виде все ок — нам и линейки и объекты есть и видно что откатилось при нажатии на Undo. Но вот на 3D виде нет линеек, там только объекты. И нажатие на Undo там может визуально вообще никак не менять сцену, так как откатилась линйка. Что есть криво. Юзер жмет-жмет, а ничего не происходит. Как быть?
Здравствуйте, Amon_RA, Вы писали:
A_R>И есть кнопка Undo — она убирает последний добавленную сущность (линейка или объект). На 2D виде все ок — нам и линейки и объекты есть и видно что откатилось при нажатии на Undo. Но вот на 3D виде нет линеек, там только объекты. И нажатие на Undo там может визуально вообще никак не менять сцену, так как откатилась линйка. Что есть криво. Юзер жмет-жмет, а ничего не происходит. Как быть?
Почему бы не отображать линейку и в 3D, скажем, в виде полоски на полу? Тем более, вдруг она там пригодится.
Сложное решение: допустим вы собираетесь откатить создание линейки в 3D: сразу после нажатия кнопки Undo можно эту линейку в 3D нарисовать и медленно (за 2-3 секунды) показать, как она исчезает. Тогда пользователь получит необходимую обратную связь, но при этом вы не засорите интерфейс лишними объектами.
Решение попроще: подсвечивать ненадолго при Undo тот элемент интерфейса, который ведет к списку линеек или интерфейсу, в котором они видны. Тогда пользователь хотя бы будет знать, где примерно что-то поменялось.
Пользователь смотрит на 3D вид. Жмет undo -- откатилось. Жмет еще раз undo -- откатилось.
Следующим в истории стоит вставка линейки а потом изменение элемента, которые в 3d видно.
Пользователь по-прежнему хочет откатить еще на шаг.
По-моему самое нелогичное тут это откатить шаг линейки (что бы пользователь получил то, что он хочет, ему придется нажать undo два раза).
Самое логичное с точки зрения ожидания пользователя -- откатить то изменение, которое пользователь увидит.
При этом через вставку линейки можно вообще перепрыгнуть -- это может быть сложнее в реализации (обеспечивать целостность модели, если объект имеет более тесные связи с остальной моделью, чем линейка), но проблем пользователю создать не должно -- линейка это вообще не артефакт его работы, а просто инструмент.
Если же история длинная и отражает различные стадии проекта, к которым с большой вероятностью захочется (что само по себе через undo не очень хорошо), в т.ч. что бы состояние линеек соответствовало стадии, можно не перескакивать через операции с линейкой, а отменять и их, и действие с объектом-артефактом.
Еще один совсем простой вариант именно для линеек: вообще исключать операции с ними из истории, если после них в стеке появились изменения модели-артефакта.
A_R>И есть кнопка Undo — она убирает последний добавленную сущность (линейка или объект). На 2D виде все ок — нам и линейки и объекты есть и видно что откатилось при нажатии на Undo. Но вот на 3D виде нет линеек, там только объекты. И нажатие на Undo там может визуально вообще никак не менять сцену, так как откатилась линйка. Что есть криво. Юзер жмет-жмет, а ничего не происходит. Как быть?
К сожалению, ссылка на ролик даёт 404, так что буду угадывать телепатически
Я в своё время неоднократно задумывался о семантике Undo для настроек View.
Классический Undo действует только на "Document", т.е. ту модель, которую мы редактируем. Именно действия над ней записываются в лог, и именно они откатываются.
А вот настройки View обычно считаются несущественными, и их откатить нельзя.
Меня периодически бесило то, что можно лёгким движением руки сломать какую-то визуальную настройку, и потом долго искать способ её восстановить. Скажем, закрыть какое-то окно, нечаянно сдвинуть тулбар, изменить масштаб и т.д.
В некоторых программах (сейчас уж не вспомню в каких) изменения настроек View сваливаются в тот же лог, и это тоже адски неудобно — скажем, я изменил текст, поменял масштаб, и только после этого понял, что надо откатить изменение текста. Увы, изменение масштаба тоже открутится назад.
Так вот, если бы ваши линейки были бы объектами View (как линейки в программах Microsoft Office), а не Document, а программа была бы для Windows, то я бы сделал отдельные пункты Undo ... /Redo ... в меню View (и, конечно же, как и в меню Edit, я бы переименовывал их в соответствии с конкретикой — Undo Hide Ruler, Undo Close Properties Pane, ...).
А вот если линейки являются частью модели редактируемого документа и сохраняются вместе с ним, но просто невидимы в одном из режимов, то я бы выбрал один из двух вариантов:
1. Добавить смену режимов между 2d и 3d в undo-log. Т.е. перед тем, как удалить линейку, пользователя принудительно переключают в 2d режим. Примерно так работает Excel — чтобы показать, какое именно изменение откатывается, пользователя перекидывают туда, где он его сделал.
2. Выводить неинтрузивную нотификацию типа "Ruler A creation has been undone".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.