Path2D 클래스

Path2D 클래스

Path2D 클래스는 임의의 기하 경로를 나타내는 단순하면서도 유연한 도형을 제공해요. PathIterator 인터페이스로 반복할 수 있는 경로를 모든 세그먼트 타입과 윈딩 규칙을 포함해 완전히 표현할 수 있고, Shape 인터페이스의 모든 기본 히트 테스트 메서드를 구현해요.

출처: Java API Reference

본문

부동소수점 정밀도로 표현·사용할 수 있는 데이터를 다룰 때는 Path2D.Float을, double 정밀도의 정확성이나 범위가 필요한 데이터는 Path2D.Double을 사용해요.

public abstract sealed class Path2D
extends Object
implements Shape, Cloneable
permits Path2D.Double, Path2D.Float

Path2D는 기하 경로의 기본 구성·관리와 위 인터페이스 구현에 정확히 필요한 기능을 제공해요. 닫힌 도형의 내부를 단순 히트 테스트를 넘어 조작하는 게 유용하다면, Area 클래스가 닫힌 도형에 특화된 추가 기능을 제공해요.

두 클래스 모두 명목상 Shape 인터페이스를 구현하지만 목적이 달라요. Path2D는 주로 경로 세그먼트로 형성된 궤적(trajectory)을 다루고, Area는 2D 기하 공간의 닫힌 영역 해석·조작에 더 초점을 맞춰요. 이 둘을 함께 쓰면 기하 도형의 두 가지 유용한 관점을 얻을 수 있어요.

좌표 추가 메서드

  • moveTo(double, double) — 새 하위 경로의 시작점을 정해요.
  • lineTo(double, double) — 직선 세그먼트를 추가해요.
  • quadTo(...) — 2차 베지어 곡선을 추가해요.
  • curveTo(...) — 3차 베지어 곡선을 추가해요.
  • closePath() — 하위 경로를 닫아요.
  • append(Shape, boolean) — 다른 도형을 추가해요.
  • getPathIterator(AffineTransform) — 경로 반복자를 반환해요.
  • getWindingRule() / setWindingRule(int) — 윈딩 규칙(WIND_EVEN_ODD, WIND_NON_ZERO)을 조회·설정해요.
  • getBounds2D() — 경계 사각형을 반환해요.

윈딩 규칙

윈딩 규칙은 경로의 어느 영역이 안쪽(내부)인지 결정하는 규칙이에요. WIND_EVEN_ODD(짝수-홀수)와 WIND_NON_ZERO(0이 아닌 값) 두 가지가 있어요. 자세한 설명은 PathIterator 인터페이스 문서를 참고하세요.

사용 예

Path2D path = new Path2D.Double();
path.moveTo(0, 0);
path.lineTo(100, 0);
path.quadTo(150, 50, 100, 100);
path.closePath();
Graphics2D g2d = ...;
g2d.fill(path);

더 알아보기