Anchors 그리기

yeezze·2022년 6월 10일
0

1. Anchors

정의

모든 도형에는 anchor가 존재한다. 도형에 외접하는 사각형에 앵커점들을 그린다. 각 shape들에서 getBound 메소드를 활용해서 외접하는 사각형을 알려주고 Anchors 클래스에서 받은 사각형을 바탕으로 앵커를 그리도록 프로그램을 설계했다.

anchors 그리는 방법을 일반화할 수 있을까?

모든 도형의 anchor는 9개의 점으로 구성되어 있다. anchors 그리는 방법을 일반화해서 생각해보면 상하좌우 대칭 도형은 대부분 2개의 점을 이용하여 그릴 수 있다. x, y 두 좌표를 width, height 값을 활용하면 anchor를 그릴 수 있는 것이다. 왼쪽 위에 모서리 꼭짓점을 원점으로 두고 해당 점에서 width, height를 활용하여 더하면 나머지 점들을 그릴 수 있다. 도형의 둥근 정도가 수정될 수 있는 도형은 노란색 점까지 3개가 필요하다.

해당 점들을 Anchors 클래스 안에 enum으로 생성한다. 9개의 동그란 점마다 좌표를 구하는 방법이 다르기 때문에 한 배열 속에 넣는 것이 아니라 enum으로 별도 생성했다.

DrawingPanel의 다양한 종류의 상태들

  1. Mouse pointer
    1. Idle
    2. Move
    3. Resize : 8개
    4. Rotate
  2. Shape
    1. selected

Anchors는 TShape 안에 있기 때문에 드로잉패널 입장에서 TShape한테 물어봐야한다. Anchors가 선택되어서 활성화 되어 있는 상태일 때만 anchor를 그려주면 된다. 그렇기 때문에 selected 됐는지 여부를 TShape가 가지고 있어야한다.

상태를 물어보고 전달하는 체계가 패널 → Shape (bSelected) → Anchors 순서대로 진행된다.

마우스 포인터가 anchors 점 위에 있는 경우, 도형 위에 있는 경우, 도형 밖에 있는 경우로 나뉘어서 생각을 해보아야 한다.

profile
백엔드 개발자 😊

0개의 댓글