Есть графический редактор.
Объекты можно создавать как кликая мышкой на экране, так и задавая точные значения на специальной панели. Для каждой команды эта панель заполняется своими диалогами.
То есть логика программы такова, что такая панель должна быть для каждой команды.
Ну например, для ввода отрезка — понятно, что на панели два диаложка — "Введите координаты первой точки" и "Введите координаты второй точки"
Тут все понятно.
Далее. Есть команды, на вход которых должны поступать объекты. Ну например, вращение объектов. То есть юзер выбирает объектвы, а полтом их крутит. Вот никак не придумаю, что должно быть на панели при выборе объектов.
Делал дерево сцены с возможностью Check-инить отдельные элементы. Плохо!!! При большой сцене каждый раз заполнять это дерево — медленно получается.
Вся сложность в том, что выбор объектов собственно зависит от команды. Если для вращения объектов подойдут любые объекты, то, например, для построения трехмерного тела по сечениям, понятно, нужно выбирать только плоские контуры — сами сечения. Или для булевых операций — выбирать тольок 3D тела.
Еще необходимое условие — возможность выбирать много объектов или только один (ну например — для булевых операций — Выберите первый объект и Выберите второй объект — то есть каждый раз тольок по одном объекту)
Не могу ничего придумать путного. Что посоветуете?
Здравствуйте, Amon-RA, Вы писали:
AR>Не могу ничего придумать путного. Что посоветуете?
На счет панели:
Командную строку при всех ее минусах никто пока не отменил
И есть она во всех более менее сложных векторных редакторах — AutoCAD и т.п.
При использовании сложных команд она сильно облегчает программирование.
А в остальном — паттерн "команда".
Я деле примерно так:
1. есть объект исполняющий команды (CommandLine) и сами команды (Command)
2. CommandLine связан со списком View, при выполнении команд перерисовывает все вьюхи и снимает с них координаты мыши и пр.
3. Command имеет собственные обработчики действий пользователя, а CommandLine просто перенаправляет обработку в текущую команду.
4. соответсвенно COmmand сам может определить какие ограничения наложить на пользователя (например, при выборе объекта — CommandLine перенаправляет обработку события SelectObject в Command, если объект не подходит — выбор не допускается); многие команды содержат в себе простой конечный автомат, который определяет доступные пользователю действия (тот же ввод линии — три состояния — ввод первой точки, ввод второй — завершение ввода, до завершения ввода можно отменить последнюю введенную точку).
5. к Command привязан объект ViewUpdate, который при изменении состояния команды изменяет пользовательский интерфейс (снова ввод линии — в зависимости от состояния автомата в командную строку выводятся различные подсказки — введите первую точку, введите вторую точку).
6. COmmandLine держит команды в стеке для возможности Undo-Redo.
Здравствуйте, kavlad, Вы писали:
K>На счет панели: K>Командную строку при всех ее минусах никто пока не отменил
Про командную строчку я очень долго думал — вставлять ли её в свою программу. И решил не делать этого. Скажу 2 причины.
Во-первых, я пишу программу не для продвинутых инженеров, которые не боятся клавиатуры, а людей, которые думают, что монитор — это и есть компьютер. Их напугает командная строчка. Реальный пример пользователся моей программы — дизайнеры из мебельного магазина, которые задав параметры например шкафа, сразу получают его трехмерную модель и чертежи для инженеров — все это происходит на глазах покупателя мебели. И командная строчка все это усложнила бы.
Вторая причина. Когда у нас панель, а не командная строка, мы можем в любой момент изменить уже введенные данные. То есть. Если юзер встает на уже введенную координату первой точки при запросе второй точки скажем отрезка, то автоматически клик на экране будет обозначать первую точку. Как это сделатть быстро с помощью командной строки есл параметров например 20?
Да-да. Тема та.
ЗХ>А прямо на сцене выбирать объекты, а не в отдельном спике — не?
Так в том и соль. Что любое действие можно сделать как на экране, так и на панели. Само собой, что на экране можно выбирать объекты. Я и думаю что присабачить на панель при выборе объектов
Здравствуйте, Amon-RA, Вы писали:
ЗХ>>А прямо на сцене выбирать объекты, а не в отдельном спике — не?
AR>Так в том и соль. Что любое действие можно сделать как на экране, так и на панели. Само собой, что на экране можно выбирать объекты. Я и думаю что присабачить на панель при выборе объектов
А нада ли? У тебя получится вот такая фигня:
+---------------------------------------+------------+
| |а тут - тот |
| |же набор тех|
| |же объектов,|
| |только выгля|
| тут сцена - по сути это набор |дит по друго|
| объектов |му |
| | |
| | |
| | |
| | |
| | |
| | |
+---------------------------------------+------------+
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>А нада ли? У тебя получится вот такая фигня:
Да, что-то типа того
ЗХ>Ты правда уверен, что оно надо?
Нет. Даже может больше не надо, чем надо.
НО: ЕДИНООБОРАЗИЕ.
Понимаете?
Все может задаваться через панель. А выбор объектов — нет? Кривовато получается.
Если мне подскажут другой путь — оч хорошо. Но я не нашел
Здравствуйте, Amon-RA, Вы писали:
ЗХ>>А нада ли? У тебя получится вот такая фигня:
AR>Да, что-то типа того
ЗХ>>Ты правда уверен, что оно надо?
AR>Нет. Даже может больше не надо, чем надо. AR>НО: ЕДИНООБОРАЗИЕ. AR>Понимаете? AR>Все может задаваться через панель. А выбор объектов — нет? Кривовато получается. AR>Если мне подскажут другой путь — оч хорошо. Но я не нашел
Кнопка "добавить выделенный" добавляет в список текущий выделенный объект сцены. Так получается — у нас вроде и на панели что-то есть (и даже небесполезное), и извращаться не нада.
ы?
Я примерно так и думал.
Мне это казалось не очень юзабилити и хотелось на что-то другое посмортеть.
Ну конечно если сам Зверек (тут нет нисколько иронии, только уважение) говорит, что так можно, то наверное так и сделаю
AR>Я примерно так и думал. AR>Мне это казалось не очень юзабилити и хотелось на что-то другое посмортеть.
А обоснования? То ись почему не очень? Интересно...
AR>Ну конечно если сам Зверек (тут нет нисколько иронии, только уважение) говорит, что так можно, то наверное так и сделаю
Ну ты мне не очень то доверяй — я всего лишь Зверёк
К слову, неплохо бы еще в каждой строчке сделать кнопочку-крестик для быстрого удаления объектов из выборки.
И драг-н-дроп объекта в список/из списка поддерживать.
Здравствуйте, Зверёк Харьковский, Вы писали:
AR>>Я примерно так и думал. AR>>Мне это казалось не очень юзабилити и хотелось на что-то другое посмортеть. ЗХ>А обоснования? То ись почему не очень? Интересно...
Ну вот конкретный пример. Взять те же булевы операции. Нужно сначала выбрать один объект, потом второй. То есть, на панели два диалога выбора объектов.
Щелкнули мы по первому. Его имя свалилось в список на панели и мы автоматически переходим в режим выбора второго объекта.
И тут приспичило пользователю поменять первый объект (они ведь уроды(любя) такие )
Щелкнул он по списку с первым объектом. И что? Имя из списка пропадает? Ведь первого уже какбы нет. Это не кажется немного странным?
Здравствуйте, Amon-RA, Вы писали:
AR>>>Я примерно так и думал. AR>>>Мне это казалось не очень юзабилити и хотелось на что-то другое посмортеть. ЗХ>>А обоснования? То ись почему не очень? Интересно...
AR>Ну вот конкретный пример. Взять те же булевы операции. Нужно сначала выбрать один объект, потом второй. То есть, на панели два диалога выбора объектов. AR>Щелкнули мы по первому. Его имя свалилось в список на панели и мы автоматически переходим в режим выбора второго объекта. AR>И тут приспичило пользователю поменять первый объект (они ведь уроды(любя) такие ) AR>Щелкнул он по списку с первым объектом. И что? Имя из списка пропадает? Ведь первого уже какбы нет. Это не кажется немного странным?
Да, есть такая буква... А если сделать не два списка, а один список с двумя объектами?
Здравствуйте, Amon-RA, Вы писали:
AR>Все может задаваться через панель. А выбор объектов — нет? Кривовато получается.
Единообразие — это конечно хорошо, но зачеи?
Насколько я понял выбор через панель нужен для более высокого контроля задействиями пользователя — в панели всегда будут только доступные для выбора объекты. Я бы сделал по другому — изменил цвет объектов на сцене, доступные поярче, недоступные каким-нибудь серым
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Да, есть такая буква... А если сделать не два списка, а один список с двумя объектами?
А тогда как отличать порядок задания объектов. В команде перемещения объектов порядок не важен. А вот в тех же булевых — важен. Как сказать — "вот это — первый. Хочешь его поменять — сделай ..." не очень вяжется.
Здравствуйте, Caduceus, Вы писали:
C>А тогда как отличать порядок задания объектов. В команде перемещения объектов порядок не важен. А вот в тех же булевых — важен. Как сказать — "вот это — первый. Хочешь его поменять — сделай ..." не очень вяжется.
Здравствуйте, Amon-RA, Вы писали:
C>>А тогда как отличать порядок задания объектов. В команде перемещения объектов порядок не важен. А вот в тех же булевых — важен. Как сказать — "вот это — первый. Хочешь его поменять — сделай ..." не очень вяжется.
AR>Да. Это я и хотел сказать
1. что-то я слегка потерялся. в какой булевой операции, например, важен порядок объектов?
2. можно сделать положение объекта в списке значимым + добавить к списку кнопки "переместить вверх", "переместить вниз".
Здравствуйте, Зверёк Харьковский, Вы писали: ЗХ>1. что-то я слегка потерялся. в какой булевой операции, например, важен порядок объектов?
Ну как же. Вычесть из сферы тор или из тора сферу — это же разные вещи.
ЗХ>2. можно сделать положение объекта в списке значимым + добавить к списку кнопки "переместить вверх", "переместить вниз".
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>2. можно сделать положение объекта в списке значимым + добавить к списку кнопки "переместить вверх", "переместить вниз".
все-таки мне кажется что когда положение в списке играет роль, то смысл немного другой. К тому же в будущем возможно например вычитание многих из многих — что тогда?
Здравствуйте, Amon-RA, Вы писали:
ЗХ>>1. что-то я слегка потерялся. в какой булевой операции, например, важен порядок объектов?
AR>Ну как же. Вычесть из сферы тор или из тора сферу — это же разные вещи.
А, да, гоню-гоню
ЗХ>>2. можно сделать положение объекта в списке значимым + добавить к списку кнопки "переместить вверх", "переместить вниз".
AR>Надо подумать
Мне кажется, так удобней, чем два списка. Юз-кейс "мне надо что-то сделать вот с этими 2мя объектами (добавил в список), из этого этот вычесть? а нет, я имел в виду из этого этот (поменял местами)".
Другой вариант: "закреплять" первый объект в момент выбора операции.
Где-то так: выбрали сферу, выбрали вычитание — а потом выбираем уже только один объект: что будем вычитать. С точки зрения бинарных операций — может, это и правильнее.
К слову, при этом варианте можно из одного объекта вычесть сразу несколько — и это будет выглядеть вполне понятно и очевидно.