STL splitter

3Dプリンタのビルドプレートに収まらない大きなモデルを、接着しやすいジグザグ形状の切断面で分割するブラウザベースのツールです。


アプリケーションリンク

https://stl-splitter.pages.dev

特徴

  • STLファイルの読み込みと3D表示 — ドラッグ&ドロップまたはファイル選択でバイナリ・ASCII両形式に対応
  • インタラクティブな切断面操作 — 位置・X回転・Y回転をスライダーでリアルタイム調整
  • ジグザグ接合面 — 三角波形状の切断面を生成し、接着時の位置決めと強度を向上
  • 水密メッシュ出力 — 適合細分化とT字接合部除去により、スライサーでエラーの出ない閉じたソリッドを生成
  • iPhone / iPad対応 — タッチ操作(1本指回転・ピンチズーム・2本指パン)とモバイルレイアウト
  • 単一HTMLファイル — インストール不要。ブラウザで開くだけで動作(Three.jsはCDNから読み込み)

使い方

1. STLファイルを開く

ヘッダーの「📂 開く」ボタンからファイルを選択するか、3Dビューポートにドラッグ&ドロップします。

読み込みが完了すると、モデルが青色で表示され、右側(モバイルでは下部)に設定パネルが現れます。

2. 切断面を調整する

設定パネルの「✂️ 切断面の設定」セクションで3つのスライダーを操作します。

スライダー機能
位置切断面をモデル中心からの距離で前後に移動(mm単位)
X回転切断面をX軸まわりに傾ける(-90°〜+90°)
Y回転切断面をY軸まわりに傾ける(-90°〜+90°)

緑色の半透明プレーンがリアルタイムでプレビュー表示されます。「切断面を表示」チェックボックスで表示/非表示を切り替えられます。

3. 接合部の形状を選ぶ

「🔗 接合部の形状」セクションで2つのモードを選択できます。

フラット

通常の平面カット。単純な分割に適しています。

ジグザグ(推奨)

三角波形状の凹凸を切断面に生成します。2つのパラメータで形状を調整できます。

パラメータ説明
高さジグザグの山の高さ(mm)。大きいほど噛み合わせが深くなる
ジグザグの1周期の幅(mm)。小さいほど細かい歯になる

ジグザグの利点:

  • パーツ同士がV字型の歯で噛み合うため、接着時に位置がずれにくい
  • 接着面積が平面カットより大きく、接合強度が向上
  • 接着剤が歯の谷に溜まり、保持力が増す

4. ビュー操作

3Dビューポートでモデルを自由に回転・移動・ズームできます。

操作PC(マウス)iPhone/iPad(タッチ)
回転左ドラッグ1本指ドラッグ
移動(パン)右ドラッグ2本指ドラッグ
ズームスクロールホイールピンチイン/アウト

ビューポート右上のボタンで定型ビューに切り替え可能です。

ボタンカメラ位置
正面Z軸方向から正面を見る
背面Z軸方向から背面を見る
天面Y軸方向から上面を見る
底面Y軸方向から底面を見る
右側X軸方向から右側面を見る
左側X軸方向から左側面を見る

5. 分割を実行する

「⚡ 実行」セクションの「分割する」ボタンを押します。

分割が完了すると、パーツAが青色、パーツBがオレンジ色で表示されます。2つのパーツは切断面に対して垂直方向に離れて表示されるため、断面の形状を確認できます。

6. 分割結果をダウンロードする

「📥 パーツA」「📥 パーツB」のリンクをクリックしてSTLファイルをダウンロードします。

ファイル名は元のファイル名に _A / _B が付加されます(例:model_A.stlmodel_B.stl)。

「← 元のモデルに戻る」ボタンで分割前の状態に戻り、設定を変えて再分割できます。


技術仕様

切断アルゴリズム

分割エンジンは以下のパイプラインで処理を行います。

1. 頂点プール(Vertex Pool)

空間ハッシュを用いた頂点管理システム。epsilon(0.00001mm)以内の頂点を自動的に同一頂点としてマージし、浮動小数点誤差によるメッシュ不整合を防止します。3×3×3近傍を検索するため、ハッシュセル境界を跨ぐケースにも対応します。

2. メッシュ細分化(ジグザグモードのみ)

Phase 1: 適応的細分化
切断面付近の三角形をジグザグ周期の1/8以下のサイズに分割します。切断面からの距離が amplitude × 5 以内の三角形が対象です。

Phase 2: 適合細分化(Conforming Refinement)
Phase 1で生じたT字接合部(隣接三角形との共有辺に中点が存在するが、自分の辺にはない状態)を解消します。全頂点を空間ハッシュに登録し、各三角形の辺の中点が既存頂点に存在するかを確認。存在する場合、その三角形を2分割または4分割して頂点を共有させます。変更がなくなるまで最大20回反復します。

3. 三角形–曲面交差判定

各三角形の3頂点について符号付き距離を計算し、切断面の両側に頂点がある三角形を検出。辺と曲面の交点を線形補間で求め、1つの三角形を1+2個の三角形に分割します。コプレナ三角形(全頂点が曲面上)は明示的にpartAに割り当てます。

4. 境界ループ構築

切断で生じたエッジを隣接リストで管理し、使用済みフラグ付きのトレースで閉じた境界ループを検出します。

5. キャップ(蓋)生成

フラットモード: 境界ループを切断面法線に垂直な2D座標系に投影し、イヤークリッピング法で三角形分割します。

ジグザグモード: 境界ループの重心をジグザグ曲面上に配置し、各境界辺と重心を結ぶファン三角形を生成します。境界辺は一切分割しないため、キャップの全辺が本体メッシュの切断辺と正確に一致し、水密なメッシュが保証されます。

6. メッシュクリーンアップ

  • 退化三角形(同一頂点を持つ、または面積が極小の三角形)を除去
  • 同一巻き方向の重複三角形を除去(反対面は保持)
  • 法線方向を切断面法線との内積で検証・修正

対応ファイル形式

形式入力出力
STL バイナリ
STL ASCII

動作要件

  • モダンブラウザ(Chrome, Safari, Edge, Firefox)
  • Three.js r128(CDNから自動読み込み、初回はインターネット接続が必要)
  • ローカルファイルとして開く場合、追加のサーバーは不要

既知の制限事項

  • 非常に大きなSTLファイル(100万三角形以上)ではブラウザのメモリ制限に達する可能性があります
  • ジグザグモードではメッシュ細分化により三角形数が増加するため、複雑なモデルでは処理に時間がかかります
  • 1回の操作で2分割のみ対応。3分割以上は分割結果を再度読み込んで繰り返してください
  • 穴やオープンエッジを含む非水密な入力メッシュでは、分割結果も非水密になる場合があります

トラブルシューティング

症状対処法
モデルが表示されないファイルが正しいSTL形式か確認。ASCII/バイナリ両対応
分割が遅いジグザグの幅を大きくすると細分化の量が減り、高速化します
分割面に穴があるジグザグの高さと幅のバランスを調整してください
iPhoneでダウンロードできないClaudeのプレビュー画面ではなく、HTMLファイルをSafariで直接開いてください
スライサーでエラーが出る入力STLが水密(manifold)であることを確認してください