Я работаю над утилитой для нарезки сетки для 3D-печати. В общем случае он должен нарезать 3d-сетчатую модель на 2d-фигуры (несколько полигонов, возможно с отверстиями) и заполнить их дорожками определенной толщины с использованием определенного шаблона. Эти пути будут использоваться для генерации команд gcode для прошивки 3D-принтера.Алгоритм заполнения многоугольника
Существуют различные инструменты с открытым исходным кодом с одинаковыми целями, написанные на python и perl. Но моя цель - понять рабочий процесс slicer и написать собственный инструмент на C или C++.
До сих пор я могу получить контур ломтика и теперь собираюсь заполнить их дорожками. Проблема в том, что я не нашел эффективного алгоритма для этого. Схематический пример заполнения:
Может ли кто-нибудь советовать, как создавать эти пути заполнения? Благодарю.
В настоящее время я использую следующий алгоритм:
- Найти ограничительную рамку формы
- Split Bb вертикально с линиями (количество строк = bb.width/path.thickness)
- поиск точек пересечения для каждой формы и линии (должно быть две точки на линии)
- построить сегменты из этих точек со смещением от границы
- Добавить сегменты, которые соединяют оригинальный сегменты вместе образуют линию полосы
- Мы готовы генерировать GCode или нарисовать путь
Это простой и быстрый алгоритм, но он делает не работают для вогнутых полигонов и многоугольников с отверстиями. Также он использует только один указанный шаблон.
Обе точки на рисунке - синие. Должен ли один из них быть зеленым? – ElKamina
Кроме того, каковы ограничения на путь заполнения? – ElKamina
Обратите внимание, что существует два разных пути, и каждый из них имеет начальную и конечную точки. – san