Geometry - 기하학 시스템

~25개 헤더 파일 - 모든 CAD 객체의 기하학적 기반

개요

기하학 시스템은 imengine의 모든 CAD 객체가 사용하는 도형, 텍스트, 변환의 기반입니다. c_geo_item이 최상위 기반 클래스이며, c_view_item을 상속합니다.

c_view_item
c_geo_item
위치, 바운딩박스, 변환, 히트테스트, 직렬화
c_sch_item
c_board_item
c_geo_text
c_geo_group

도형 클래스

도형클래스설명
Circlec_shape_circle원. 중심점과 반지름으로 정의됩니다.
Ellipsec_shape_ellipse타원. 중심, 장축, 단축, 회전각으로 정의됩니다.
Arcc_shape_arc원호. CW(시계방향) 각도 시스템을 사용하며, 3점(start, mid, end)으로 생성합니다.
Segmentc_seg선분. 시작점과 끝점으로 정의되는 직선 세그먼트입니다.
Linec_shape_line선. 폭(width)을 가진 선으로, 배선이나 도형 외곽선에 사용됩니다.
Polygonc_shape_polygon다각형. 꼭짓점 목록으로 정의되는 닫힌 영역입니다.
RoundRectc_shape_roundrect둥근 모서리 사각형. 모서리 반지름을 지정할 수 있습니다.
PolySetc_shape_polyset다각형 집합. Boolean 연산(합집합, 차집합)을 지원합니다.
LineChainc_shape_linechain연결된 선분 체인. 열린/닫힌 경로 모두 표현 가능합니다.

c_geo_text - 텍스트 요소

텍스트는 CAD에서 심볼 이름, 핀 번호, 치수 값 등에 광범위하게 사용됩니다. c_geo_text는 폰트, 정렬, 크기, 회전 등 텍스트 렌더링에 필요한 모든 속성을 관리합니다.

폰트 속성

  • 폰트 크기 (height/width)
  • 볼드, 이탤릭
  • 수평 정렬 (Left/Center/Right)
  • 수직 정렬 (Top/Center/Bottom)

변환 속성

  • 위치 (x, y)
  • 회전각 (degrees)
  • 미러링 (flip)
  • 가시성 (visible/hidden)

c_geo_group - 그룹화

여러 기하학 요소를 하나의 그룹으로 묶어 일괄 이동, 회전, 복사 등의 변환을 적용할 수 있습니다. 그룹은 중첩(nested group)이 가능합니다.

Arc 규칙

핵심 규칙: Arc 생성은 반드시 SetArc3p(startPt, midPt, endPt)를 사용합니다. SetArcCSE는 내부 swap 문제로 사용 금지입니다.
항목규칙
각도 방향CW (시계방향). engineDeg = 360 - mathDeg
Y축반전: y = cy - r * sin(rad(deg))
끝 각도GetEndAngleDegree()ea < sa일 수 있음. effectiveEa = ea < sa ? ea + 360 : ea
생성 방법SetArc3p(start, mid, end) 필수. SetArcCSE 금지

Intersection - 교차점 계산

lgeo2d 라이브러리는 기하학 요소 간의 교차점을 계산합니다. 오버로드는 Line < Circle < Arc 순서만 존재합니다.

// 올바른 호출 순서
intersect(Line, Circle);   // OK - Line < Circle
intersect(Line, Arc);      // OK - Line < Arc
intersect(Circle, Arc);    // OK - Circle < Arc

// 잘못된 호출 순서
intersect(Circle, Line);   // ERROR - 오버로드 없음
intersect(Arc, Line);      // ERROR - 오버로드 없음

HV Snaplines

수평(Horizontal)/수직(Vertical) 스냅라인은 CAD 편집 시 요소 정렬을 돕는 시각적 가이드입니다. 마우스 커서가 다른 요소와 수평 또는 수직으로 정렬될 때 자동으로 표시됩니다.

Control Points & Edit Constraints

각 도형은 편집을 위한 컨트롤 포인트를 노출합니다. 사각형의 모서리, 원의 중심과 반지름 핸들, Arc의 시작/중간/끝점 등이 여기에 해당합니다. 편집 제약조건(constraints)은 특정 방향으로만 이동, 각도 스냅 등을 정의합니다.

BGRA Color

imengine은 BGRA 포맷의 32비트 정수로 색상을 표현합니다.

// BGRA 비트 레이아웃
A(31:24) | R(23:16) | G(15:8) | B(7:0)

// 변환 함수 (c_color_utils.h)
bgraToRGBA(uint32_t bgra);  // BGRA → RGBA
rgbaToBGRA(uint32_t rgba);  // RGBA → BGRA
// 비트 연산 하드코딩 금지 - 반드시 변환 함수 사용

Named Color 시스템

Named Color는 [이름] 형식으로 표현됩니다 (예: [JUNCTION]). Color Table 변경 시 캐시된 Named Color를 재취득해야 합니다.
동작규칙
Lua 저장"bgraInt [이름]" 전체 저장
복원[이름] 추출 후 GetNamedColorStr로 현재 색상 재취득 (저장값 직접 사용 금지 - stale)
Color Table 변경EVT_COLORTABLE_CHANGED 수신 시 캐시된 Named Color 재취득 + RequestRepaint()