Итак, разработка собственного офсета подходит к концу!!!
Из недостатков:
1. Медленная работа. Но в нашем случае риалтайм не обязателен, поэтому на данный момент можно оставить как есть. Возможно, потом напишем отдельный модуль на си который будет делать офсет заданной кривой гораздо быстрее.
2. Пока не работает с самопересекающимися контурами. Как вариант решения можно разбивать контур в местах самопересечения. Эта задача не совсем тривиальна и поэтому пока не реализована. Возможны случаи, когда кривую не получится разбить на несколько не пересекающихся контуров.
Преимущества по сравнению с существующим:
1. Настраиваемая точность. Хотя на момент тестирования и разработки точность выставляется 0.5, получившийся офсет гораздо точнее инкскейповского офсета.
2. Отсутствие артефактов. Этим обуславливается возросшее время вычисления. Для каждой точки офсета вычисляется расстояние до начальной кривой. Т.к. эта задача алгебраически не решается, то приходится искать расстояние вычислительными методами, которые требуют время.
3. Возможность использовать офсет внутри gcodetools! Теперь мы сможем создавать фаски всего одним нажатием клавиши, также это позволит автоматически делать чистовой проход и т.д.
Что необходимо доделать:
1. Ориентация кривой и ее субконтуров. Необходимо для правильного определения направления офсета.
2. Автоматическое вычисление радиуса офсета.
3. Офсет самопересекающихся кривых.