mcpField
I
implicit-cad

implicit-cad

github.com/earthtojakeデザイン・UI23.9k5.5k 回インストール今日更新
リポジトリ

implicit-cad について

implicit-cad は、CAD Viewer で動作するブラウザー向け JavaScript モジュールとして、陰関数 CAD モデルを作成するスキルです。パラメーターやアニメーション、表示確認、メッシュ出力に対応します。陰関数モデリングが明示的に求められない場合は、STEP を先に扱う従来のワークフローが推奨されています。

主な機能

  1. 01`.implicit.js` と `.implicit.mjs` モデルの作成
  2. 02GLSL ヘルパーによる SDF ジオメトリの構成
  3. 03パラメーターとアニメーションの定義
  4. 04Viewer 用レンダーパッケージの生成
  5. 05GLB、STL、3MF へのエクスポート

活用シーン

  1. 01プロシージャルな陰関数モデルの作成
  2. 02パラメーターやアニメーションによる形状確認
  3. 03PNG または GIF スナップショットで画角を確認
  4. 04後続作業向けのモデル出力

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/earthtojake/text-to-cad --skill implicit-cad

インストール後、Claude Code で/implicit-cadを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
requirements.txt
agents/
openai.yaml
scripts/
export.mjs
scripts/gen/
__init__.py
__main__.py
cli.py
scripts/lib/
implicit-cad.mjs
scripts/packages/cadgen/
LICENSE
pyproject.toml
scripts/packages/cadgen/src/cadgen/
__init__.py
scripts/packages/cadgen/src/cadgen/_internal/
__init__.py
assembly_spec.py
atomic_replace.py
cli_errors.py
cli_locking.py
component_package.py
drawing_package.py
file_metadata.py
font_scan.py
generation_runner.py
generation_spec.py
generation.py
glb_mesh_payload.py
glb_topology.py
glb.py
implicit_package.py
legacy_artifacts.py
node_resolve_hooks.mjs
node_resolve_register.mjs

詳細

インプリシット CAD

ブラウザーの JS モジュールとして CAD Viewer で直接実行するインプリシット CAD モデルには、このスキルを使用してください。主な成果物は .implicit.js または .implicit.mjs です。

このスキルは実験的なものです。ユーザーがインプリシットモデルを明示的に求めない限り、従来の STEP を優先する CAD ワークフローを必ず選択してください。

ファイル形式

インプリシット CAD ファイルは、implicit.js/0.1.0 オブジェクトをエクスポートする ES モジュールです。スキーマの信頼できる情報源は、同梱パッケージの scripts/packages/implicitjs/src/lib/implicitCad/schema.js にあります。scripts/lib/implicit-cad.mjs は、ヘルパーを使用して作成されたモジュール向けに、これを SCHEMA として再エクスポートします。

export default {
  schema: "implicit.js/0.1.0",
  name: "rounded capsule block",
  glsl: `
float sdf(vec3 p) {
  float sphere = implicit_sphere(p, vec3(0.0), 22.0);
  float block = implicit_box_centered(p, vec3(34.0, 18.0, 18.0), vec3(0.0));
  return implicit_union_round(sphere, block, 3.0);
}

vec3 color(vec3 p, vec3 normal) {
  return mix(vec3(0.20, 0.55, 0.95), vec3(0.95, 0.45, 0.20), smoothstep(-15.0, 20.0, p.z));
}
`,
};

モデルでは、パラメーターやアニメーションも宣言できます。パラメーター定義では、implicitjs のコントロールスキーマである number、boolean、enum/select、color、string、button を使用します。数値、ブール値、色、ボタンのパラメーターは、同じ名前の GLSL ユニフォームに自動的に変換されるため、別途 uniforms オブジェクトを追加しないでください。bounds は省略可能で、省略すると SDF から推定されます。自動推定の範囲が広すぎる、遅すぎる、または特殊なフィールドを捉えられない場合に限り、明示的な境界を追加してください。bounds と render は、{ ...params, params, animation, animationState, elapsedSec, progress, t } を受け取る JavaScript 関数にできます。

