2015-04-17 1 views
0

Для данного символа, шрифта и размера я хочу найти сегменты, составляющие глиф.Как получить сегменты, составляющие общий путь?

String text = "C"; 
    Font f = new Font("Serif", Font.PLAIN, 12); 
    FontRenderContext frc = new FontRenderContext(null, true, true); 
    GlyphVector gv = f.createGlyphVector(frc, 
    GeneralPath gp = (GeneralPath) gv.getOutline(); 

Итак, теперь у меня есть общий путь, но я хочу, чтобы linetos и curvetos делали этот путь. Я не могу найти способ, который получит это, поэтому я верю, что я ошибаюсь. Что я могу сделать здесь?

+1

Почему? Что вы хотите делать с этими сегментами? Если мы знаем, что это за требование (а не ваше решение), мы могли бы предложить лучший подход. – camickr

+0

Моя цель - взять символ и превратить его в формат dxf, состоящий из линий/полилиний (без кривых). Благодаря camickr и ug_ за помощь. Я снова в пути – DirtyProgrammer

ответ

2

getPathIterator() метод GeneralPath Вы будете использовать эти сегменты.

1

См. PathIterator, который вы можете получить от любого объекта Shape. Ваш gv.getOutline() возвращает Shape.

Heres простой пример итерации по сегментам линий формы и распечатка результата.

public void printShapeSegments(Shape shape) { 
    PathIterator it = shape.getPathIterator(new AffineTransform()); 

    double [] coords = new double[6]; 
    int currSegment = -1; 
    while(!it.isDone()) { 
     currSegment = it.currentSegment(coords); 
     if(currSegment == PathIterator.SEG_CLOSE) { 
      System.out.println("Close"); 
     } else if(currSegment == PathIterator.SEG_CUBICTO) { 
      System.out.println("Cubic"); 
     } else if(currSegment == PathIterator.SEG_LINETO) { 
      System.out.println("Line"); 
     } else if(currSegment == PathIterator.SEG_MOVETO) { 
      System.out.println("Move"); 
     } else if(currSegment == PathIterator.SEG_QUADTO) { 
      System.out.println("Quad"); 
     } 
     System.out.println(Arrays.toString(coords)); 
     it.next(); 
    } 
} 

В своем коде вы можете использовать это как printShapeSegments(gv.getOutline())

Смежные вопросы