Отсечение векторных изображений в JAVA - PullRequest
0 голосов
/ 18 декабря 2018

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

В этом проекте мне нужно создать файлы с блоками (например, в форме квадрата),заполнены векторными линиями, которые вращаются в зависимости от конкретных параметров.Для этого я использую Vectorgraphics2d (http://trac.erichseifert.de/vectorgraphics2d/)

. Часть кода выглядит следующим образом:

1) Создание строки (в массиве)

Graphics2D vg2d = new VectorGraphics2D();
Line2D.Double[] numberOfLinesGroup = new Line2D.Double[numberOfLines];              

                for (int x = 0; x < numberOfLines ; x++) {


                    double pointPX = xPosition-blurrWidth;
                    double pointPY = yPosition + (x * heightDistance);
                    double pointNX = xPosition + (blurrWidth*2);
                    double pointNY = yPosition + (x * heightDistance);

                    numberOfLinesGroup[x] = new  Line2D.Double( pointPX, pointPY, pointNX, pointNY);
                }

2) Поворот всей картинки:

vg2d.rotate(angle, xPosition + (blurrWidth / 2), yPosition + (blurrHeight / 2));

3) Отсечение с заданной формой

Rectangle2D rect = new Rectangle2D.Float(); 
rect.setRect(xPosition, yPosition, blurrWidth, blurrHeight);
vg2d.setClip(rect);

4) Рисование конечной картинки

for (int y = 0; y < numberOfLines; y++) {
                    vg2d.draw(numberOfLinesGroup[y]);
                }

Проблема:

Визуально файл выглядит нормально: Результирующее изображение

Но когда я помещаю его в чпу или любой другой вектор с помощью программного обеспечения (CorelDraw, Illustrator и т. Д.), Он все равновидит эти линии за пределами области отсечения Внешний вид из векторного программного обеспечения

Есть ли способ вырезать этих линий, чтобы они существовали только в области формы?Может быть, другие библиотеки, которые я не знаю, будут поддерживать такую ​​функцию?

Другой вопрос, когда я открываю файл с помощью Adobe Reader, он кричит "BBox is invalid".Любая идея, что это значит?

Был бы признателен за вашу помощь!

ps Я полагаю, что было бы возможно создать код, который рассчитывает линейную функцию вышеупомянутой линии, проверьтепересечение с формой и создать новую линию, основываясь на этих найденных точках.Это, вероятно, подойдет для простых форм, таких как квадрат или круг, но для более сложных - я так не думаю.Тем не менее, такая математика для меня слишком большая:)

...