組み込みの GLSL ヘルパーでは、implicit_sphere、implicit_box_centered、implicit_union_round など、implicit_* 名前空間を使用します。

export default {
  schema: "implicit.js/0.1.0",
  name: "breathing orb",
  params: {
    radius: {
      type: "number",
      label: "Radius",
      min: 12,
      max: 34,
      default: 22,
      unit: "mm",
    },
  },
  animations: {
    breathe: {
      label: "Breathe",
      duration: 3,
      update({ progress, set }) {
        set("radius", 18 + Math.sin(progress * Math.PI) * 10);
      },
    },
  },
  render: { steps: 224, epsilon: 0.004 },
  glsl: `
float sdf(vec3 p) {
  return length(p) - radius;
}

vec3 color(vec3 p, vec3 normal) {
  return mix(vec3(0.10, 0.58, 0.95), vec3(1.0, 0.34, 0.12), smoothstep(-18.0, 18.0, p.z));
}
`,
};

同梱されているヘルパーファイルを、このスキルの外にコピーしないでください。ヘルパー関数が役立つ場合は、作成中に scripts/lib/implicit-cad.mjs を使用するか、最終的な .implicit.js/.implicit.mjs モジュールにスタンドアロンの GLSL を出力してください。

作成ワークフロー

  1. 寸法、座標の前提、プロシージャルカラーの意図、視覚的な確認項目を含む、自然言語によるモデリング仕様を作成します。
  2. ユーザー指定の .implicit.js/.implicit.mjs モジュールを作成または編集します。
  3. 必要に応じて、プリミティブやフィールドの構成に scripts/lib/implicit-cad.mjs のヘルパーを使用します:
    • プリミティブ:sphere、circle、boxCentered、plane、lineSegment、torus、axis、cylinder、cylinderCapped、capsule、cone、coneCapped、coneCapsule
    • ブール演算/ブレンド:unionSharp、intersectSharp、unionRound、intersectRound、unionChamfer、intersectChamfer、unionExp、intersectExp、unionLpNorm、intersectLpNorm、unionRvachev、intersectRvachev、difference
    • モディファイア/ラティス:shell、rotateAxis、repeatCentered、remapCylindrical、cubicGrid、squareHoneycomb、squareHoneycombReinforced、squareDiagonalHoneycomb、octetHoneycomb、hexagonalHoneycomb、triangularHoneycomb
    • TPMS フィールド:tpmsGyroid、tpmsSchwarz、tpmsDiamond、tpmsLidinoid、tpmsNeovius、tpmsSplitP、tpmsIwp
    • シェーダーラッパー:distanceFunction は float sdf(vec3 p) を出力し、colorFunction は vec3 color(vec3 p, vec3 normal) を出力します
  4. 寸法、切り替え、パレット、モード切り替え、アニメーションによる探索には、必要に応じて params と animations を追加します。GLSL ではパラメーター名を直接使用してください。ランタイムが対応するユニフォームを宣言します。
  5. モデルに局所的なマテリアルの変化が役立つ場合は、vec3 color(vec3 p, vec3 normal) によるプロシージャルカラーを任意で追加します。色の値は 0~1 の RGB にしてください。
  6. まずは SDF の自動境界推定を利用してください。アニメーション付き、周期的、平行移動された、または非常に薄いモデルで、より厳密または信頼性の高いフレーミング/エクスポート時のサンプリングが必要な場合は、明示的な境界を追加します。
  7. 表示ジオメトリ、色、パラメーター、アニメーション、境界、レンダリング、またはエクスポートに影響する変更を行った後は、以下の軽量な視覚検証フローを実行します。
  8. python scripts/gen <model.implicit.js> を実行して、CAD Viewer が開くレンダリングパッケージをビルド(または更新)します。隣接する <name>.glb も必要な場合は --write を追加します。STL/3MF、デフォルト以外のパラメーター、またはアニメーションの場合は、node scripts/export.mjs --input <model.implicit.js> --glb を使用します。

