0. serg_infostart 295 27.09.16 15:22 Сейчас в теме

Программное создание графических схем (v.2): API для ГрафическойСхемы

Пример динамического создания графических схем, добавления элементов любых видов. Любые схемы без бизнес-процессов. Программная работа со схемой.
Отличие от существующей статьи в том, что здесь используется объектная модель.
Исправил и упростил некоторые моменты - результат соответствует схеме, созданной руками.
Добавил возможность рисования произвольных форм для существующих фигур.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Spacer 283 28.09.16 09:47 Сейчас в теме
Интересная статья. А есть ли какие нибудь наработки по динамическому созданию географических схем?
Возможно подобный подход применим и к ним.
2. serg_infostart 295 28.09.16 10:35 Сейчас в теме
(1) Spacer, пока нет. Не было необходимости. Но подозреваю, что этот же подход сработает.
3. rus128 2 28.09.16 11:16 Сейчас в теме
все красиво, кроме:
// Сдесь только для понимания.
Вообще-то правильно писать "Здесь".
4. serg_infostart 295 28.09.16 16:17 Сейчас в теме
(3) rus128, там еще много где косяки по тексту... поправлю в ближайшее время...
5. serg_infostart 295 29.09.16 14:50 Сейчас в теме
Понял, что можно рисовать любые фигуры. Накидал примеров в статью. :)
Конечно, если пользователь будет двигать края фигуры, то карета превратится опять в тыкву наша замечательная фигурка станет тем, чем является по сути.
С типовыми фигурами ничего не произойдет.

А вот и домашнее задание.
Кто нарисует машинку? (добавить кусок кода в процедуру РасставитьТочкиФигуры() с новым Модификатором)
7. Yashazz 2301 09.11.16 12:02 Сейчас в теме
(5) здрасссьте. Я вроде об этом писал, что можно любые фигурки рисовать. Удобнее всего - из фигуры "Условие", она как шестиугольник наиболее гибкая.
В целом - была у меня мысль с json поработать, но в 1С это штука новая, а всё новое в платформе первые года 3 косячит и лучше не связываться) Хотя json лаконичнее, конечно.
9. serg_infostart 295 11.11.16 18:57 Сейчас в теме
(7) Yashazz, приветствую.
В принципе не имеет значения, "сколько"-угольник изначальная фигура, т.к. точек для нее можно добавить очень много (много больше шести).

Про JSON... тут я показал, как оно внутри строится... Но чтобы привести к стандартной 1С-овской модели работы с объектами, конечно, нужно всю эту штуку еще раз упаковать.
Сделать Структуру с переводом реквизитов на русский язык, аккуратно разложить по смысловым объектам, возможно, запихнуть это в обработку, чтобы в одном месте лежало. Вот пока руки никак не дойдут, но надеюсь представить...
ИМХО, должно быть что-то вроде: "СоздатьОбъект() - схема", "ДобавитьЭлемент(Тип)", "Вывести()", "СоединитьЭлементы()",... плюс нетривиальная штука - рисовать соединения, чтобы они сразу штатно отображались (штатно, это так, как если мы покажем как есть, сдвинем элемент туда-сюда руками, линия перерисуется, обходя другие объекты).

Совершенству нет предела...
6. Steelvan 09.11.16 11:29 Сейчас в теме
8. ЧерныйКот 09.11.16 14:30 Сейчас в теме
Делал тоже самое через объектную модель ДокументDOM. Ваш вариант выглядит более простым.
10. sviriduk 31.12.16 00:20 Сейчас в теме
Добрый день!
Добавьте, пожалуйста, в Ваш пример хотя бы одну декорацию.
Очень нужно!
Спасибо.
11. serg_infostart 295 09.01.17 10:35 Сейчас в теме
(10) Добрый день.
Увидел ошибку в выводе Декораций (действительно, не было ни одного примера, поэтому не заметил закравшуюся ошибку).
Код для вывода (у меня весь код в модуле/обработке "ГрафическиеСхемы", поэтому с ним привожу):
Декорация = ГрафическиеСхемы.ПолучитьСтруктуруТипа(0);
ГрафическиеСхемы.ДобавитьЭлемент(Схема,Декорация,10,10);
12. sviriduk 10.01.17 22:49 Сейчас в теме
(11) А в чем заключалась ошибка? Можете прислать исправленный код?
Просто вставка данного кода приводит к тому, что при формировании схемы стала возникать ошибка при вызове метода контекста (ПрочитатьJSON):
СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON,Тип("ГрафическаяСхема")); // Вот он результат!
по причине:
Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.
13. serg_infostart 295 11.01.17 12:12 Сейчас в теме
(12) В этом и была ошибка...
Код в статье уже обновленный.
Исправил следующее:
Если itemType = 0 ИЛИ itemType = 5 ИЛИ itemType = 9 ИЛИ itemType = 10 Тогда // Декорация/Действие/Обработка/ВложенныйПроцесс: Прямоугольник

поменял на
Если itemType = 5 ИЛИ itemType = 9 ИЛИ itemType = 10 Тогда // Действие/Обработка/ВложенныйПроцесс: Прямоугольник

Т.е. у Декорации нет свойства Point.
14. sviriduk 11.01.17 23:10 Сейчас в теме
(13) Спасибо. А что нужно сделать, чтобы у декорации задать наименование (заголовок)?
15. serg_infostart 295 17.01.17 09:34 Сейчас в теме
(14)
Декорация.itemTitle.Добавить(Новый Структура("lang,content","#","Вот он заголовок"));


Обратите внимание: поправил модуль в публикации. itemTitle - всегда Массив (раньше было по условию).
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день