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 | Bamboo 対応 canonical | 用途 |
//! |-----------|--------------------|-----|
//! | [`shopping_cart_coin_sdf`] | `models/accessories/shopping-cart-coin/generate.py` | 100 円硬貨型キーホルダーコイン (Cylinder 単純) |
//!
//! ## Bamboo 実測 (対比検証項目)
//!
//! Bamboo 実測「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 と同期、Bamboo `models/accessories/shopping-cart-coin/` 準拠)
// ────────────────────────────────────────────────────────
/// 100 円硬貨型 shopping cart coin 直径 (mm、実測)
pub const COIN_100YEN_DIAMETER: f32 = 22.8;
/// 100 円硬貨型 shopping cart coin 厚 (mm、Bamboo 実プリント検証済、極薄物)
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 化すると Bamboo 実測相当 (「1.7mm → 5.1mm、
/// 6177 non-manifold edges」) が再現される想定
/// DC (`node_to_3mf_dual_contouring`) で mesh 化すると Hermite data で watertight 保証
/// example `coin_dc_vs_mc.rs` で実測比較
// ────────────────────────────────────────────────────────
// テスト
// ────────────────────────────────────────────────────────