2015-02-09 69 views
0

爲什麼第一個和第三個矩形不出現在下面的示例中?無法在Piccolo2D中拉伸零矩形?

看起來像長方形是一旦它有零大小被打破。

package tests.piccolo; 

import org.piccolo2d.extras.PFrame; 
import org.piccolo2d.nodes.PPath; 

public class Try_EmptyRectangle { 

    public static void main(String[] args) { 

     new PFrame() { 

      @Override 
      public void initialize() { 

       PPath rect1 = PPath.createRectangle(0, 0, 0, 0); 
       PPath rect2 = PPath.createRectangle(0, 100, 1, 1); 
       PPath rect3 = PPath.createRectangle(0, 200, 1, 1); 

       getCanvas().getLayer().addChild(rect1); 
       getCanvas().getLayer().addChild(rect2); 


       rect1.setWidth(50); 
       rect1.setHeight(50); 

       rect2.setWidth(50); 
       rect2.setHeight(50); 

       rect3.setWidth(0); 
       rect3.setHeight(0); 
       rect3.setWidth(50); 
       rect3.setHeight(50); 


      } 



     }; 

    } 

} 

回答

1

這看起來像一個錯誤。 PPath內部包裝GeneralPathPPath.createRectangle(0, 0, 0, 0)GeneralPath初始化爲零大小的矩形形狀。然後更改PPath寬度/高度觸發邊界更改。 PPath覆蓋internalUpdateBounds()以縮放路徑以適合指定的邊界。似乎有一個問題零大小的路徑:

protected void internalUpdateBounds(final double x, final double y, final double width, final double height) { 
    final Rectangle2D pathBounds = path.getBounds2D(); 
    ... 
    final double scaleX; 
    if (adjustedWidth == 0 || pathBounds.getWidth() == 0) { 
      scaleX = 1; 
    } 
    ... 
    final double scaleY; 
    if (adjustedHeight == 0 || pathBounds.getHeight() == 0) { 
     scaleY = 1; 
    } 
    ... 
    TEMP_TRANSFORM.scale(scaleX, scaleY); 
    ... 
    path.transform(TEMP_TRANSFORM); 
} 

的scaleX的scaleY總是1.所以路徑實際上從不進行縮放,並保持零大小。