Введение
Общая идея – возможность размещения в контейнерах экранов графического поля (поля карты), в котором есть некий рисунок(схема), состоящая из объектов, к которым можно обратиться из кода по тегам (теги устанавливаются в редакторе), которые взаимодействуют с пользователем (пользователь может, например, нажимать) – т.е. объекты не только отображаются, но и генерируют события, которые можно обработать в обработчике. Для чего нужно? Графика воспринимается лучше текста, поэтому мы, например, используем карты, навигацию, схемы, диаграммы и т.д. Это ускоряет время принятия решений и в частности, из карт, например, складов можно извлечь много пользы помимо чисто визуалки.
В общем случае работа с графикой начинается с векторного редактора, где создается sug-файл (по сути JSON с объектами, размещенными на схеме). Потом этот файл прицепляется через Медиафайлы в редакторе, размещается в контейнере и далее с ним можно работать из обработчиков. Но такой вариант необязательный – файла может не быть. Схема склада, например может быть сгенерирована из кода. Еще есть так называемый «режим холста» уже непосредственно в «экранах», где можно работать с хостом в пользовательском режиме - делать заметки на фотографиях или отчетах, печатных формах.
Представленные в этом релизе возможности - это пока самая база, чтобы обозначить направления, архитектуру, формат. С чего-то надо было начинать. Проект будет развиваться параллельно, будут добавляться графические примитивы, возможности редактирования и т.д.
Работа с картами (складов, стеллажей и т.д.)
Можно нарисовать карту склада (вид сверху), каких то отдельных стеллажей (вид во фронт) или еще какие то схемы, связанные с ячейками, адресами и т.д.
Ячейки имеют адреса, по которым можно обращаться из кода – например, можно покрасить каким то цветом, с помощью команды map_highlight_cells
Можно перехватить событие от пользователя нажатия а ячейку (причем два – нажатие и отпускание) и обработать в обработчике (например, также покрасить). На картинке ниже крашу в зеленый:
Можно строить прямые ходы из ячейки в ячейку напрямую с помощью команды map_add_move. Причем переходов может быть сколько угодно
Например:
hashMap.put("map_add_move",json.dumps([{"from":"1-2","to":"2-2"},{"from":"2-2","to":"3-5"},{"from":"3-5","to":"7-2"},{"from":"7-2","to":"9-5"},{"from":"9-5","to":"13-4"}]))
Есть также режим навигации (прокладка маршрута) между входами ячеек. Этот режим пока нуждается в переосмыслении и доработке. Для этого в редакторе указываются "входы" ячеек и далее алгоритм простраивает по свободному пространству наикратчайший путь.
Можно сгенерировать карту из кода – т.е. взять пустой холст, указать некие условные размеры командой map_set_size и добавить ряды с ячейками командой map_add_rows. Это на случай, если есть в распоряжении координаты ячеек. Ну или нужно сгенерировать что-то условное.
Например вот 2 цикла - карта генерируется из кода:
rowslist=[]
cellsize = 75
shifty = 0
n=0
for i in range(3):
shiftx=0
for j in range(5):
n+=1
rowslist.append({"x":20+shiftx,"y":30+shifty,"row_count":5,"column_count":1,"cell_size":cellsize,"tags":[[str(n)+"-1",str(n)+"-2",str(n)+"-3",str(n)+"-4",str(n)+"-5"]]})
shiftx+=1*cellsize+90
shifty+=5*cellsize+100
hashMap.put("map_clear_rows","")
hashMap.put("map_add_rows",json.dumps(rowslist))
hashMap.put("map_add_move",json.dumps([{"from":"1-2","to":"2-2"},{"from":"2-2","to":"3-5"},{"from":"3-5","to":"7-2"},{"from":"7-2","to":"9-5"},{"from":"9-5","to":"13-4"}]))
И вот результат:
Какие применения есть у конкретно карт?
• Показ маршрутов
• Показ места на полках
• Пользовательский ввод ячеек нажатием
• Тепловые карты (оборачиваемость по ячейкам, заполненность ячеек и т.д.)
• Обсчет, оценка оптимальности маршрутов для алгоритмов подбора маршрутов
Прочие векторные объекты, doodle интерфейс
Помимо рядов с ячейками есть также возможность назначить теги любым другим видам объектов, причем одинаковые теги можно назначать нескольким разным объектам, чтобы управляться с ними разом. Теги можно назначать даже для почеркушек карандашом
Сейчас видов графических примитивов немного, но планируется развивать проект параллельно с симплом.
Надписи на форме можно задавать в виде симпловских переменных (через @) , можно организовать поле ввода там же (через &).
Можно использовать awesome- иконки также как в обычном симпле через #
Что можно делать с этими объектами:
1. Получать события нажатия и отпускания (в случае текстового ввода еще событие ввода текста)
2. Раскрашивать в любой цвет
3. Делать видимым / невидимым
Таким образом можно в прямом смысле слова нарисовать свой интерфейс, показать пользователю диаграмму какого-то процесса, интерактивную схему и т.д.
Режим холста
Чтобы добру не пропадать зря, помимо вышеперечисленных применений есть еще возможность имплементировать в обычные экраны режим редактирования (режим холста), где пользователь может почеркаться на какой-нибудь картинке либо пустом холсте, а потом это все вместе забрать в виде уже готовой картинки или файла из обработчика экрана.
Тут есть пара применений:
1. Фоткать и сразу что-то помечать на фото (например, дефекты).
…
2.И есть еще такая возможность, как почеркаться на любой печатной форме (они в симле - html, подробнее в статье тут //infostart.ru/1c/articles/1716745/) Это могут быть банальные росписи подписантов документа или, например, какие-то заметки в анкете. Это делать удобнее на планшете и стилусом, но за неимением можно в режиме скретча/зума и на маленьком экране. Вот например:
Примеры лежат в комплекте разработчика в основной статье //infostart.ru/public/1153616/
Также подписывайтесь на мой телеграмм канал, чтобы быть в курсе событий https://t.me/devsimpleui
Вот видео с описанием возможностей и "как работать":