Skip to main content

cumulus3d_align/
error.rs

1//! 정렬 오류. 실패를 조용히 넘기지 않도록 모든 실패 조건을 구분한다.
2
3/// align 크레이트 오류.
4#[derive(Debug, thiserror::Error)]
5pub enum AlignError {
6    /// core 크레이트 오류(입출력·자료 구조).
7    #[error("core 오류: {0}")]
8    Core(#[from] cumulus3d_core::Error),
9    /// 인라이어 임계가 양수가 아님.
10    #[error("alignment_max_error 는 양수여야 함: {0}")]
11    BadMaxError(f64),
12    /// 잘못된 인자.
13    #[error("잘못된 인자: {0}")]
14    InvalidArgument(String),
15    /// GPS 기준 위치가 부족함.
16    #[error("기준 위치 부족: {found}개 (최소 {required})")]
17    TooFewReferences {
18        /// 찾은 개수.
19        found: usize,
20        /// 필요한 최소 개수.
21        required: usize,
22    },
23    /// 모델과 GPS 목록의 공통 영상이 부족함.
24    #[error("공통 영상 부족: {found}개 (최소 {required})")]
25    TooFewCommonImages {
26        /// 찾은 개수.
27        found: usize,
28        /// 필요한 최소 개수.
29        required: usize,
30    },
31    /// 두 재구성 간 공유 3D 점 대응이 부족함.
32    #[error("공유 3D 점 대응 부족: {found}개 (최소 {required})")]
33    TooFewCorrespondences {
34        /// 찾은 개수.
35        found: usize,
36        /// 필요한 최소 개수.
37        required: usize,
38    },
39    /// 견고 Sim3 추정이 모델을 찾지 못함.
40    #[error("견고 Sim3 추정 실패 (인라이어 {inliers}개)")]
41    RansacFailed {
42        /// 최선 모델의 인라이어 수.
43        inliers: usize,
44    },
45    /// 점 배치가 퇴화해 Umeyama 해가 없음.
46    #[error("Umeyama 해 없음(퇴화 배치)")]
47    Degenerate,
48}
49
50/// align 크레이트의 `Result`.
51pub type Result<T> = std::result::Result<T, AlignError>;