2015-04-17 27 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

GeneralPath會把你這些細分的getPathIterator()方法。

1

PathIterator,你可以從任何Shape對象中獲取。您的gv.getOutline()返回Shape

迭代一個形狀線段和打印出結果的下面有一個簡單的例子。

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())