2013-07-06 4 views
1

간단한 질문이 있습니다.Java Affine 변환

paint/paintComponent 컨텍스트 외부에서 아핀 변환을 수행 할 수 있습니까? 예를 들어, GeneralPath로 만들어진 Shape를 생성하고 45도 회전시키고 자한다고 가정 해 봅시다. 해당 개체를 만든 다음 개체를 만드는 대신 클래스 생성자에서 항상 회전 한 다음 paint/paintComponent 메서드에서 회전 할 수 있습니까?

대단히 감사합니다.


UPDATE는 정보들 주셔서 대단히 감사합니다. 오늘은 제안대로 간단한 테스트를 만들었습니다.

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D)g; 
    g2.setColor(new Color(230, 230, 230)); 
    g2.fill(enne.getNuvola());//enne.getNuvola(): code from an omitted class. returns a Shape of a cloud 
    g2.setColor(new Color(20, 20, 20)); 

    /* 
    AffineTransform t = AffineTransform.getTranslateInstance(400,400); 
    g2.transform(t);   
    */ 

    g2.fill(rock.getRocket()); 

}//paintComponent 

를이는 아핀 GeneralPath의의 클래스 생성자 내부 변환입니다

public class Rocket { 

GeneralPath rocket; 

public Rocket(){ 

    rocket = new GeneralPath(); 
    rocket.moveTo(10,10); 
    rocket.lineTo(15,15); 
    rocket.lineTo(15,50); 
    rocket.lineTo(5,50); 
    rocket.lineTo(5,15); 
    rocket.lineTo(10,10); 
    rocket.closePath(); 

    AffineTransform t = AffineTransform.getTranslateInstance(400,400); 
    rocket.transform(t); 


}//Rocket Costruttore 

public GeneralPath getRocket(){ 
    return this.rocket; 
} 

}//Rocket 

하지만 지금은 다른 질문이 있습니다 :

가의 paintComponent 방법 내부 변환 아핀 함께 댓글을 달았습니다 :

나는 paintCo를 위해 제안 된 것처럼 Rocket 클래스에서도 현재의 trasform의 현재 상태를 보호해야합니까? java transforming tutorial의 mponent 메소드?

  1. 현재 변환을 가져 오려면 getTransform 메소드를 사용하십시오.
  2. transform, translate, scale, shear 또는 rotate를 사용하여 변환을 연결합니다.
  3. 렌더링을 수행하십시오.
  4. setTransform 메소드를 사용하여 원래의 변환을 복원하십시오. 다시

, 답

+1

예, 가능합니다. –

+1

@AndrewThompson이 말하는 두 번째. 정말로 가능합니다. 시도 해보지 않으시겠습니까? –

+1

특히 교육적인 운동입니다. 효과를 보려면'Shape'의'PathIterator'를 사용하십시오. – trashgod

답변

1

:-) 주셔서 대단히 감사하는 그래픽 객체가 다른 도면의 시스템에 의해 재사용 될 수 있기 때문에 아니,은, Graphics 객체의 상태를 복원하는 재설정해야 변환 . Graphics 객체없이 변환을 수행하면 걱정할 필요가 없습니다.

낡은 질문을 편집하여 새로운 질문을해서는 안된다는 점에 유의하십시오. 혼동을 야기 할 수 있습니다. 완전히 새로운 질문을 게시해야합니다 (이전 질문을 연결하는 등).

+0

감사합니다. 당신이 아주 많이. 편집/응답 팁을 주셔서 감사합니다. – Emanuele