Необходимо упростить и адаптировать js библиотеку SVGnest для работы без веб-интерфейса и SVG-элементов. То есть создание функции, которая на вход принимает массив данных о фигурах (в настоящее время это прямоугольники) и на основе определенных параметров выдает результаты о расположении каждого элемента после всех выполненных итераций.
Например, у нас есть массив прямоугольников, где каждый прямоугольник описывается через ширину, высоту и его id. К массиву прямоугольников, чтобы не было путаницы, где они находятся, к каждому следующему добавляется размер по Х предыдущего. Ссылка на пример: JSFiddle.
К функции svgnest.js которая уже и так принимает параметры из настроек на странице библиотеки необходимо добавить два новых: количество итераций (то есть после скольких остановиться и вернуть массив) и размеры "активного прямоугольника", который ранее выбирался вручную.
var config = {
clipperScale: 10000000,
curveTolerance: 0,
spacing: 0,
rotations: 4,
populationSize: 10,
mutationRate: 10,
useHoles: false,
exploreConcave: false,
// ↓ to add new params ↓
iterations: 100,
mainRectangle: {
width: 1000,
height: 500
}
};
Функция должна проводить расчеты на основе предоставленных данных и параметров и возвращать массив с результатами для каждого прямоугольника, включая его идентификатор, новые координаты X и Y, и угол поворота, например:
[
{id: 1, x: 10.5, y: 20.3, rotate: 0},
{id: 2, x: 15.2, y: 30.4, rotate: 90},
...
]
Также необходимо изменить начальную точку расчета на плоскости размещения элементов. Вместо исходной верхней левой точки начала расчета сортировки элементов теперь должно начинаться с нижнего левого угла и происходить слева направо, то есть расчет по ширине и снизу вверх.

Все необходимые для обработки js файлы должны быть объединены в один файл, например, svgNewNest.js, для упрощения интеграции и использования функции. То что не нужно для расчетов добавлять не нужно, потому что здесь уже нет взаимодействия с SVG.
<script src="util/pathsegpolyfill.js"></script> не нужно добавлять
<script src="util/matrix.js"></script> <!-- import to svgnest.js -->
<script src="util/domparser.js"></script> не нужно добавлять
<script src="util/clipper.js"></script> <!-- import to svgnest.js -->
<script src="util/parallel.js"></script>
<script src="util/geometryutil.js"></script> <!-- import to svgnest.js -->
<script src="util/placementworker.js"></script> <!-- import to svgnest.js -->
<script src="svgparser.js"></script> не нужно добавлять
<script src="svgnest.js"></script> <!-- это основная функция -->
<script src="util/filesaver.js"></script> не нужно добавлять