ビジュアル検証

このスキルのスナップショットツールは、迅速な目視確認に使用してください。決定論的なインポート/エクスポート検証の代わりにはなりません。パケットは小さく、目的を絞ってください。

シンプルな静的編集なら、画像は1枚で十分です。

python scripts/snapshot --input models/implicit-cad/<model>.implicit.js --output /tmp/implicit-review/<model>.png

トポロジー、周期性、薄い形状、ブーリアンブレンド、オブジェクトの同一性、色、またはフレーミングに問題があると思われる場合は、1回のCLI呼び出しで小さなパケットをレンダリングしてください。ブラウザー、モジュール、ランタイムモデルが再利用されます。

python scripts/snapshot --job - <<'JSON'
{
  "input": "models/implicit-cad/<model>.implicit.js",
  "mode": "view",
  "render": { "sizeProfile": "simple", "frameMargin": 1.55 },
  "graphics": { "modelColors": true, "detail": 1.2, "shadows": true, "ambientOcclusion": true },
  "outputs": [
    { "path": "/tmp/implicit-review/<model>-iso.png", "camera": "iso" },
    { "path": "/tmp/implicit-review/<model>-front.png", "camera": "front" },
    { "path": "/tmp/implicit-review/<model>-top.png", "camera": "top" },
    { "path": "/tmp/implicit-review/<model>-right.png", "camera": "right" }
  ]
}
JSON

1つのパラメーター状態を指定する場合はジョブレベルに、パラメーターのバリエーションを比較することがレビューの目的である場合は個々の出力に implicitParameters を追加してください。モデルが端に近い場合は render.frameMargin を 1.5 前後に設定してください。それでもスナップショットが切れて見える場合は、まずソースの bounds がレイマーチング自体を切り取っていないか確認してください。

アニメーションでは、依頼に動きが含まれている場合に限り、短いGIFを作成してください。

python scripts/snapshot --job - <<'JSON'
{
  "input": "models/implicit-cad/<model>.implicit.js",
  "mode": "animate",
  "outputs": [{ "path": "/tmp/implicit-review/<model>-animation.gif" }],
  "implicitAnimation": { "activeId": "<animation-id>", "durationSeconds": 3, "fps": 12 }
}
JSON

生成されたPNG/GIFを確認し、フレーミングが中央に配置されていること、上下左右が切れていないこと、シルエットとトポロジーが想定どおりであること、パラメーターの違いが見えること、GLSLで定義された色が表示されていること、予期しない穴や隙間がないこと、そして指定されたグラフィックス設定に対してエッジが十分滑らかであることを確認してください。スナップショットで不一致が見つかった場合は、暗黙形状のソースまたは境界を修正し、該当するパケットだけを再実行してください。

引き継ぎ

.implicit.js、.implicit.mjs、.glb、.stl、.3mf のアーティファクトを作成または変更する暗黙CAD作業を完了した後は、このスキルがインストールされている場合、必ず明示的なファイルパスを $cad-viewer に渡してください。$cad-viewer は、CAD Viewerがまだ起動していない場合は起動し、該当する作成済みまたは更新済みファイルへのリンクを返す必要があります。最終回答には、これらのライブビューワーリンクを含めてください。$cad-viewer を利用できない場合、または起動に失敗した場合は、引き継ぎを黙って省略せず、その旨を報告してください。

検証用スナップショットを生成した場合は、保存したPNG/GIFのスナップショットも最終回答に含めてください。該当するスナップショットがない場合、または生成に失敗した場合は、その理由を述べ、実行した決定論的検証を報告してください。

スナップショットツール

このスキルのディレクトリから実行します。

python scripts/snapshot --input <model.implicit.js> --output <snapshot.png>
python scripts/snapshot --input <model.implicit.js> --output <orbit.gif> --mode orbit
python scripts/snapshot --job <render-job.json>
python scripts/snapshot --job - --json
python scripts/snapshot --help

