implicit-cad
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImplicit CAD
隐式CAD
Use this skill for implicit CAD models that should run directly in CAD Viewer as browser JS modules. The primary artifact is a or .
.implicit.js.implicit.mjsThis skill is experimental. ALWAYS prefer conventional STEP-first CAD workflows unless the user explicitly asks for an implicit model.
本技能适用于可直接在CAD Viewer中作为浏览器JS模块运行的隐式CAD模型。核心产物为或文件。
.implicit.js.implicit.mjs本技能为实验性版本。除非用户明确要求使用隐式模型,否则请优先采用传统的以STEP格式为先的CAD工作流程。
File Format
文件格式
An implicit CAD file is an ES module exporting an object. The schema source of truth lives in the bundled package at ; re-exports it as for helper-authored modules.
implicit.js/0.1.0scripts/packages/implicitjs/src/lib/implicitCad/schema.jsscripts/lib/implicit-cad.mjsSCHEMAjs
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));
}
`,
};Models may also declare params and animations. Parameter definitions use the implicitjs control schema: , , /, , , and . Number, boolean, color, and button params automatically become GLSL uniforms with the same name; do not add a separate object. is optional and is estimated from the SDF when omitted; add explicit bounds only when the auto estimate is too broad, too slow, or misses an unusual field. and may be JavaScript functions that receive .
numberbooleanenumselectcolorstringbuttonuniformsboundsboundsrender{ ...params, params, animation, animationState, elapsedSec, progress, t }Built-in GLSL helpers use the namespace, for example , , and .
implicit_*implicit_sphereimplicit_box_centeredimplicit_union_roundjs
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));
}
`,
};Do not copy bundled helper files out of this skill. If helper functions are useful, use during authoring or emit standalone GLSL into the final / module.
scripts/lib/implicit-cad.mjs.implicit.js.implicit.mjs隐式CAD文件是一个ES模块,导出一个对象。Schema的权威定义位于捆绑包的中;将其重新导出为,供辅助模块使用。
implicit.js/0.1.0scripts/packages/implicitjs/src/lib/implicitCad/schema.jsscripts/lib/implicit-cad.mjsSCHEMAjs
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控制Schema:、、/、、和。数字、布尔值、颜色和按钮参数会自动成为同名的GLSL uniforms;无需添加单独的对象。为可选参数,若省略则从SDF估算得出;仅当自动估算范围过宽、过慢或遗漏特殊场时,才添加明确的。和可以是接收的JavaScript函数。
numberbooleanenumselectcolorstringbuttonuniformsboundsboundsboundsrender{ ...params, params, animation, animationState, elapsedSec, progress, t }内置GLSL辅助函数使用命名空间,例如、和。
implicit_*implicit_sphereimplicit_box_centeredimplicit_union_roundjs
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));
}
`,
};请勿复制本技能中的捆绑辅助文件。如果需要使用辅助函数,请在创作时使用,或在最终的/模块中嵌入独立的GLSL代码。
scripts/lib/implicit-cad.mjs.implicit.js.implicit.mjsAuthoring Workflow
创作工作流程
- Write a natural-language modeling brief with dimensions, coordinate assumptions, procedural color intent, and visual checks.
- Create or edit the user-specified /
.implicit.jsmodule..implicit.mjs - Use helpers for primitives and field composition when useful:
scripts/lib/implicit-cad.mjs- primitives: ,
sphere,circle,boxCentered,plane,lineSegment,torus,axis,cylinder,cylinderCapped,capsule,cone,coneCappedconeCapsule - booleans/blends: ,
unionSharp,intersectSharp,unionRound,intersectRound,unionChamfer,intersectChamfer,unionExp,intersectExp,unionLpNorm,intersectLpNorm,unionRvachev,intersectRvachevdifference - modifiers/lattices: ,
shell,rotateAxis,repeatCentered,remapCylindrical,cubicGrid,squareHoneycomb,squareHoneycombReinforced,squareDiagonalHoneycomb,octetHoneycomb,hexagonalHoneycombtriangularHoneycomb - TPMS fields: ,
tpmsGyroid,tpmsSchwarz,tpmsDiamond,tpmsLidinoid,tpmsNeovius,tpmsSplitPtpmsIwp - shader wrappers: emits
distanceFunction,float sdf(vec3 p)emitscolorFunctionvec3 color(vec3 p, vec3 normal)
- primitives:
- Add optional and
paramsfor dimensions, toggles, palettes, mode switches, and animated exploration. Use param names directly in GLSL; the runtime declares matching uniforms.animations - Add optional procedural color with when the model benefits from local material variation. Keep color values in 0..1 RGB.
vec3 color(vec3 p, vec3 normal) - Rely on automatic SDF bounds first. Add explicit bounds when an animated, periodic, translated, or very thin model needs tighter or more reliable framing/export sampling.
- Run the lightweight visual verification flow below after visible geometry, color, params, animation, bounds, render, or export-affecting changes.
- Run when a mesh artifact is needed for downstream viewers, slicers, or file handoff.
node scripts/export.mjs --input <model.implicit.js> --format glb
- 撰写包含尺寸、坐标假设、程序化颜色意图和视觉检查要求的自然语言建模说明。
- 创建或编辑用户指定的/
.implicit.js模块。.implicit.mjs - 必要时使用中的辅助函数进行图元和场组合:
scripts/lib/implicit-cad.mjs- 图元:、
sphere、circle、boxCentered、plane、lineSegment、torus、axis、cylinder、cylinderCapped、capsule、cone、coneCappedconeCapsule - 布尔运算/混合:、
unionSharp、intersectSharp、unionRound、intersectRound、unionChamfer、intersectChamfer、unionExp、intersectExp、unionLpNorm、intersectLpNorm、unionRvachev、intersectRvachevdifference - 修改器/晶格:、
shell、rotateAxis、repeatCentered、remapCylindrical、cubicGrid、squareHoneycomb、squareHoneycombReinforced、squareDiagonalHoneycomb、octetHoneycomb、hexagonalHoneycombtriangularHoneycomb - TPMS场:、
tpmsGyroid、tpmsSchwarz、tpmsDiamond、tpmsLidinoid、tpmsNeovius、tpmsSplitPtpmsIwp - 着色器包装器:生成
distanceFunction,float sdf(vec3 p)生成colorFunctionvec3 color(vec3 p, vec3 normal)
- 图元:
- 可选添加和
params,用于控制尺寸、开关、调色板、模式切换以及动画浏览。在GLSL中直接使用参数名称;运行时会声明对应的uniforms。animations - 当模型需要局部材质变化时,可选通过添加程序化颜色。颜色值请保持在0到1的RGB范围内。
vec3 color(vec3 p, vec3 normal) - 优先依赖自动SDF范围。当动画、周期性、平移或极薄模型需要更紧凑或更可靠的取景/导出采样时,再添加明确的范围。
- 在可见几何体、颜色、参数、动画、范围、渲染或影响导出的更改后,运行以下轻量视觉验证流程。
- 当下游查看器、切片器或文件交接需要网格产物时,运行。
node scripts/export.mjs --input <model.implicit.js> --format glb
Visual Verification
视觉验证
Use this skill's snapshot tool as a fast visual check, not as a substitute for deterministic import/export validation. Keep the packet small and purposeful.
For simple static edits, one image is enough:
bash
node scripts/snapshot.mjs --input models/implicit-cad/<model>.implicit.js --output /tmp/implicit-review/<model>.pngFor topology, periodicity, thin features, Boolean blends, object identity, color, or suspected framing issues, render a small packet in one CLI call so the browser, module, and runtime model are reused:
bash
node scripts/snapshot.mjs --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" }
]
}
JSONAdd at the job level for one parameter state, or on individual outputs when the point of the review is comparing parameter variants. Use around when a model is close to the edge; if a snapshot still appears clipped, first check whether the source is cutting the raymarch itself.
implicitParametersrender.frameMargin1.5boundsFor animations, create a short GIF only when motion is part of the request:
bash
node scripts/snapshot.mjs --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 }
}
JSONReview the resulting PNG/GIF for centered framing, no top/bottom/side clipping, expected silhouette and topology, visible parameter differences, GLSL-defined colors, no unexpected holes/gaps, and smooth enough edges for the requested graphics settings. If the snapshot reveals a mismatch, fix the implicit source or bounds and rerun only the relevant packet.
使用本技能的快照工具进行快速视觉检查,但不能替代确定性的导入/导出验证。请保持数据包小巧且目标明确。
对于简单的静态编辑,一张图片即可:
bash
node scripts/snapshot.mjs --input models/implicit-cad/<model>.implicit.js --output /tmp/implicit-review/<model>.png对于拓扑结构、周期性、薄特征、布尔混合、对象识别、颜色或疑似取景问题,通过一次CLI调用生成一个小型数据包,以复用浏览器、模块和运行时模型:
bash
node scripts/snapshot.mjs --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.5左右;如果快照仍显示被裁剪,请先检查源文件的是否截断了光线步进本身。
implicitParametersrender.frameMarginbounds对于动画,仅当请求包含运动效果时,才创建短GIF:
bash
node scripts/snapshot.mjs --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定义的颜色正确、无意外孔洞/间隙,且在请求的图形设置下边缘足够平滑。如果快照显示不匹配,请修复隐式源文件或范围,然后仅重新运行相关数据包。
Handoff
交接
After completing implicit CAD work that creates or modifies , , , , or artifacts, you must ALWAYS hand the explicit file path(s) to when that skill is installed. must start CAD Viewer if it is not already running and return link(s) to the relevant created or updated file(s); include those live viewer link(s) in the final response. If is unavailable or startup fails, report that instead of silently omitting the handoff.
.implicit.js.implicit.mjs.glb.stl.3mf$cad-viewer$cad-viewer$cad-viewerWhen verification snapshots are generated, also include the saved PNG/GIF snapshot(s) in the final response. If no snapshot applies, or if snapshot generation fails, say why and report the deterministic validation that still ran.
完成创建或修改、、、或产物的隐式CAD工作后,若技能已安装,必须始终将明确的文件路径传递给。必须启动CAD Viewer(如果尚未运行),并返回相关新建或更新文件的链接;请在最终响应中包含这些实时查看器链接。如果不可用或启动失败,请如实报告,不要省略交接步骤。
.implicit.js.implicit.mjs.glb.stl.3mf$cad-viewer$cad-viewer$cad-viewer$cad-viewer如果生成了验证快照,请在最终响应中包含保存的PNG/GIF快照。如果不适用快照或快照生成失败,请说明原因并报告已运行的确定性验证。
Snapshot Tool
快照工具
From this skill directory:
bash
node scripts/snapshot.mjs --input <model.implicit.js> --output <snapshot.png>
node scripts/snapshot.mjs --input <model.implicit.js> --output <orbit.gif> --mode orbit
node scripts/snapshot.mjs --job <render-job.json>
node scripts/snapshot.mjs --job - --json
node scripts/snapshot.mjs --helpUse for the complete current command interface. The tool appends a UTC timestamp before the output extension. JSON jobs may be a single job, one job with multiple , a raw array of jobs, or ; prefer a multi-output job for review packets because it avoids rebuilding the same artifact for each camera.
node scripts/snapshot.mjs --helpoutputs{ "jobs": [...] }在本技能目录下运行:
bash
node scripts/snapshot.mjs --input <model.implicit.js> --output <snapshot.png>
node scripts/snapshot.mjs --input <model.implicit.js> --output <orbit.gif> --mode orbit
node scripts/snapshot.mjs --job <render-job.json>
node scripts/snapshot.mjs --job - --json
node scripts/snapshot.mjs --help使用查看完整的当前命令接口。该工具会在输出扩展名前添加UTC时间戳。JSON作业可以是单个作业、包含多个的单个作业、原始作业数组或;对于审查数据包,优先使用多输出作业,因为这样可以避免为每个相机重建相同的产物。
node scripts/snapshot.mjs --helpoutputs{ "jobs": [...] }Export Tool
导出工具
From this skill directory:
bash
node scripts/export.mjs --input <model.implicit.js> --format glb
node scripts/export.mjs --input <model.implicit.js> --output <mesh.stl> --resolution <resolution>
node scripts/export.mjs --input <model.implicit.js> --format 3mf --params '<parameter-json>' --json
node scripts/export.mjs --helpSupported export formats are , , and . The exporter samples the implicit SDF inside the declared bounds and extracts a triangle mesh. If is omitted, the mesh is written next to the source file using the same stem, such as for . Use for the complete current command interface.
glbstl3mf--output<model>.glb<model>.implicit.jsnode scripts/export.mjs --help在本技能目录下运行:
bash
node scripts/export.mjs --input <model.implicit.js> --format glb
node scripts/export.mjs --input <model.implicit.js> --output <mesh.stl> --resolution <resolution>
node scripts/export.mjs --input <model.implicit.js> --format 3mf --params '<parameter-json>' --json
node scripts/export.mjs --help支持的导出格式为、和。导出器会在声明的范围内对隐式SDF进行采样,并提取三角形网格。如果省略,网格将写入源文件所在目录,使用相同的文件名主体,例如对应的。使用查看完整的当前命令接口。
glbstl3mf--output<model>.implicit.js<model>.glbnode scripts/export.mjs --help