Skip to main content

Software Requirements Specification (SRS)

1. Purpose

본 문서는 ged 모듈의 Software Requirements Specification을 정의한다.

ged 모듈은 에디터 기능을 제공하는 라이브러리이며 다음 구성요소를 포함한다.

  • Editor
  • EditorState
  • Tool system
  • Command system
  • UndoStack
  • UI root 및 panel 구조

본 문서는 실제 코드에 정의된 타입과 클래스만을 기준으로 작성한다.


2. Scope

ged 모듈은 다음 기능을 제공한다.

  • Editor 객체 제공
  • Tool 기반 사용자 조작 처리
  • Command 기반 작업 실행
  • Undo / Redo 관리
  • Editor 상태 관리
  • UI 루트 및 패널 구조

본 모듈은 다음 타입을 사용한다.

gcore::Event


3. Module Structure

ged/ ├─ CMakeLists.txt ├─ ged.hpp │ ├─ editor/ │ ├─ editor.hpp │ ├─ editor.cpp │ └─ editor_state.hpp │ ├─ ui/ │ ├─ ui_root.hpp │ ├─ dockspace.hpp │ │ │ └─ panels/ │ ├─ viewport_panel.hpp │ ├─ outliner_panel.hpp │ └─ properties_panel.hpp │ ├─ tools/ │ ├─ tool.hpp │ ├─ select_tool.hpp │ ├─ select_tool.cpp │ ├─ transform_tool.hpp │ └─ transform_tool.cpp │ ├─ command/ │ ├─ command.hpp │ ├─ undo_stack.hpp │ ├─ undo_stack.cpp │ │ │ ├─ select_command.hpp │ └─ transform_command.hpp │ └─ tests/ └─ smoke.cpp


4. Public API

외부 모듈은 다음 방식으로 ged 모듈을 사용한다.

#include <ged/ged.hpp>

ged::Editor editor;

ged.hpp는 외부에서 사용하는 단일 엔트리 헤더이다.


5. Editor

Type

class Editor

Responsibility

Editor는 에디터 시스템의 중심 객체이다.

Editor는 다음 기능을 수행한다.

  • Tool 관리
  • 이벤트 라우팅
  • UndoStack 관리
  • EditorState 관리

Tool 설정

void set_tool(EditorState::ToolMode mode);

현재 활성 Tool을 설정한다.


Event 처리

void on_event(const gcore::Event& e);

Editor는 이벤트를 활성 Tool로 전달한다.


6. EditorState

Type

struct EditorState

Responsibility

EditorState는 에디터 상태 데이터를 저장한다.

저장되는 데이터

  • selection
  • active_object
  • tool_mode

Fields

std::unordered_set<ObjectId> selection;

선택된 객체 집합

ObjectId active_object;

현재 활성 객체

ToolMode tool_mode;

현재 활성 Tool


7. Tool System

Tool 시스템은 사용자 입력을 처리한다.

Base Type

class Tool

Function

virtual void on_event(const gcore::Event& e) = 0;


Tool Implementations

다음 Tool 구현이 존재한다.

SelectTool TransformTool


8. Command System

Command 시스템은 작업 실행과 Undo/Redo를 지원한다.

Base Type

class Command

Required Functions

virtual void apply() = 0; virtual void revert() = 0;


Command Implementations

다음 Command가 정의되어 있다.

SelectCommand TransformCommand


9. UndoStack

UndoStack은 Command 히스토리를 관리한다.

Type

class UndoStack

Functions

void push(std::unique_ptr<Command> cmd); void undo(); void redo(); void clear();


UndoStack Behaviour

Command push 시 다음 동작이 수행된다.

cmd->apply(); undo_.push_back(std::move(cmd));

Undo 동작

cmd->revert(); redo_.push_back(std::move(cmd));

Redo 동작

cmd->apply(); undo_.push_back(std::move(cmd));


10. UI System

UI 시스템은 에디터 패널 구조를 정의한다.

Root

UiRoot

Layout

Dockspace

Panels

다음 패널이 정의되어 있다.

ViewportPanel OutlinerPanel PropertiesPanel


11. Event Routing

Editor는 이벤트를 Tool로 전달한다. void Editor::on_event(const gcore::Event& e) { if (active_tool_) { active_tool_->on_event(e); } }

12. Test

tests/smoke.cpp는 기본 동작 검증을 수행한다.

테스트 항목

  • Editor 생성
  • SelectCommand 실행
  • Undo 동작
  • Redo 동작
  • Tool 동작
  • TransformTool 실행