現在のコマンドインターフェイスの詳細については、python scripts/snapshot --help を使用してください。スナップショットCLIは他のすべてのレンダリングスキルと共有されており(cadgen.snapshot_cli)、CAD Viewerと同じブラウザーランタイムで動作するため、ジオメトリ、マテリアル、ライティングは同一にレンダリングされます。デフォルトの snapshot テーマは、グリッド、原点軸、シャドウを取り除く点だけがビューポートと異なります。このスキルでは .implicit.js のみが有効です。テーマ設定は1つの --theme に、暗黙形状のレイマーチング品質は --graphics に設定します。これはViewerの「Theme」タブと「Graphics」タブに対応しています。--display はありません。表示設定はCADトポロジーの設定であり、暗黙モデルには存在しないためです。デフォルトのテーマは snapshot です。これは、地面のグリッド、原点軸、シャドウを除いたWorkbench Lightです。ここではレイマーチングシャドウもデフォルトでオフになっているため、暗黙形状のスナップショットはシャドウなしのメッシュ経路と一致します(シャドウを戻すには --graphics '{"shadows":true}' を渡してください)。このツールは、出力拡張子の前にUTCタイムスタンプを追加します。JSONジョブには、単一のジョブ、複数の outputs を含む1つのジョブ、ジョブの生配列、または { "jobs": [...] } を指定できます。レビュー用パケットでは、カメラごとに同じアーティファクトを再構築せずに済むため、複数出力のジョブを推奨します。

ツールの生成

このスキルディレクトリから実行します。

python scripts/gen <model.implicit.js>
python scripts/gen <model.implicit.js> --write
python scripts/gen models/implicits/*.implicit.js --force
python scripts/gen <model.implicit.js> --resolution 128 --threads 4
python scripts/gen --help

scripts/gen はモデルのレンダリングパッケージ(CAD Viewer が開くベイク済みメッシュ)を、モデルフォルダー内の __cadgen__/models/<name>.implicit.js/ に生成します(implicit.json と model.glb)。パッケージはモデルのパラメーターのデフォルト値でベイクされており、ライブパラメーターもアニメーションも含まれません。また、ビューアーが同じ生成処理を通じてオンデマンドでビルドするものでもあるため、ここでビルドしたパッケージとモデルを開いてビルドしたパッケージは同じ成果物です。

パッケージが最新のモデルはスキップされます。--force を指定すると再ビルドします。--write を指定すると、同じメッシュ処理から生成された兄弟ファイル <name>.glb もソースの隣に出力されます。このファイルは通常のエクスポートプリセット GLB です(パッケージ内の model.glb はビューアー向けに圧縮されているため、代用にはなりません)。STL や 3MF、デフォルト以外のパラメーター、アニメーションが必要な場合は、scripts/export を使用してください。

エクスポートツール

このスキルディレクトリから実行します。

node scripts/export.mjs --input <model.implicit.js> --glb
node scripts/export.mjs --input <model.implicit.js> --stl <mesh.stl> --resolution <resolution>
node scripts/export.mjs --input <model.implicit.js> --stl --3mf --glb
node scripts/export.mjs --input <model.implicit.js> --3mf --params '<parameter-json>' --json
node scripts/export.mjs --help

形式ごとに 1 つのフラグ(--stl、--3mf、--glb)を指定します。CAD スキルのエクスポート CLI と同様に、1 回の実行で複数指定できます。少なくとも 1 つは必須で、指定しない場合、コマンドは 2 で終了します。1 回の実行につきモデルのメッシュ化は 1 度だけ行われるため、要求したすべての形式は同一のジオメトリから生成されます。パスを指定せずに形式フラグを指定すると、ソースファイルと同じ名前部分を使ってその隣に出力されます。たとえば <model>.implicit.js の場合は <model>.glb です。パスを指定した場合は、カレントディレクトリを基準に解決されます。現在のコマンドインターフェースの詳細については、node scripts/export.mjs --help を使用してください。

コメント