内部ロジックの全体像
本記事では、RedRingの切削シミュレーションデモにおける内部ロジックを、実行フローに沿って整理します。デモは、フラットエンドミルとボールエンドミルの2種類を選択して実行でき、各フレームで工具位置と加工対象の除去状態を動的に確認できます。
処理フロー
- 入力条件の確定: 工具種(フラット/ボール)、実行条件、表示条件を確定します。
- フレーム進行(自動送り): 自動送りでフレームを順次進め、時系列で状態を更新します。
- 工具位置の更新: 各フレームで工具の位置・姿勢を更新し、現在ステップの状態を確定します。
- 除去状態の反映: 工具位置に対応する除去状態を加工対象へ反映します。
- 可視化出力: 更新済みの工具位置と除去結果を描画し、連続的な変化として表示します。
設計上のポイント
- 工具種の切り替え可能性: 同一デモ内で工具種を切り替え、挙動の違いを比較できます。
- 時系列の追跡性: 自動送りにより、工具移動と除去変化の対応関係を連続して確認できます。
- 責務分離: 入力条件、シミュレーション更新、可視化表示を分離し、説明性と拡張性を確保しています。
- 再現性: 同一入力条件では同じ進行を再現できるため、検証・比較に向いています。
デモ動画の見方
動画を見る際は、工具位置の推移と除去される領域の変化を対応づけて追うと、内部ロジックの挙動を把握しやすくなります。特に、工具種の違いによる見え方の差分は、実運用時の検討ポイントとして有効です。
関連記事
デモ全体の概要は「RedRing切削シミュレーションデモ紹介」で解説しています。先に概要編を読むと、本記事の内部ロジック説明をより理解しやすくなります。
RedRing実装で確認できるOctree機能(実装済み)
ここでは一般論ではなく、RedRing実装で確認できる機能だけを整理します(コード名は補足として最小限に記載)。
1. 空間分割と探索
- 3D空間を再帰的に8分割するOctree構造を実装。
- 挿入・範囲検索・最近傍探索を利用可能。
- 並列検索APIと整合テストを実装。
2. 工具形状による除去(VoxelOctree)
- セル状態は Solid / Mixed / Empty の3状態。
- 除去API(例:
remove_material_box,remove_material_capsule)を実装。 remaining_volume()とdetect_undercut()を実装。
3. 表示方法(可視化)
- OctreeワイヤーフレームのGPU描画ステージを実装。
- 深さ切替表示と深さアニメーションに対応。
4. スナップショットと干渉チェック
- 距離ベースのスナップショット方式を採用方針として明示。
- Octree範囲検索で候補を絞り、詳細判定後に除去処理へ接続する構成。
ToolPathから工具位置算出までの実装フロー(実装済み)
本実装は ToolPath を入力として、まず経路を線分集合へ正規化し(Line はそのまま、Arc は chord tolerance 指定の polyline へ離散化)、各線分に切削フラグを保持します。続いて工具種別ごとに「除去演算へ渡す工具中心軌跡」を決定し、フラットエンドミルは幾何を不変、ボールエンドミルは中心軌跡を +radius だけ Z オフセットした線分列へ写像します。材料除去は切削フラグが真の線分に限定して実行し、フラットは swept-cylinder、ボールは capsule として VoxelOctree に適用します。さらに累積走行距離を基準に snapshot を記録するため、各時刻相当点は (segment_index, t) で再構成できます。
- 経路正規化: approach / contour / retract を統合し、Arc を polyline に離散化して線分列化(切削フラグ継承)
- 工具中心軌跡の確定: 工具種別で前処理分岐(Flat: 恒等写像、Ball: Z 方向へ +radius オフセット)
- 除去演算:
is_cutting=true線分のみを対象に、工具形状モデル別 API で VoxelOctree を更新 - 状態サンプリング: 累積距離間隔で snapshot を保存し、
segment_index + tで位置・進行度を同定
視覚イメージ(処理の流れ)
1枚の図で「分割前 → 近傍細分化 → 除去後」を縦方向に追えるようにしています。
工具の現在位置は、線分インデックスと線分内パラメータtで表現され、距離間隔ごとにスナップショット保存されます。
今後の拡張予定
- 工具モデルの拡張: テーパ工具・R付き工具など、実運用で使う工具形状への対応を追加します。
- 除去判定の高精度化: Octreeの局所再分割条件と交差判定ロジックを改善し、精度と計算量のバランスを最適化します。
- 加工条件の比較機能: 複数条件の実行結果(除去体積・所要時間・軌跡差分)を同一画面で比較できるようにします。
- スナップショット解析の強化: 任意時刻ジャンプ、差分ハイライト、履歴のエクスポート機能を追加します。
- 可視化と説明性の向上: 重要イベント(細分化・除去・干渉)の注釈表示を強化し、挙動の理解をより直感的にします。