Конечная цель этого кода — убедиться, что заказчик определяет фигуры, которые могут быть обработаны нашими … машинами. Чтобы сделать это, мы смещаем указанную форму внутрь на радиус бита, а затем возвращаем назад на ту же величину, округляя, таким образом, любые части, которые были бы слишком тонкими, чтобы в них поместиться бит. Для смещения многоугольника мы используем Ангуса Джонсона клипер библиотека, версия 5.1.6 (c ++).
Но, как видно на картинке, это приводит к неожиданным формам. На рисунке я сместил исходную форму (зеленую, в основном покрытую более поздним рисунком) с помощью -radius ClipperLib::OffsetPolygon
чтобы получить желтую форму, а затем смещение по радиусу, чтобы получить красную форму.
Теоретически, это должно привести к тому, что красная форма будет полностью соответствовать зеленой форме для случая, указанного в ссылке.
Что может пойти не так, чтобы добиться вышеуказанного результата?
У меня были эти артефакты также, и в моем случае это было решено CleanPolygons () перед каждой смещенной операцией. Проблема была из-за микро-самопересечений и / или дублирующих точек, которые можно устранить с помощью упомянутой функции очистки.
Других решений пока нет …