安全マージンと切断代(カーフ)を考慮しながら、複数種類の矩形パーツを Ginestium™ ディスク上に自動配置し、製造用ファイル(SVG、DXF、Gerber)を出力します。シリアル番号と方向マーカーを図形内に直接刻印することもできます。このガイドでは、配置アルゴリズムの原理・前提条件・結果の読み方を、開発者でなくても理解できるように説明します。
指定サイズの Ginestium™ ディスクがあり、そこに切り出したい矩形パーツが1種類以上あります(最大200種類)。各パーツには W × H の寸法と希望数量が設定されています。このツールは、ディスク縁の安全マージンと、隣接パーツ間の切断用の間隔(カーフ)を確保しながら、できるだけ多くのパーツを配置できる位置を計算します。
結果は SVG、DXF、Gerber として出力でき、そのまま製造に使えます。オプションで、シリアル番号と方向マーカーをマージン内に刻印することも可能で、パーツ本体に重なることはありません。
物理現象をシミュレートするポータル内の熱系ツールとは異なり、このツールが解くのは純粋に幾何学的な問題です。すなわち「与えられた半径の円の中に、重なりもはみ出しもなく、W × H の矩形をいくつ収められるか」、そして「それは正確にどこか」——切断ファイルとしてそのまま使える形で答えを出します。パーツの設計(例えば Generateur de meandres で描いたつづら折り抵抗体や、単純な形状)の後に来て、実際の切断加工の前に来る工程です。「このサイズのパーツが N 個必要」という要求を、そのまま刻印できるディスクのレイアウトに変換します。
配置そのもの——各パーツをどこに置くかを決める探索処理——と、最終ファイルの生成は、サーバー側で計算・保護されています。Numba による JIT(実行時)コンパイルされたコアにより、多数の候補位置を総当たりで探索するにもかかわらず(§09参照)、数百個規模のパーツの配置を数十〜数百ミリ秒で解決します。
複数のパーツタイプが指定された場合、ツールは入力した順番どおりには配置しません。まず面積が大きい順に並べ替えたうえで、大きいタイプから小さいタイプへ1つずつ配置していきます。すでに置かれたパーツは、以降のタイプにとって障害物になります。
あるパーツタイプ(W × H)について、ツールはランダムな位置を試すのではなく、(W + kerf) × (H + kerf) を周期とする規則的なグリッドを敷きます——これは同じタイプの隣接パーツ間にちょうど kerf 分の切断代を確保する間隔です。そのグリッドをずらし(オフセット)、使用可能な円内かつ既配置パーツの外側に、一度に最も多くのセルが収まる位置を探します。まず粗い探索が候補オフセットの格子を走査し、すでに他のタイプが配置済みの場合、または「進化的」モードが有効な場合には、見つかった最良のオフセット周辺をさらに細かく絞り込む2段階目の探索が行われます。
同数のパーツを収められるオフセットが複数ある場合、ツールは図形が最も中心に寄るものを選びます——これは単なるタイブレーク基準であり、それ自体を狙った美観ではありません。
回転(0°、45°、90°、または任意角度)は配置グリッド全体——つまり全タイプのすべてのパーツ——を一度に回転させます。1つのタイプだけに個別に適用されることはありません。あるタイプだけ向きを変えたい場合は、W と H を入れ替えた別のタイプとして登録する必要があります。
アルゴリズムは、隙間をよりよく埋めるために同一パーツの W×H と H×W の向きを自動的に比較することはありません。各タイプは入力された向きを保持し、ディスク全体に適用される全体回転のみが影響します。同じパーツの両方の向きを検討したい場合は、寸法を入れ替えた2つのタイプを作成してください。
「進化的」モードは、同じグリッド探索を2段階で精緻化するだけであり、選択・突然変異・交叉によって解の集団を進化させるわけではありません。詳細と補足は補足事項(§10)を参照してください。
ディスク縁と使用可能半径(直径/2 − マージン)の間の環状部分は、パーツの配置除外ゾーンであると同時に、シリアル番号と方向マーカーを刻印するための場所でもあります。したがって、単に無駄になっている空間ではありません。
同じタイプの隣接する2つのパーツについて、中心間距離(W + kerf)はちょうど kerf 分の切断代を確保します。異なるタイプのパーツ同士が隣接する場合、ツールは半カーフ分の余裕をもって重なりがないことのみを確認します——常にフルの kerf が保証されるわけではありません。詳細は §09 のステップ4を参照してください。
これらの値は「最適化して生成」を実行した時点で一度だけ読み込まれます。その後に値を変更しても、再度生成を実行するまで、すでに計算済みのレイアウトには反映されません。
数量 ∞ は本当に無制限というわけではありません。エンジン内部では、そのタイプの最大数を 9999 個として扱い、全タイプ合計の配置数自体にも上限があります(§04参照)。
シリアル番号(13文字、通常は Generateur de numeros de serie によって生成され「G」で始まります)は、安全マージン内の円弧に沿って刻印されます。縁からの距離は、選択した文字の高さによって決まります。1、2、3、または4回、ディスク周囲に均等に繰り返すことができ、開始角度のオフセットも調整可能です——ワークベンチ上でパーツがどの向きに置かれても番号が読み取れるように配慮されています。
方向マーカーは、同じくマージン内に配置される小さな塗りつぶし三角形で、あらかじめ用意された4つの向き(0°、45°、180°、12.5°)のいずれかを選べます。この最後の値(12.5°)はあえて切りの良くない数値にしてあり、完成品の上で単独で見つかった場合に、製造上のマーカーであることを単なる装飾要素と明確に区別できるようにしています。この三角形には計測上の機能はなく、組み立て時にパーツの向きを正しく合わせるための視覚的な目印です。
画面上の SVG プレビューでは、見やすさのためにシステムフォントでシリアル番号を描画します。一方 Gerber ファイルでは、各文字を「ストロークフォント」——レーザーや加工ヘッドが塗りつぶしなしでそのままなぞれる線分の集合——で刻印します。両者は同じテキストを同じ位置に描きますが、文字の正確な形状は描画方式によって若干異なります。詳細は §09 のステップ8を参照してください。
SVG(完全ベクター) — 画面に表示されているとおりの図形(色やラベルを含む)。ベクター編集ソフトでの表示や修正に使えます。
DXF(AutoCAD) — ディスクと各パーツの輪郭(タイプごとに TYPE_n という名前のレイヤー)。カーフ・マージン・S/N・マーカーは含まれない、CAD 向けの純粋な幾何学プランです。
GBR(Gerber、パラメータ設定可能) — 独立して選択できる最大5つのレイヤー:ディスク+中心、パーツ輪郭、切断経路、S/N 刻印、方向マーカー。1つのファイルに統合するか、zip アーカイブとしてレイヤーごとに個別出力できます。レイヤーごとに異なる深さのレーザーパスを使う場合に便利です。
プロジェクト(.efb.json) — 配置結果ではなく、ツールの全設定(ディスク、パーツ、S/N、マーカー、アルゴリズム)を保存します。ファイル名はシリアル番号にちなんで付けられ、そのまま再読み込みできます。
このセクションはガイドの技術リファレンスであり、サーバー側のコア(Numba JIT コンパイル済み)で実際に実行される計算を説明します。ツールを使うために必ずしも必要な内容ではありません。
これは矩形ビンパッキングの古典的な「largest first」ヒューリスティックです。大きいパーツほど配置の制約が厳しいため、まだ何もない状態のディスクに最初に置くことで最も自由度を確保できます。小さいパーツは隙間に滑り込ませやすいため、その後に残りを埋めます(§02)。
グリッドはディスクではなくパーツに合わせたローカル座標系でまず構築され、最後に一括で θ だけ回転されます。これにより、傾いたグリッドを都度計算し直すのではなく、どの全体回転角を選んでもパーツ同士が互いに直交した状態を保てます。n_x と n_y に付く +1 は探索範囲に余裕を1行加えるもので、使用可能半径のちょうど縁で探索が途切れないようにするためです。
回転した矩形は、中心が使用可能円の内側にあっても、角が円の外側にはみ出すことがあります。4隅すべてを判定するのは、パーツがわずかにでもはみ出すことを確実に防ぐための保守的な方法です。その代償として、中心だけを見れば有効に見えるいくつかの位置が除外されます。
同一タイプ内では、ステップ2のグリッド周期(step = W + kerf)がすでに隣接パーツ間のフルの kerf を保証しているため、この判定でそれ以上確認する必要はありません。この判定(4)が働くのは、同じグリッドを共有しない異なるタイプ同士を直接比較する場合だけです。そこで保証されるのは最小半カーフの間隔であり、常にフルの kerf ではありません。サイズが大きく異なるタイプ同士を隣接させ、切断代が0.1mm単位で重要になる場合には知っておくべき点です。
粗い探索は、あらゆる場所で全解像度を試すことなく適切なオフセット領域を特定します。精緻な探索は、その後、見つかった最良候補の周辺だけを局所的に絞り込みます。これは意図的な計算コストの節約であり、あり得るすべてのオフセットを網羅する探索ではありません——Grid モードと進化的モードの違いについては補足事項(§10)を参照してください。
同じ充填数であれば、中心に近い位置を優先することで、ディスクの縁により制約される周辺の位置を、それをより必要とする可能性が統計的に高い後続のタイプのために残しておけます。
マーカー三角形はその自身の半径(midR)を中心に配置される一方、シリアル番号のテキストは基準半径(baseR)に固定され、そこから textH の高さ分だけ外側に向かって描画されます。この結果、両者は隣り合いながらも異なる環に配置され、文字の高さをどう選んでも重なることはありません。各 S/N 文字は、Gerber 刻印専用のベクターフォント「ストロークフォント」(塗りつぶしのない純粋な線分)で円弧に沿って描画されます——§07参照。
名前から誤解されがちですが、「進化的」モードは、真の進化的・遺伝的アルゴリズムのように、選択・突然変異・交叉によって解の集団を進化させるわけではありません。実体は「Grid」モードと同じグリッド探索アルゴリズム(§09、ステップ2〜5)であり、測定可能な違いは2点だけです。
| 挙動 | Grid | 進化的 |
|---|---|---|
| 最初に配置されるタイプに対する精緻フェーズ(ステップ5の2) | 実行されない | 常に実行される |
| 2番目以降のタイプに対する精緻フェーズ | 実行される | 常に実行される |
| 探索グリッドサイズ p1(粗い段階) | max(10, min(prec, 40)) | max(8, prec / 2) |
| 探索グリッドサイズ p2(精緻な段階) | max(15, prec) | floor(prec × 1.5) |
実際のところ、パーツタイプが1種類だけのディスクにおける唯一の本質的な違いは、進化的モードでは精緻フェーズが常に実行されることです。Grid モードでは、避けるべき障害物がまだ存在しないため、この単一のパーツは精緻化を正当化する理由がなく、粗い探索の恩恵しか受けません。2番目のパーツタイプが加わった時点で、両モードとも両方のフェーズを実行するようになり、以降は探索グリッドのサイズだけが違い続けます。
「進化的」モードは常に精緻化を行うため、計算時間はより多くかかります。その効果が意味を持つのは、空きスペースが少ない、パーツタイプが1種類しかない、パーツサイズに対して kerf が大きいといった、余裕の少ない構成に限られます。充填容量に対してまだ余裕のあるディスクでは、両モードは通常同じ結果に収束します。「進化的」という名前から、より賢い、あるいはより網羅的な探索を連想すべきではなく、局所的により粘り強い探索だという程度に理解してください。