вторник, 10 марта 2015 г.

Автоматическая генерация раскладок.

История этой функции началась за долго до создания проекта Валентина. Во времена моей бакалаврськой работы в университете. Тогда она еще называлась "Раскрой листового проката на различные заготовки сложной формы". Не буду вдаваться в подробности той работы, скажу только, что работу я защитил очень успешно. 

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

Но мечту я не оставил и в один прекрасный день, все обдумав, решил реализовать старый алгоритм здесь. Да и возможности ручной версии начали не удовлетворять пользователей и они все чаще с разных сторон критиковали этот "механизм". Это в конец меня добило и я решился.

И вот по происшествию 23 дней, а имен столько мне понадобилось, да, я замерял, интеграция была закончена. Стоит сказать что мне пришлось пройти несколько кругов ада моего старого кода и отладки сего чуда инженерной мысли. Результат на видео ниже.

Что же может это алгоритм? Можно сразу сказать чего он не может. Сотворить чуда и разложить идеально. Он "слепой" и видит только на один шаг - используется эвристика. Познакомится с оригинальной версией можно в книге Ф. В. Бабаев. "Оптимальный раскрой материалов с помощью ЭВМ". Распечатка нужной главы до сих пор хранится у меня.

Так все же что он может? Кроме того что раскладка создается автоматически, появилась возможность задавать форматы листов бумаги (А0 - А4) ну и конечно произвольный. На видео показана эта возможность. 2 листа А4 и один А3. Так же оставлена возможность сохранять страницы в поддерживаемые форматы. Особенно рекомендую SVG.

Для владельцев многоядерных машин у меня есть хорошая новость. Эта реализация использует все ядра системы. Раскладка в таком случаи будет проходить максимально быстро. Присутствует автоматическое определение оптимального количества потоков для машины.

Что здесь такого спросите вы? Ну, приятный бонус, а с другой стороны праздная необходимость. Поскольку в некоторых случаях расчет может длится очень долгое время. И все таки хотелось бы использовать все ресурсы нашего не дешевого процессора, а не просиживать штаны зря.

Комментариев нет:

Отправить комментарий