Рисование линий и закрашивание областей в табличном документе 1С

10.03.25

Разработка - Математика и алгоритмы

Графические алгоритмы рисования линий и закрашивания областей в 1С. Для одной задачи мне понадобилось соединить точки прямой линией, проблема в том, что эта линия не всегда была горизонтальной. Есть такой алгоритм Брезенхема - один из старейших алгоритмов в машинной графике. Он довольно простой, но интересный. Интересное в нем - это то, как он избавляется от операций с плавающей точкой и переходит от них к полностью целочисленным. Я его использовал, но мои линии почему-то получались какими-то кривыми. Изгибались как-то ближе к концу линии. Я решил создать отдельную обработку и интерактивно все это отладить и разобраться.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Рисование линий и закрашивание областей:
.epf 13,32Kb
13
13 Скачать бесплатно

https://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма

Ничего сложного, сделал, потестировал, действительно были кривые линии вместо прямых. Ошибку нашел быстро, неправильно компенсировал накапливающуюся погрешность.

Но суть не в этом. Когда я хаотично разлиновал экран в ходе тестов, мне прямо захотелось закрасить получившиеяся замкнутые области. Как команда Fill в графических редакторах. Раз захотелось - будем делать )))

Конечно, сразу напрашивается рекурсия:

1. Определяем исходный цвет точки.

2. Закрашиваем точку новым цветом. 

3. Проверяем 8 соседних точек.

4. Если они исходного цвета, повторяем для них с п.2, иначе выход из рекурсии.

5. Конец.

Каждая процедура рекурсивно вызовет саму себя до 8 раз. Это очень много - стек очень быстро переполнится. А что самое обидное, эти вызовы по большей части будут ложными, некоторые точки мы будем пытыться раскрасить много раз. Надо как-то сократить количество вызовов и, по возможности, не проверять на перекрашиваемость точки, которые уже были проверены.

Я начал с простого. Можно легко начертить горизонтальную линию от точки клика до пересечения с границей области, например горизонтальная линия на рисунке.

 

 

Потом мы формируем набор ключевых точек вертикально от точки клика до границ (вертикальная сине-зеленая линия). А теперь от каждой ключевой точки тоже нарисуем горизонтальную линию.

Просто. Но этого мало. Это будет работать только с выпуклыми областями. Если область имеет вогнутости или какие-нибудь пилообразные грани, алгоритм их закрасит не полностью, он просто остановится на границах сине-зеленой линии, и будет считать свою работу законченной:

 

 

Тогда мы поступаем так. В тот момент, когда мы рисуем очередную горизонталь, проверяем, не проходит ли она вплотную к граничному элементу. Вот например, на рисунке, мы рисуем линию вправо от очередной узловой (ключевой) точки (синяя стрелка) и видим, что сверху к ней вплотную примыкает граница (красная стрелка):

 

 

В данном случае, мы формируем новый набор ключевых точек, расположенных вертикально. От которого в дальнейшем снова рисуем горизонтальные линии заливки. Так же, по аналогии, поступаем, когда рисуем линию влево, и когда граничная область у нас снизу.

Вроде все просто, но отлаживать пришлось долго. 

Кстати, в детстве, я помню, пытался написать игру Xonix, и не смог - не справился как раз с заливкой.

Теперь можно вернуться к детским опытам.

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия КОРП, редакция 3.0, релизы 3.0.171.20

Алгоритм Брезенхема Рисование линий Закрашивание областей

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55767    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64151    45    60    

83

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    20101    28    6    

44

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    8421    kalyaka    6    

34

WEB-интеграция Работа с интерфейсом Пользователь Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для конфигурации 1С:Розница 2.3.

3600 руб.

29.04.2022    14492    2    10    

13

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    10366    1    2    

6

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    11805    AtamanovYS    19    

151
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kser87 2469 10.03.25 11:40 Сейчас в теме
Интересно, как это технически реализовано?
2. randomus 295 10.03.25 12:03 Сейчас в теме
(1) Код же открыт. Но если интересно, позже могу в статью выложить с комментариями
3. kser87 2469 10.03.25 14:07 Сейчас в теме
Оставьте свое сообщение