1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//! # `thin_sdf` — 薄物の純 SDF 表現 (Phase 3''.2、ALICE way 回帰)
//!
//! Phase A.5.2 の `thin` module は `Polygon2D` + earcutr extrude (Phase 1 Data 相当 = ALICE 違反)
//! 本 module は同じ薄物を **純 SDF (`SdfNode`)** で表現し、Dual Contouring で mesh 化する
//! Phase 2 Law 経路 (ALICE 三相原理準拠)
//!
//! mesh 化は `alice_lol::print_export::node_to_3mf_dual_contouring` 経由
//!
//! ## primitive
//!
//! | primitive | pipeline 対応 canonical | 用途 |
//! |-----------|--------------------|-----|
//! | [`shopping_cart_coin_sdf`] | `python generator` | 100 円硬貨型キーホルダーコイン (Cylinder 単純) |
//!
//! ## pipeline 実測 (対比検証項目)
//!
//! pipeline 実測「SDF+MC で 1.7mm 設計 → 5.1mm 出力、6177 non-manifold edges」を、
//! 同 SDF を Dual Contouring で mesh 化した時に回避できるかを example
//! `coin_dc_vs_mc.rs` で実測する 成功すれば Phase A.5 `polygon_extrude` を deprecate → 削除、
//! ALICE 三相原理 Phase 2 Law 経路への完全回帰を達成
use SdfNode;
// ────────────────────────────────────────────────────────
// 定数 (Phase A.5.2 thin と同期、pipeline `python generator` 準拠)
// ────────────────────────────────────────────────────────
/// 100 円硬貨型 shopping cart coin 直径 (mm、実測)
pub const COIN_100YEN_DIAMETER: f32 = 22.8;
/// 100 円硬貨型 shopping cart coin 厚 (mm、pipeline 実プリント検証済、極薄物)
pub const COIN_100YEN_THICKNESS: f32 = 1.7;
// ────────────────────────────────────────────────────────
// SDF spec function
// ────────────────────────────────────────────────────────
/// Shopping cart coin (100 円硬貨型) の `SdfNode` を生成する
///
/// 単純 Cylinder (radius = `diameter/2`, `half_height` = `thickness/2`)、原点中心、Y 軸
///
/// # 引数
///
/// - `diameter`: 直径 (mm、通常 `COIN_100YEN_DIAMETER = 22.8`)
/// - `thickness`: 全厚 (mm、通常 `COIN_100YEN_THICKNESS = 1.7`)
///
/// # 使用例
///
/// ```
/// use alice_lol::stdlib::hardsurface::thin_sdf::{shopping_cart_coin_sdf, COIN_100YEN_DIAMETER, COIN_100YEN_THICKNESS};
/// let coin = shopping_cart_coin_sdf(COIN_100YEN_DIAMETER, COIN_100YEN_THICKNESS);
/// // Dual Contouring 経路推奨:
/// // alice_lol::print_export::node_to_3mf_dual_contouring(&coin, "coin.3mf", &config)
/// ```
///
/// # 検証
///
/// 本 SDF を MC (`node_to_3mf`) で mesh 化すると pipeline 実測相当 (「1.7mm → 5.1mm、
/// 6177 non-manifold edges」) が再現される想定
/// DC (`node_to_3mf_dual_contouring`) で mesh 化すると Hermite data で watertight 保証
/// example `coin_dc_vs_mc.rs` で実測比較
// ────────────────────────────────────────────────────────
// テスト
// ────────────────────────────────────────────────────────