型分類 / Type Classification System
RedRing では、幾何学要素の分類を明示的な型システムで定義することで、型安全性と構造的明快さを両立しています。
PrimitiveKind
基本幾何プリミティブの分類:
Point:点Vector:ベクトルDirection:正規化されたベクトルLine:直線(線分)Ray:光線(半無限直線)InfiniteLine:無限直線
CurveType
曲線要素の分類:
Line:直線Circle:円Ellipse:楕円Arc:円弧EllipseArc:楕円弧NurbsCurve:NURBS 曲線(✅ 実装完了)
PrimitiveSurfaceType
Plane:無限平面Triangle:三角形Rectangle:四辺形
SurfaceType
NurbsSurface:NURBS 曲面(✅ 実装完了)RotateSolid:回転体CylindricalSurface:円柱面polygonMesh:多角形メッシュTriangleMesh:三角形メッシュ(表示用 or 三角形メッシュ操作用)
SolidType
Sphere:球CylindricalSolid:円柱体Cone:円錐Ellipsoid:楕円体Torus:トーラスRotateSolid:回転体
基本幾何プリミティブ面要素の分類
エラー型システム
各幾何要素は専用のエラー型を持ちます:
EllipseError:楕円固有のエラーCircleError:円固有のエラーNormalizationError:正規化エラーEllipseArcError:楕円弧エラーNurbsError:NURBS曲線・曲面固有のエラー(✅ 実装完了)- 制御点不足エラー
- 無効なノットベクトル
- 重み値の問題
- パラメータ範囲外エラー
トレイト統合システム
重複する操作は統合トレイトで抽象化:
Normalizable<T>
#![allow(unused)]
fn main() {
pub trait Normalizable<T> {
type Output;
type Error;
fn normalize(&self) -> Result<Self::Output, Self::Error>;
}
}
DistanceCalculation<T, Target>
#![allow(unused)]
fn main() {
pub trait DistanceCalculation<T, Target> {
fn distance_to(&self, other: &Target) -> T;
}
}
設計意図
- 型安全性:コンパイル時の型チェックによるエラー防止
- 専用性:各幾何要素に特化したエラー情報の提供
- 拡張性:新しい幾何要素の追加に対応可能な構造
- 明示性:API の意図と制約を型で表現