簡體   English   中英

java.awt.geom.Area減法后返回多個部分?

[英]java.awt.geom.Area return multiple parts after subtraction?

我想使用Java的Area類(java.awt.geom.Area)在各種多邊形上執行減法和交集操作。

在許多這些情況下,減法操作可以將源區域分成兩部分。 在這些情況下,我需要返回兩個Area對象,每個對象用於由減法操作創建的每個結果連續部分。

在閱讀了Area類的JavaDocs之后,我似乎沒有找到任何方法來返回Area的連續部分。 事實上,我甚至不確定Area如何處理這種情況。

如何通過Area的減法或交叉方法獲得所有生成的連續區域?

謝謝,-Cody

正如我在評論中所說。 迭代輪廓路徑,獲得繞組並識別段起點。 當您點擊PathIterator.SEG_MOVETO構造一個java.awt.Path2D.Float並向其添加點,直到您點擊PathIterator.SEG_CLOSE

這是我為你演示的一個例子

   public static List<Area> getAreas(Area area) {
    PathIterator iter = area.getPathIterator(null);
    List<Area> areas = new ArrayList<Area>();
    Path2D.Float poly = new Path2D.Float();
    Point2D.Float start = null;
    while(!iter.isDone()) {
      float point[] = new float[2]; //x,y
      int type = iter.currentSegment(point); 
      if(type == PathIterator.SEG_MOVETO) {
           poly.moveTo(point[0], point[1]);
      } else if(type == PathIterator.SEG_CLOSE) {
           areas.add(new Area(poly));
           poly.reset();
      } else {
        poly.lineTo(point[0],point[1]);
      } 
      iter.next();
    }
    return areas;
   }

   public static void main(String[] args) {
    Area a = new Area(new Polygon(new int[]{0,1,2}, new int[]{2,0,2}, 3));
    Area b = new Area(new Polygon(new int[]{0,2,4}, new int[]{0,2,0}, 3));
    b.subtract(a);

    for(Area ar : getAreas(b)) {
     PathIterator it = ar.getPathIterator(null);
     System.out.println("New Area");
     while(!it.isDone()) {
      float vals[] = new float[2];
      int type = it.currentSegment(vals);
      System.out.print(" " + "[" + vals[0] + "," + vals[1] +"]");
      it.next();
     }
     System.out.println();
    }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM