diff --git a/changelog/entries/2026-06-03-pcb-board-solid.json b/changelog/entries/2026-06-03-pcb-board-solid.json new file mode 100644 index 00000000..8d811962 --- /dev/null +++ b/changelog/entries/2026-06-03-pcb-board-solid.json @@ -0,0 +1,9 @@ +{ + "id": "2026-06-03-pcb-board-solid", + "version": "0.9.4", + "date": "2026-06-03", + "category": "feat", + "title": "PCB boards are real FR4 solids", + "summary": "A PCB board now evaluates to a genuine FR4 slab in the live app — a green body visible outside edit focus, STEP-exportable and ray-traceable — instead of a data-only placeholder.", + "features": ["pcb", "ecad", "electronics", "kernel"] +} diff --git a/crates/vcad-app/src/materializer.rs b/crates/vcad-app/src/materializer.rs index d87405c9..bbd18e1e 100644 --- a/crates/vcad-app/src/materializer.rs +++ b/crates/vcad-app/src/materializer.rs @@ -990,11 +990,25 @@ fn materialize_feature( let rotate_id = ctx.alloc(); let translate_id = ctx.alloc(); - if let Some(json) = &board { - doc.pcb = serde_json::from_str(json).ok(); - } + // Parse the board JSON into a real `PcbBoard` op so the kernel + // evaluator extrudes a genuine FR4 slab (a board is then a true + // body — visible outside edit focus, STEP-exportable, ray-traceable) + // instead of an empty placeholder. Also mirror it into the legacy + // `doc.pcb` field, which `getNodePcb`'s CRDT fallback still reads. + let board_op = match board + .as_ref() + .and_then(|json| serde_json::from_str::(json).ok()) + { + Some(pcb) => { + doc.pcb = Some(pcb.clone()); + CsgOp::PcbBoard { + board: Box::new(pcb), + } + } + None => CsgOp::Empty, + }; - insert_node(doc, board_id, &name, CsgOp::Empty); + insert_node(doc, board_id, &name, board_op); insert_transform_chain( doc, ctx, diff --git a/crates/vcad-eval/src/evaluate.rs b/crates/vcad-eval/src/evaluate.rs index 9e64519f..357b6156 100644 --- a/crates/vcad-eval/src/evaluate.rs +++ b/crates/vcad-eval/src/evaluate.rs @@ -778,6 +778,17 @@ fn evaluate_op_timed( board_solid = Solid::from_mesh(merged); } + // Center the board on z=0 so its top surface lands at +thickness/2, + // where PcbScene draws the copper (layerZ = thickness/2 + …) and + // where the legacy PcbBoardMesh sat. The outline is extruded from + // z=0, so shift the whole board (slab + components + copper) down by + // thickness/2. + let board_solid = board_solid.apply_transform(&Transform::translation( + 0.0, + 0.0, + -board.outline.thickness / 2.0, + )); + Ok(Some(board_solid)) } diff --git a/crates/vcad-eval/src/lib.rs b/crates/vcad-eval/src/lib.rs index 5f1a20a2..0f842e14 100644 --- a/crates/vcad-eval/src/lib.rs +++ b/crates/vcad-eval/src/lib.rs @@ -404,6 +404,90 @@ mod tests { assert!(!scene.parts[0].mesh.positions.is_empty()); } + #[test] + fn evaluate_pcb_board_is_centered_solid() { + use vcad_ir::ecad::{BoardOutline, DesignRules, LayerStackup, NetClassRules, Pcb}; + + let thickness = 1.6; + let pcb = Pcb { + outline: BoardOutline { + vertices: vec![ + Vec2::new(0.0, 0.0), + Vec2::new(50.0, 0.0), + Vec2::new(50.0, 30.0), + Vec2::new(0.0, 30.0), + ], + cutouts: vec![], + thickness, + }, + stackup: LayerStackup { layers: vec![] }, + nets: vec![], + rules: DesignRules { + default_rules: NetClassRules { + name: "Default".to_string(), + trace_width: 0.25, + clearance: 0.2, + via_diameter: 0.8, + via_drill: 0.4, + diff_pair_gap: None, + diff_pair_width: None, + }, + class_rules: vec![], + net_class_assignments: std::collections::HashMap::new(), + edge_clearance: 0.5, + hole_to_hole: 0.5, + min_annular_ring: 0.15, + min_drill: 0.2, + }, + footprints: vec![], + traces: vec![], + trace_arcs: vec![], + vias: vec![], + zones: vec![], + keepouts: vec![], + }; + + let mut doc = Document::new(); + doc.nodes.insert( + 1, + Node { + id: 1, + name: Some("board".to_string()), + op: CsgOp::PcbBoard { + board: Box::new(pcb), + }, + }, + ); + doc.roots.push(SceneEntry { + root: 1, + material: "default".to_string(), + visible: None, + }); + + let scene = evaluate_document(&doc, &EvalOptions::default()).unwrap(); + assert_eq!(scene.parts.len(), 1); + let pos = &scene.parts[0].mesh.positions; + assert!(!pos.is_empty(), "PcbBoard should evaluate to a real solid"); + + // The slab is centered on z=0 so its top surface lands at +thickness/2, + // where PcbScene draws the copper (layerZ = thickness/2 + …). + let (mut min_z, mut max_z) = (f32::INFINITY, f32::NEG_INFINITY); + for i in (2..pos.len()).step_by(3) { + min_z = min_z.min(pos[i]); + max_z = max_z.max(pos[i]); + } + let half = (thickness / 2.0) as f32; + assert!( + (min_z + half).abs() < 1e-4, + "board bottom should be at -thickness/2 ({}), got {min_z}", + -half + ); + assert!( + (max_z - half).abs() < 1e-4, + "board top should be at +thickness/2 ({half}), got {max_z}" + ); + } + #[test] fn evaluate_sketch_revolve() { let mut doc = Document::new(); diff --git a/crates/vcad-kernel-wasm/src/lib.rs b/crates/vcad-kernel-wasm/src/lib.rs index 2f8110cf..42ea5cd3 100644 --- a/crates/vcad-kernel-wasm/src/lib.rs +++ b/crates/vcad-kernel-wasm/src/lib.rs @@ -3644,9 +3644,42 @@ fn evaluate_node(doc: &vcad_ir::Document, node_id: vcad_ir::NodeId) -> Result Err(JsError::new( - "PcbBoard not supported in VCode evaluation - use evaluateDocument", - )), + vcad_ir::CsgOp::PcbBoard { board } => { + // Extrude the board outline into a real FR4 slab, then center it on + // z=0 so the top surface lands at +thickness/2 — where PcbScene + // draws the copper (layerZ = thickness/2 + …) and where the legacy + // PcbBoardMesh sat. The kernel extrudes from z=0 along +z, so we + // shift down by thickness/2. Cutouts (`outline.cutouts`) are a TODO: + // the slab uses the outer outline only, matching the TS path. + let outline = &board.outline; + let verts = &outline.vertices; + if verts.len() < 3 { + return Ok(Solid::empty()); + } + let t = outline.thickness; + let segments: Vec = verts + .iter() + .enumerate() + .map(|(i, v)| { + let next = &verts[(i + 1) % verts.len()]; + WasmSketchSegment::Line { + start: [v.x, v.y], + end: [next.x, next.y], + } + }) + .collect(); + let profile = WasmSketchProfile { + origin: [0.0, 0.0, 0.0], + x_dir: [1.0, 0.0, 0.0], + y_dir: [0.0, 1.0, 0.0], + segments, + }; + let profile_json = serde_json::to_string(&profile).map_err(|e| { + JsError::new(&format!("Board profile serialization failed: {}", e)) + })?; + let slab = Solid::extrude(profile_json, vec![0.0, 0.0, t])?; + Ok(slab.translate(0.0, 0.0, -t / 2.0)) + } vcad_ir::CsgOp::EmbroideryPattern { .. } => Err(JsError::new( "EmbroideryPattern not supported in VCode evaluation - use evaluateDocument", diff --git a/packages/app/src/components/ViewportContent.tsx b/packages/app/src/components/ViewportContent.tsx index 47882312..139911f6 100644 --- a/packages/app/src/components/ViewportContent.tsx +++ b/packages/app/src/components/ViewportContent.tsx @@ -1695,14 +1695,15 @@ export function ViewportContent({ )} {/* ═══════════════════════════════════════════════════════════════════ - PCB EDIT FOCUS: render the board (FR4 slab + copper/footprints/ - ratsnest) in the main scene, alongside (not instead of) the - mechanical assembly. PcbScene draws the slab itself — the PcbBoard - kernel op evaluates to Solid.empty(), so there is no duplicate body. + PCB EDIT FOCUS: render the focused board's copper/footprints/ratsnest + in the main scene, alongside (not instead of) the mechanical assembly. + The FR4 slab is suppressed here (showBoard={false}) because the + PcbBoard kernel op now evaluates to a real extruded slab that renders + as an ordinary part via SceneMesh — drawing it again would z-fight. ═══════════════════════════════════════════════════════════════════ */} {pcbEditFocus && ( - + )} @@ -1726,8 +1727,9 @@ export function ViewportContent({ {/* Plane gizmo at origin - inside rotation group so kernel planes display correctly */} - {/* PCB board slabs — visible as bodies even when not being edited - (the focused board is drawn by PcbScene instead). */} + {/* Legacy fallback only: real PcbBoard nodes now extrude a kernel + slab that renders as a part. This covers the doc.pcb-only path + where there is no PcbBoard node for the kernel to evaluate. */} {/* KILL-SWITCH: was `` diff --git a/packages/app/src/components/electronics/pcb3d/PcbBoardBodies.tsx b/packages/app/src/components/electronics/pcb3d/PcbBoardBodies.tsx index 122e8f5f..f8149aa4 100644 --- a/packages/app/src/components/electronics/pcb3d/PcbBoardBodies.tsx +++ b/packages/app/src/components/electronics/pcb3d/PcbBoardBodies.tsx @@ -1,38 +1,30 @@ /** - * Renders the FR4 slab for every PcbBoard in the document so a board is - * visible as a body in the main scene even when it is NOT being edited. + * Legacy fallback for rendering a board's FR4 slab in the main scene. * - * The board's geometry comes straight from its PCB data (via the proven - * PcbBoardMesh), independent of the kernel evaluator — the app's live WASM - * evaluator still returns an empty solid for PcbBoard, so without this a board - * would be invisible outside edit focus. + * Normal boards are real `PcbBoard` nodes whose kernel op now evaluates to a + * genuine extruded slab (see crates/vcad-kernel-wasm `evaluate_node` + + * vcad-app `materializer`). Those render as ordinary parts via `SceneMesh`, so + * they are deliberately NOT drawn here — doing so would z-fight / double the + * body. * - * The board with edit focus is skipped: PcbScene already draws its slab. + * The only case left for this component is the legacy CRDT dual-path: a board + * that lives solely in `doc.pcb` with no `PcbBoard` node id, so the kernel has + * nothing to extrude. The focused board is drawn by `PcbScene`, so we only show + * the slab here when nothing has edit focus. */ -import { useDocumentStore, getPcbNodeIds, getNodePcb } from "@vcad/core"; +import { useDocumentStore, getPcbNodeIds } from "@vcad/core"; import type { NodeId } from "@vcad/ir"; import { PcbBoardMesh } from "./PcbBoardMesh"; export function PcbBoardBodies({ excludeNodeId }: { excludeNodeId: NodeId | null }) { const doc = useDocumentStore((s) => s.document); - const boardIds = getPcbNodeIds(doc); - if (boardIds.length === 0) { - // CRDT dual-path: the board lives in doc.pcb with no PcbBoard node id. - // When a board has edit focus (excludeNodeId set) PcbScene draws it. - return doc.pcb && excludeNodeId == null ? ( - - ) : null; - } + // Real PcbBoard nodes are extruded by the kernel and rendered as parts. + if (getPcbNodeIds(doc).length > 0) return null; - return ( - <> - {boardIds.map((id) => { - if (id === excludeNodeId) return null; - const pcb = getNodePcb(doc, id); - return pcb ? : null; - })} - - ); + // Legacy dual-path: board only in doc.pcb with no node. + return doc.pcb && excludeNodeId == null ? ( + + ) : null; } diff --git a/packages/app/src/data/materials.ts b/packages/app/src/data/materials.ts index 08fe883a..44776db0 100644 --- a/packages/app/src/data/materials.ts +++ b/packages/app/src/data/materials.ts @@ -405,8 +405,27 @@ export function getMaterialsByCategory(category: MaterialCategory): MaterialPres return MATERIAL_PRESETS.filter((m) => m.category === category); } +/** + * Internal material key for a PCB's FR4 substrate. Assigned to PcbBoard parts + * in the document store; resolved here (not in MATERIAL_PRESETS) so the FR4 + * green renders on the board solid without exposing it in the material picker. + */ +export const FR4_MATERIAL_KEY = "__pcb_fr4__"; + +const FR4_PRESET: MaterialPreset = { + key: FR4_MATERIAL_KEY, + name: "FR4", + category: "composite", + // PcbBoardMesh's FR4 green (#0d5a2d). + color: [0.051, 0.353, 0.176], + metallic: 0, + roughness: 0.8, + density: 1850, +}; + /** Find a material by key */ export function getMaterialByKey(key: string): MaterialPreset | undefined { + if (key === FR4_MATERIAL_KEY) return FR4_PRESET; return MATERIAL_PRESETS.find((m) => m.key === key); } diff --git a/packages/engine/src/evaluate.ts b/packages/engine/src/evaluate.ts index 104805ac..b8177375 100644 --- a/packages/engine/src/evaluate.ts +++ b/packages/engine/src/evaluate.ts @@ -887,12 +887,18 @@ function evaluateOp( return { type: "Line" as const, start: [v.x, v.y], end: [next.x, next.y] }; }); const profile = { - origin: [0, 0, -t / 2], + origin: [0, 0, 0], x_dir: [1, 0, 0], y_dir: [0, 1, 0], segments, }; - return Solid.extrude(JSON.stringify(profile), new Float64Array([0, 0, t])); + // The kernel extrudes from z=0; shift down by t/2 to center the slab on + // z=0 so its top surface lands at +t/2, where the copper (layerZ) sits. + return Solid.extrude(JSON.stringify(profile), new Float64Array([0, 0, t])).translate( + 0, + 0, + -t / 2, + ); } case "EmbroideryPattern": diff --git a/packages/kernel-wasm/vcad_kernel_wasm.d.ts b/packages/kernel-wasm/vcad_kernel_wasm.d.ts index 4920b10a..e6ac1e20 100644 --- a/packages/kernel-wasm/vcad_kernel_wasm.d.ts +++ b/packages/kernel-wasm/vcad_kernel_wasm.d.ts @@ -2183,40 +2183,69 @@ export interface InitOutput { readonly wasmannotationlayer_isEmpty: (a: number) => number; readonly wasmannotationlayer_new: () => number; readonly wasmannotationlayer_renderAll: (a: number, b: number, c: number) => any; - readonly physicssim_numJoints: (a: number) => number; readonly solid_linearPattern: (a: number, b: number, c: number, d: number, e: number, f: number) => number; - readonly getCompiledModule: () => any; + readonly physicssim_numJoints: (a: number) => number; + readonly solid_revolve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number]; readonly solid_canExportStep: (a: number) => number; + readonly solid_circularPattern: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; readonly solid_chamfer: (a: number, b: number) => number; readonly solid_fillet: (a: number, b: number) => number; readonly solid_shell: (a: number, b: number) => number; - readonly solid_circularPattern: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; - readonly solid_revolve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number]; - readonly __wbg_wasmkeybindings_free: (a: number, b: number) => void; - readonly checkSheetMetal: (a: number, b: number, c: number, d: number) => [number, number]; - readonly costSheetMetal: (a: number, b: number, c: number, d: number, e: number) => [number, number]; - readonly evaluateSheetMetalChain: (a: number, b: number) => [number, number]; - readonly getSheetMetalBendTable: () => [number, number]; - readonly getSheetMetalMaterials: () => [number, number]; - readonly nestSheetMetalParts: (a: number, b: number, c: number, d: number) => [number, number]; - readonly nestedSheetMetalDxf: (a: number, b: number) => [number, number]; - readonly sheetMetalSequence: (a: number, b: number) => [number, number]; - readonly wasmkeybindings_chordFor: (a: number, b: number, c: number) => [number, number]; - readonly wasmkeybindings_commandsJson: (a: number) => [number, number]; - readonly wasmkeybindings_conflictsJson: (a: number, b: number, c: number) => [number, number]; - readonly wasmkeybindings_loadOverrides: (a: number, b: number, c: number) => number; - readonly wasmkeybindings_new: () => number; - readonly wasmkeybindings_resetAll: (a: number) => void; - readonly wasmkeybindings_resolve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; - readonly wasmkeybindings_saveOverrides: (a: number) => [number, number]; - readonly wasmkeybindings_setBinding: (a: number, b: number, c: number, d: number, e: number) => void; - readonly digitizeSketch: (a: number, b: number, c: number, d: number) => [number, number, number, number]; - readonly digitizeText: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; - readonly isEmbroideryAvailable: () => number; - readonly readEmbroideryDst: (a: number, b: number) => [number, number, number, number]; - readonly readEmbroideryPes: (a: number, b: number) => [number, number, number, number]; - readonly writeEmbroideryDst: (a: number, b: number) => [number, number, number, number]; - readonly writeEmbroideryPes: (a: number, b: number) => [number, number, number, number]; + readonly getCompiledModule: () => any; + readonly __wbg_get_slicersettings_first_layer_height: (a: number) => number; + readonly __wbg_get_slicersettings_infill_density: (a: number) => number; + readonly __wbg_get_slicersettings_infill_pattern: (a: number) => number; + readonly __wbg_get_slicersettings_layer_height: (a: number) => number; + readonly __wbg_get_slicersettings_line_width: (a: number) => number; + readonly __wbg_get_slicersettings_nozzle_diameter: (a: number) => number; + readonly __wbg_get_slicersettings_support_angle: (a: number) => number; + readonly __wbg_get_slicersettings_support_enabled: (a: number) => number; + readonly __wbg_get_slicersettings_wall_count: (a: number) => number; + readonly __wbg_set_slicersettings_first_layer_height: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_infill_density: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_infill_pattern: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_layer_height: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_line_width: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_nozzle_diameter: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_support_angle: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_support_enabled: (a: number, b: number) => void; + readonly __wbg_set_slicersettings_wall_count: (a: number, b: number) => void; + readonly __wbg_sliceresult_free: (a: number, b: number) => void; + readonly __wbg_slicersettings_free: (a: number, b: number) => void; + readonly analyzeForPrinting: (a: number) => [number, number, number]; + readonly checkPrintability: (a: number, b: number, c: number) => [number, number, number]; + readonly ecadBuiltinSymbols: () => [number, number, number]; + readonly ecadCheckDrc: (a: number, b: number) => [number, number, number]; + readonly ecadCheckErc: (a: number, b: number) => [number, number, number]; + readonly ecadComponentMeshes: (a: number, b: number) => [number, number, number]; + readonly ecadComputeRatsnest: (a: number, b: number, c: number, d: number) => [number, number, number]; + readonly ecadFillZones: (a: number, b: number) => [number, number, number]; + readonly ecadGenerateNetlist: (a: number, b: number) => [number, number, number]; + readonly ecadGetSymbol: (a: number, b: number) => [number, number, number]; + readonly ecadLayerZ: (a: number, b: number, c: number, d: number) => number; + readonly ecadNetForWire: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; + readonly ecadRouteNet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number]; + readonly ecadSnapToGridOrPin: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; + readonly estimatePrintCost: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; + readonly generate3mf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; + readonly generate3mfWithGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number, number]; + readonly generateGcode: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; + readonly getSlicerPrinterProfiles: () => [number, number, number]; + readonly isEcadAvailable: () => number; + readonly parseKicadPcb: (a: number, b: number) => [number, number, number]; + readonly recommendPrintSettings: (a: number, b: number, c: number, d: number) => [number, number, number]; + readonly sliceMesh: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; + readonly sliceMeshWithProgress: (a: number, b: number, c: number, d: number, e: number, f: any) => [number, number, number]; + readonly sliceSolid: (a: number, b: number, c: number) => [number, number, number]; + readonly sliceresult_filamentGrams: (a: number) => number; + readonly sliceresult_filamentMm: (a: number) => number; + readonly sliceresult_getLayerPreview: (a: number, b: number) => [number, number, number]; + readonly sliceresult_layerCount: (a: number) => number; + readonly sliceresult_printTimeSeconds: (a: number) => number; + readonly sliceresult_statsJson: (a: number) => [number, number, number, number]; + readonly slicersettings_fromJson: (a: number, b: number) => [number, number, number]; + readonly slicersettings_new: () => number; + readonly isSlicerAvailable: () => number; readonly __wbg_wasmsketchsession_free: (a: number, b: number) => void; readonly sketchCircleSegments: (a: number, b: number, c: number, d: number) => [number, number, number, number]; readonly sketchHitTest: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; @@ -2248,30 +2277,22 @@ export interface InitOutput { readonly wasmsketchsession_solve: (a: number) => number; readonly wasmsketchsession_toggleSelection: (a: number, b: number) => void; readonly wasmsketchsession_undo: (a: number) => number; - readonly __wbg_get_slicersettings_first_layer_height: (a: number) => number; - readonly __wbg_get_slicersettings_infill_density: (a: number) => number; - readonly __wbg_get_slicersettings_infill_pattern: (a: number) => number; - readonly __wbg_get_slicersettings_layer_height: (a: number) => number; - readonly __wbg_get_slicersettings_line_width: (a: number) => number; - readonly __wbg_get_slicersettings_nozzle_diameter: (a: number) => number; - readonly __wbg_get_slicersettings_support_angle: (a: number) => number; - readonly __wbg_get_slicersettings_support_enabled: (a: number) => number; - readonly __wbg_get_slicersettings_wall_count: (a: number) => number; + readonly __wbg_get_wasmcamsettings_feed_rate: (a: number) => number; + readonly __wbg_get_wasmcamsettings_plunge_rate: (a: number) => number; readonly __wbg_get_wasmcamsettings_retract_z: (a: number) => number; - readonly __wbg_set_slicersettings_first_layer_height: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_infill_density: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_infill_pattern: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_layer_height: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_line_width: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_nozzle_diameter: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_support_angle: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_support_enabled: (a: number, b: number) => void; - readonly __wbg_set_slicersettings_wall_count: (a: number, b: number) => void; + readonly __wbg_get_wasmcamsettings_safe_z: (a: number) => number; + readonly __wbg_get_wasmcamsettings_spindle_rpm: (a: number) => number; + readonly __wbg_get_wasmcamsettings_stepdown: (a: number) => number; + readonly __wbg_get_wasmcamsettings_stepover: (a: number) => number; + readonly __wbg_set_wasmcamsettings_feed_rate: (a: number, b: number) => void; + readonly __wbg_set_wasmcamsettings_plunge_rate: (a: number, b: number) => void; readonly __wbg_set_wasmcamsettings_retract_z: (a: number, b: number) => void; - readonly __wbg_sliceresult_free: (a: number, b: number) => void; - readonly __wbg_slicersettings_free: (a: number, b: number) => void; + readonly __wbg_set_wasmcamsettings_safe_z: (a: number, b: number) => void; + readonly __wbg_set_wasmcamsettings_spindle_rpm: (a: number, b: number) => void; + readonly __wbg_set_wasmcamsettings_stepdown: (a: number, b: number) => void; + readonly __wbg_set_wasmcamsettings_stepover: (a: number, b: number) => void; readonly __wbg_wasmcamsettings_free: (a: number, b: number) => void; - readonly analyzeForPrinting: (a: number) => [number, number, number]; + readonly __wbg_wasmkeybindings_free: (a: number, b: number) => void; readonly camDropCutter: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number]; readonly camExportGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number]; readonly camExportLinuxCnc: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; @@ -2282,55 +2303,34 @@ export interface InitOutput { readonly camGenerateRoughing3d: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number]; readonly camGetDefaultTools: () => [number, number, number, number]; readonly camToolpathStats: (a: number, b: number) => [number, number, number]; - readonly checkPrintability: (a: number, b: number, c: number) => [number, number, number]; - readonly estimatePrintCost: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; - readonly generate3mf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; - readonly generate3mfWithGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number, number]; - readonly generateGcode: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; - readonly getSlicerPrinterProfiles: () => [number, number, number]; + readonly digitizeSketch: (a: number, b: number, c: number, d: number) => [number, number, number, number]; + readonly digitizeText: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; readonly isCamAvailable: () => number; - readonly recommendPrintSettings: (a: number, b: number, c: number, d: number) => [number, number, number]; - readonly sliceMesh: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; - readonly sliceMeshWithProgress: (a: number, b: number, c: number, d: number, e: number, f: any) => [number, number, number]; - readonly sliceSolid: (a: number, b: number, c: number) => [number, number, number]; - readonly sliceresult_filamentGrams: (a: number) => number; - readonly sliceresult_filamentMm: (a: number) => number; - readonly sliceresult_getLayerPreview: (a: number, b: number) => [number, number, number]; - readonly sliceresult_layerCount: (a: number) => number; - readonly sliceresult_printTimeSeconds: (a: number) => number; - readonly sliceresult_statsJson: (a: number) => [number, number, number, number]; - readonly slicersettings_fromJson: (a: number, b: number) => [number, number, number]; - readonly slicersettings_new: () => number; + readonly readEmbroideryDst: (a: number, b: number) => [number, number, number, number]; + readonly readEmbroideryPes: (a: number, b: number) => [number, number, number, number]; readonly wasmcamsettings_fromJson: (a: number, b: number) => [number, number, number]; readonly wasmcamsettings_new: () => number; - readonly __wbg_set_wasmcamsettings_feed_rate: (a: number, b: number) => void; - readonly __wbg_set_wasmcamsettings_plunge_rate: (a: number, b: number) => void; - readonly __wbg_set_wasmcamsettings_safe_z: (a: number, b: number) => void; - readonly __wbg_set_wasmcamsettings_spindle_rpm: (a: number, b: number) => void; - readonly __wbg_set_wasmcamsettings_stepdown: (a: number, b: number) => void; - readonly __wbg_set_wasmcamsettings_stepover: (a: number, b: number) => void; - readonly isSlicerAvailable: () => number; - readonly __wbg_get_wasmcamsettings_feed_rate: (a: number) => number; - readonly __wbg_get_wasmcamsettings_plunge_rate: (a: number) => number; - readonly __wbg_get_wasmcamsettings_safe_z: (a: number) => number; - readonly __wbg_get_wasmcamsettings_spindle_rpm: (a: number) => number; - readonly __wbg_get_wasmcamsettings_stepdown: (a: number) => number; - readonly __wbg_get_wasmcamsettings_stepover: (a: number) => number; + readonly wasmkeybindings_chordFor: (a: number, b: number, c: number) => [number, number]; + readonly wasmkeybindings_commandsJson: (a: number) => [number, number]; + readonly wasmkeybindings_conflictsJson: (a: number, b: number, c: number) => [number, number]; + readonly wasmkeybindings_loadOverrides: (a: number, b: number, c: number) => number; + readonly wasmkeybindings_new: () => number; + readonly wasmkeybindings_resetAll: (a: number) => void; + readonly wasmkeybindings_resolve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; + readonly wasmkeybindings_saveOverrides: (a: number) => [number, number]; + readonly wasmkeybindings_setBinding: (a: number, b: number, c: number, d: number, e: number) => void; + readonly writeEmbroideryDst: (a: number, b: number) => [number, number, number, number]; + readonly writeEmbroideryPes: (a: number, b: number) => [number, number, number, number]; + readonly isEmbroideryAvailable: () => number; + readonly checkSheetMetal: (a: number, b: number, c: number, d: number) => [number, number]; + readonly costSheetMetal: (a: number, b: number, c: number, d: number, e: number) => [number, number]; + readonly evaluateSheetMetalChain: (a: number, b: number) => [number, number]; + readonly getSheetMetalBendTable: () => [number, number]; + readonly getSheetMetalMaterials: () => [number, number]; + readonly nestSheetMetalParts: (a: number, b: number, c: number, d: number) => [number, number]; + readonly nestedSheetMetalDxf: (a: number, b: number) => [number, number]; + readonly sheetMetalSequence: (a: number, b: number) => [number, number]; readonly __wbg_wasmdocumentengine_free: (a: number, b: number) => void; - readonly ecadBuiltinSymbols: () => [number, number, number]; - readonly ecadCheckDrc: (a: number, b: number) => [number, number, number]; - readonly ecadCheckErc: (a: number, b: number) => [number, number, number]; - readonly ecadComponentMeshes: (a: number, b: number) => [number, number, number]; - readonly ecadComputeRatsnest: (a: number, b: number, c: number, d: number) => [number, number, number]; - readonly ecadFillZones: (a: number, b: number) => [number, number, number]; - readonly ecadGenerateNetlist: (a: number, b: number) => [number, number, number]; - readonly ecadGetSymbol: (a: number, b: number) => [number, number, number]; - readonly ecadLayerZ: (a: number, b: number, c: number, d: number) => number; - readonly ecadNetForWire: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; - readonly ecadRouteNet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number]; - readonly ecadSnapToGridOrPin: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; - readonly isEcadAvailable: () => number; - readonly parseKicadPcb: (a: number, b: number) => [number, number, number]; readonly wasmdocumentengine_add_feature: (a: number, b: number, c: number) => any; readonly wasmdocumentengine_can_redo: (a: number) => number; readonly wasmdocumentengine_can_undo: (a: number) => number; @@ -2361,11 +2361,11 @@ export interface InitOutput { readonly wasmdocumentengine_set_visible: (a: number, b: number, c: number, d: number) => any; readonly wasmdocumentengine_undo: (a: number) => any; readonly wasmdocumentengine_update_feature: (a: number, b: number, c: number, d: number, e: number) => any; - readonly wasm_bindgen__closure__destroy__h449c01a9b484b49e: (a: number, b: number) => void; - readonly wasm_bindgen__closure__destroy__h5fc04d9207857a4f: (a: number, b: number) => void; - readonly wasm_bindgen__convert__closures_____invoke__h909ef70400a4aa92: (a: number, b: number, c: any, d: any) => void; - readonly wasm_bindgen__convert__closures_____invoke__h97f5d3065e41a070: (a: number, b: number, c: any) => void; - readonly wasm_bindgen__convert__closures_____invoke__h93fa00cb00fe3f24: (a: number, b: number, c: any) => void; + readonly wasm_bindgen__closure__destroy__h30743bca3150d93c: (a: number, b: number) => void; + readonly wasm_bindgen__closure__destroy__hfdadf281ff0f1c56: (a: number, b: number) => void; + readonly wasm_bindgen__convert__closures_____invoke__h3c7e771ac0cfa72e: (a: number, b: number, c: any, d: any) => void; + readonly wasm_bindgen__convert__closures_____invoke__hcf7d3eaee8800b37: (a: number, b: number, c: any) => void; + readonly wasm_bindgen__convert__closures_____invoke__h9bdf540eb7e61590: (a: number, b: number, c: any) => void; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_exn_store: (a: number) => void; diff --git a/packages/kernel-wasm/vcad_kernel_wasm.js b/packages/kernel-wasm/vcad_kernel_wasm.js index 69b2c0ac..0425f91a 100644 --- a/packages/kernel-wasm/vcad_kernel_wasm.js +++ b/packages/kernel-wasm/vcad_kernel_wasm.js @@ -1545,7 +1545,7 @@ export class WasmCamSettings { * @returns {number} */ get feed_rate() { - const ret = wasm.__wbg_get_slicersettings_nozzle_diameter(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_feed_rate(this.__wbg_ptr); return ret; } /** @@ -1553,7 +1553,7 @@ export class WasmCamSettings { * @returns {number} */ get plunge_rate() { - const ret = wasm.__wbg_get_slicersettings_line_width(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_plunge_rate(this.__wbg_ptr); return ret; } /** @@ -1569,7 +1569,7 @@ export class WasmCamSettings { * @returns {number} */ get safe_z() { - const ret = wasm.__wbg_get_slicersettings_support_angle(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_safe_z(this.__wbg_ptr); return ret; } /** @@ -1577,7 +1577,7 @@ export class WasmCamSettings { * @returns {number} */ get spindle_rpm() { - const ret = wasm.__wbg_get_slicersettings_infill_density(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_spindle_rpm(this.__wbg_ptr); return ret; } /** @@ -1585,7 +1585,7 @@ export class WasmCamSettings { * @returns {number} */ get stepdown() { - const ret = wasm.__wbg_get_slicersettings_first_layer_height(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_stepdown(this.__wbg_ptr); return ret; } /** @@ -1593,7 +1593,7 @@ export class WasmCamSettings { * @returns {number} */ get stepover() { - const ret = wasm.__wbg_get_slicersettings_layer_height(this.__wbg_ptr); + const ret = wasm.__wbg_get_wasmcamsettings_stepover(this.__wbg_ptr); return ret; } /** @@ -1601,14 +1601,14 @@ export class WasmCamSettings { * @param {number} arg0 */ set feed_rate(arg0) { - wasm.__wbg_set_slicersettings_nozzle_diameter(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_feed_rate(this.__wbg_ptr, arg0); } /** * Plunge rate (mm/min). * @param {number} arg0 */ set plunge_rate(arg0) { - wasm.__wbg_set_slicersettings_line_width(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_plunge_rate(this.__wbg_ptr, arg0); } /** * Retract Z height (mm). @@ -1622,28 +1622,28 @@ export class WasmCamSettings { * @param {number} arg0 */ set safe_z(arg0) { - wasm.__wbg_set_slicersettings_support_angle(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_safe_z(this.__wbg_ptr, arg0); } /** * Spindle RPM. * @param {number} arg0 */ set spindle_rpm(arg0) { - wasm.__wbg_set_slicersettings_infill_density(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_spindle_rpm(this.__wbg_ptr, arg0); } /** * Stepdown distance (mm). * @param {number} arg0 */ set stepdown(arg0) { - wasm.__wbg_set_slicersettings_first_layer_height(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_stepdown(this.__wbg_ptr, arg0); } /** * Stepover distance (mm). * @param {number} arg0 */ set stepover(arg0) { - wasm.__wbg_set_slicersettings_layer_height(this.__wbg_ptr, arg0); + wasm.__wbg_set_wasmcamsettings_stepover(this.__wbg_ptr, arg0); } /** * Create from JSON. @@ -4098,7 +4098,7 @@ export function isEcadAvailable() { * @returns {boolean} */ export function isEmbroideryAvailable() { - const ret = wasm.isEmbroideryAvailable(); + const ret = wasm.isCamAvailable(); return ret !== 0; } @@ -4125,7 +4125,7 @@ export function isPhysicsAvailable() { * @returns {boolean} */ export function isSlicerAvailable() { - const ret = wasm.isCamAvailable(); + const ret = wasm.isEcadAvailable(); return ret !== 0; } @@ -6339,7 +6339,7 @@ function __wbg_get_imports() { const a = state0.a; state0.a = 0; try { - return wasm_bindgen__convert__closures_____invoke__h909ef70400a4aa92(a, state0.b, arg0, arg1); + return wasm_bindgen__convert__closures_____invoke__h3c7e771ac0cfa72e(a, state0.b, arg0, arg1); } finally { state0.a = a; } @@ -6924,13 +6924,13 @@ function __wbg_get_imports() { arg0.writeTexture(arg1, arg2, arg3, arg4); }, __wbindgen_cast_0000000000000001: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { dtor_idx: 2252, function: Function { arguments: [NamedExternref("GPUUncapturedErrorEvent")], shim_idx: 2253, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h449c01a9b484b49e, wasm_bindgen__convert__closures_____invoke__h97f5d3065e41a070); + // Cast intrinsic for `Closure(Closure { dtor_idx: 2201, function: Function { arguments: [NamedExternref("GPUUncapturedErrorEvent")], shim_idx: 2202, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h30743bca3150d93c, wasm_bindgen__convert__closures_____invoke__hcf7d3eaee8800b37); return ret; }, __wbindgen_cast_0000000000000002: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { dtor_idx: 2965, function: Function { arguments: [Externref], shim_idx: 2966, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h5fc04d9207857a4f, wasm_bindgen__convert__closures_____invoke__h93fa00cb00fe3f24); + // Cast intrinsic for `Closure(Closure { dtor_idx: 2985, function: Function { arguments: [Externref], shim_idx: 2986, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__hfdadf281ff0f1c56, wasm_bindgen__convert__closures_____invoke__h9bdf540eb7e61590); return ret; }, __wbindgen_cast_0000000000000003: function(arg0) { @@ -7018,16 +7018,16 @@ function __wbg_get_imports() { }; } -function wasm_bindgen__convert__closures_____invoke__h97f5d3065e41a070(arg0, arg1, arg2) { - wasm.wasm_bindgen__convert__closures_____invoke__h97f5d3065e41a070(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__hcf7d3eaee8800b37(arg0, arg1, arg2) { + wasm.wasm_bindgen__convert__closures_____invoke__hcf7d3eaee8800b37(arg0, arg1, arg2); } -function wasm_bindgen__convert__closures_____invoke__h93fa00cb00fe3f24(arg0, arg1, arg2) { - wasm.wasm_bindgen__convert__closures_____invoke__h93fa00cb00fe3f24(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__h9bdf540eb7e61590(arg0, arg1, arg2) { + wasm.wasm_bindgen__convert__closures_____invoke__h9bdf540eb7e61590(arg0, arg1, arg2); } -function wasm_bindgen__convert__closures_____invoke__h909ef70400a4aa92(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures_____invoke__h909ef70400a4aa92(arg0, arg1, arg2, arg3); +function wasm_bindgen__convert__closures_____invoke__h3c7e771ac0cfa72e(arg0, arg1, arg2, arg3) { + wasm.wasm_bindgen__convert__closures_____invoke__h3c7e771ac0cfa72e(arg0, arg1, arg2, arg3); } diff --git a/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm b/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm index 4cb4f015..a6bc0156 100644 Binary files a/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm and b/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm differ diff --git a/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm.d.ts b/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm.d.ts index 97e94f0c..3f7fa628 100644 --- a/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm.d.ts +++ b/packages/kernel-wasm/vcad_kernel_wasm_bg.wasm.d.ts @@ -119,40 +119,69 @@ export const wasmannotationlayer_clear: (a: number) => void; export const wasmannotationlayer_isEmpty: (a: number) => number; export const wasmannotationlayer_new: () => number; export const wasmannotationlayer_renderAll: (a: number, b: number, c: number) => any; -export const physicssim_numJoints: (a: number) => number; export const solid_linearPattern: (a: number, b: number, c: number, d: number, e: number, f: number) => number; -export const getCompiledModule: () => any; +export const physicssim_numJoints: (a: number) => number; +export const solid_revolve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number]; export const solid_canExportStep: (a: number) => number; +export const solid_circularPattern: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; export const solid_chamfer: (a: number, b: number) => number; export const solid_fillet: (a: number, b: number) => number; export const solid_shell: (a: number, b: number) => number; -export const solid_circularPattern: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; -export const solid_revolve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number]; -export const __wbg_wasmkeybindings_free: (a: number, b: number) => void; -export const checkSheetMetal: (a: number, b: number, c: number, d: number) => [number, number]; -export const costSheetMetal: (a: number, b: number, c: number, d: number, e: number) => [number, number]; -export const evaluateSheetMetalChain: (a: number, b: number) => [number, number]; -export const getSheetMetalBendTable: () => [number, number]; -export const getSheetMetalMaterials: () => [number, number]; -export const nestSheetMetalParts: (a: number, b: number, c: number, d: number) => [number, number]; -export const nestedSheetMetalDxf: (a: number, b: number) => [number, number]; -export const sheetMetalSequence: (a: number, b: number) => [number, number]; -export const wasmkeybindings_chordFor: (a: number, b: number, c: number) => [number, number]; -export const wasmkeybindings_commandsJson: (a: number) => [number, number]; -export const wasmkeybindings_conflictsJson: (a: number, b: number, c: number) => [number, number]; -export const wasmkeybindings_loadOverrides: (a: number, b: number, c: number) => number; -export const wasmkeybindings_new: () => number; -export const wasmkeybindings_resetAll: (a: number) => void; -export const wasmkeybindings_resolve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; -export const wasmkeybindings_saveOverrides: (a: number) => [number, number]; -export const wasmkeybindings_setBinding: (a: number, b: number, c: number, d: number, e: number) => void; -export const digitizeSketch: (a: number, b: number, c: number, d: number) => [number, number, number, number]; -export const digitizeText: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; -export const isEmbroideryAvailable: () => number; -export const readEmbroideryDst: (a: number, b: number) => [number, number, number, number]; -export const readEmbroideryPes: (a: number, b: number) => [number, number, number, number]; -export const writeEmbroideryDst: (a: number, b: number) => [number, number, number, number]; -export const writeEmbroideryPes: (a: number, b: number) => [number, number, number, number]; +export const getCompiledModule: () => any; +export const __wbg_get_slicersettings_first_layer_height: (a: number) => number; +export const __wbg_get_slicersettings_infill_density: (a: number) => number; +export const __wbg_get_slicersettings_infill_pattern: (a: number) => number; +export const __wbg_get_slicersettings_layer_height: (a: number) => number; +export const __wbg_get_slicersettings_line_width: (a: number) => number; +export const __wbg_get_slicersettings_nozzle_diameter: (a: number) => number; +export const __wbg_get_slicersettings_support_angle: (a: number) => number; +export const __wbg_get_slicersettings_support_enabled: (a: number) => number; +export const __wbg_get_slicersettings_wall_count: (a: number) => number; +export const __wbg_set_slicersettings_first_layer_height: (a: number, b: number) => void; +export const __wbg_set_slicersettings_infill_density: (a: number, b: number) => void; +export const __wbg_set_slicersettings_infill_pattern: (a: number, b: number) => void; +export const __wbg_set_slicersettings_layer_height: (a: number, b: number) => void; +export const __wbg_set_slicersettings_line_width: (a: number, b: number) => void; +export const __wbg_set_slicersettings_nozzle_diameter: (a: number, b: number) => void; +export const __wbg_set_slicersettings_support_angle: (a: number, b: number) => void; +export const __wbg_set_slicersettings_support_enabled: (a: number, b: number) => void; +export const __wbg_set_slicersettings_wall_count: (a: number, b: number) => void; +export const __wbg_sliceresult_free: (a: number, b: number) => void; +export const __wbg_slicersettings_free: (a: number, b: number) => void; +export const analyzeForPrinting: (a: number) => [number, number, number]; +export const checkPrintability: (a: number, b: number, c: number) => [number, number, number]; +export const ecadBuiltinSymbols: () => [number, number, number]; +export const ecadCheckDrc: (a: number, b: number) => [number, number, number]; +export const ecadCheckErc: (a: number, b: number) => [number, number, number]; +export const ecadComponentMeshes: (a: number, b: number) => [number, number, number]; +export const ecadComputeRatsnest: (a: number, b: number, c: number, d: number) => [number, number, number]; +export const ecadFillZones: (a: number, b: number) => [number, number, number]; +export const ecadGenerateNetlist: (a: number, b: number) => [number, number, number]; +export const ecadGetSymbol: (a: number, b: number) => [number, number, number]; +export const ecadLayerZ: (a: number, b: number, c: number, d: number) => number; +export const ecadNetForWire: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; +export const ecadRouteNet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number]; +export const ecadSnapToGridOrPin: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; +export const estimatePrintCost: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; +export const generate3mf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; +export const generate3mfWithGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number, number]; +export const generateGcode: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; +export const getSlicerPrinterProfiles: () => [number, number, number]; +export const isEcadAvailable: () => number; +export const parseKicadPcb: (a: number, b: number) => [number, number, number]; +export const recommendPrintSettings: (a: number, b: number, c: number, d: number) => [number, number, number]; +export const sliceMesh: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; +export const sliceMeshWithProgress: (a: number, b: number, c: number, d: number, e: number, f: any) => [number, number, number]; +export const sliceSolid: (a: number, b: number, c: number) => [number, number, number]; +export const sliceresult_filamentGrams: (a: number) => number; +export const sliceresult_filamentMm: (a: number) => number; +export const sliceresult_getLayerPreview: (a: number, b: number) => [number, number, number]; +export const sliceresult_layerCount: (a: number) => number; +export const sliceresult_printTimeSeconds: (a: number) => number; +export const sliceresult_statsJson: (a: number) => [number, number, number, number]; +export const slicersettings_fromJson: (a: number, b: number) => [number, number, number]; +export const slicersettings_new: () => number; +export const isSlicerAvailable: () => number; export const __wbg_wasmsketchsession_free: (a: number, b: number) => void; export const sketchCircleSegments: (a: number, b: number, c: number, d: number) => [number, number, number, number]; export const sketchHitTest: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; @@ -184,30 +213,22 @@ export const wasmsketchsession_snapshot: (a: number) => [number, number, number, export const wasmsketchsession_solve: (a: number) => number; export const wasmsketchsession_toggleSelection: (a: number, b: number) => void; export const wasmsketchsession_undo: (a: number) => number; -export const __wbg_get_slicersettings_first_layer_height: (a: number) => number; -export const __wbg_get_slicersettings_infill_density: (a: number) => number; -export const __wbg_get_slicersettings_infill_pattern: (a: number) => number; -export const __wbg_get_slicersettings_layer_height: (a: number) => number; -export const __wbg_get_slicersettings_line_width: (a: number) => number; -export const __wbg_get_slicersettings_nozzle_diameter: (a: number) => number; -export const __wbg_get_slicersettings_support_angle: (a: number) => number; -export const __wbg_get_slicersettings_support_enabled: (a: number) => number; -export const __wbg_get_slicersettings_wall_count: (a: number) => number; +export const __wbg_get_wasmcamsettings_feed_rate: (a: number) => number; +export const __wbg_get_wasmcamsettings_plunge_rate: (a: number) => number; export const __wbg_get_wasmcamsettings_retract_z: (a: number) => number; -export const __wbg_set_slicersettings_first_layer_height: (a: number, b: number) => void; -export const __wbg_set_slicersettings_infill_density: (a: number, b: number) => void; -export const __wbg_set_slicersettings_infill_pattern: (a: number, b: number) => void; -export const __wbg_set_slicersettings_layer_height: (a: number, b: number) => void; -export const __wbg_set_slicersettings_line_width: (a: number, b: number) => void; -export const __wbg_set_slicersettings_nozzle_diameter: (a: number, b: number) => void; -export const __wbg_set_slicersettings_support_angle: (a: number, b: number) => void; -export const __wbg_set_slicersettings_support_enabled: (a: number, b: number) => void; -export const __wbg_set_slicersettings_wall_count: (a: number, b: number) => void; +export const __wbg_get_wasmcamsettings_safe_z: (a: number) => number; +export const __wbg_get_wasmcamsettings_spindle_rpm: (a: number) => number; +export const __wbg_get_wasmcamsettings_stepdown: (a: number) => number; +export const __wbg_get_wasmcamsettings_stepover: (a: number) => number; +export const __wbg_set_wasmcamsettings_feed_rate: (a: number, b: number) => void; +export const __wbg_set_wasmcamsettings_plunge_rate: (a: number, b: number) => void; export const __wbg_set_wasmcamsettings_retract_z: (a: number, b: number) => void; -export const __wbg_sliceresult_free: (a: number, b: number) => void; -export const __wbg_slicersettings_free: (a: number, b: number) => void; +export const __wbg_set_wasmcamsettings_safe_z: (a: number, b: number) => void; +export const __wbg_set_wasmcamsettings_spindle_rpm: (a: number, b: number) => void; +export const __wbg_set_wasmcamsettings_stepdown: (a: number, b: number) => void; +export const __wbg_set_wasmcamsettings_stepover: (a: number, b: number) => void; export const __wbg_wasmcamsettings_free: (a: number, b: number) => void; -export const analyzeForPrinting: (a: number) => [number, number, number]; +export const __wbg_wasmkeybindings_free: (a: number, b: number) => void; export const camDropCutter: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number]; export const camExportGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number]; export const camExportLinuxCnc: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; @@ -218,55 +239,34 @@ export const camGeneratePocket: (a: number, b: number, c: number, d: number, e: export const camGenerateRoughing3d: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number]; export const camGetDefaultTools: () => [number, number, number, number]; export const camToolpathStats: (a: number, b: number) => [number, number, number]; -export const checkPrintability: (a: number, b: number, c: number) => [number, number, number]; -export const estimatePrintCost: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; -export const generate3mf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number]; -export const generate3mfWithGcode: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number, number]; -export const generateGcode: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; -export const getSlicerPrinterProfiles: () => [number, number, number]; +export const digitizeSketch: (a: number, b: number, c: number, d: number) => [number, number, number, number]; +export const digitizeText: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; export const isCamAvailable: () => number; -export const recommendPrintSettings: (a: number, b: number, c: number, d: number) => [number, number, number]; -export const sliceMesh: (a: number, b: number, c: number, d: number, e: number) => [number, number, number]; -export const sliceMeshWithProgress: (a: number, b: number, c: number, d: number, e: number, f: any) => [number, number, number]; -export const sliceSolid: (a: number, b: number, c: number) => [number, number, number]; -export const sliceresult_filamentGrams: (a: number) => number; -export const sliceresult_filamentMm: (a: number) => number; -export const sliceresult_getLayerPreview: (a: number, b: number) => [number, number, number]; -export const sliceresult_layerCount: (a: number) => number; -export const sliceresult_printTimeSeconds: (a: number) => number; -export const sliceresult_statsJson: (a: number) => [number, number, number, number]; -export const slicersettings_fromJson: (a: number, b: number) => [number, number, number]; -export const slicersettings_new: () => number; +export const readEmbroideryDst: (a: number, b: number) => [number, number, number, number]; +export const readEmbroideryPes: (a: number, b: number) => [number, number, number, number]; export const wasmcamsettings_fromJson: (a: number, b: number) => [number, number, number]; export const wasmcamsettings_new: () => number; -export const __wbg_set_wasmcamsettings_feed_rate: (a: number, b: number) => void; -export const __wbg_set_wasmcamsettings_plunge_rate: (a: number, b: number) => void; -export const __wbg_set_wasmcamsettings_safe_z: (a: number, b: number) => void; -export const __wbg_set_wasmcamsettings_spindle_rpm: (a: number, b: number) => void; -export const __wbg_set_wasmcamsettings_stepdown: (a: number, b: number) => void; -export const __wbg_set_wasmcamsettings_stepover: (a: number, b: number) => void; -export const isSlicerAvailable: () => number; -export const __wbg_get_wasmcamsettings_feed_rate: (a: number) => number; -export const __wbg_get_wasmcamsettings_plunge_rate: (a: number) => number; -export const __wbg_get_wasmcamsettings_safe_z: (a: number) => number; -export const __wbg_get_wasmcamsettings_spindle_rpm: (a: number) => number; -export const __wbg_get_wasmcamsettings_stepdown: (a: number) => number; -export const __wbg_get_wasmcamsettings_stepover: (a: number) => number; +export const wasmkeybindings_chordFor: (a: number, b: number, c: number) => [number, number]; +export const wasmkeybindings_commandsJson: (a: number) => [number, number]; +export const wasmkeybindings_conflictsJson: (a: number, b: number, c: number) => [number, number]; +export const wasmkeybindings_loadOverrides: (a: number, b: number, c: number) => number; +export const wasmkeybindings_new: () => number; +export const wasmkeybindings_resetAll: (a: number) => void; +export const wasmkeybindings_resolve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; +export const wasmkeybindings_saveOverrides: (a: number) => [number, number]; +export const wasmkeybindings_setBinding: (a: number, b: number, c: number, d: number, e: number) => void; +export const writeEmbroideryDst: (a: number, b: number) => [number, number, number, number]; +export const writeEmbroideryPes: (a: number, b: number) => [number, number, number, number]; +export const isEmbroideryAvailable: () => number; +export const checkSheetMetal: (a: number, b: number, c: number, d: number) => [number, number]; +export const costSheetMetal: (a: number, b: number, c: number, d: number, e: number) => [number, number]; +export const evaluateSheetMetalChain: (a: number, b: number) => [number, number]; +export const getSheetMetalBendTable: () => [number, number]; +export const getSheetMetalMaterials: () => [number, number]; +export const nestSheetMetalParts: (a: number, b: number, c: number, d: number) => [number, number]; +export const nestedSheetMetalDxf: (a: number, b: number) => [number, number]; +export const sheetMetalSequence: (a: number, b: number) => [number, number]; export const __wbg_wasmdocumentengine_free: (a: number, b: number) => void; -export const ecadBuiltinSymbols: () => [number, number, number]; -export const ecadCheckDrc: (a: number, b: number) => [number, number, number]; -export const ecadCheckErc: (a: number, b: number) => [number, number, number]; -export const ecadComponentMeshes: (a: number, b: number) => [number, number, number]; -export const ecadComputeRatsnest: (a: number, b: number, c: number, d: number) => [number, number, number]; -export const ecadFillZones: (a: number, b: number) => [number, number, number]; -export const ecadGenerateNetlist: (a: number, b: number) => [number, number, number]; -export const ecadGetSymbol: (a: number, b: number) => [number, number, number]; -export const ecadLayerZ: (a: number, b: number, c: number, d: number) => number; -export const ecadNetForWire: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; -export const ecadRouteNet: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number]; -export const ecadSnapToGridOrPin: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; -export const isEcadAvailable: () => number; -export const parseKicadPcb: (a: number, b: number) => [number, number, number]; export const wasmdocumentengine_add_feature: (a: number, b: number, c: number) => any; export const wasmdocumentengine_can_redo: (a: number) => number; export const wasmdocumentengine_can_undo: (a: number) => number; @@ -297,11 +297,11 @@ export const wasmdocumentengine_set_translation: (a: number, b: number, c: numbe export const wasmdocumentengine_set_visible: (a: number, b: number, c: number, d: number) => any; export const wasmdocumentengine_undo: (a: number) => any; export const wasmdocumentengine_update_feature: (a: number, b: number, c: number, d: number, e: number) => any; -export const wasm_bindgen__closure__destroy__h449c01a9b484b49e: (a: number, b: number) => void; -export const wasm_bindgen__closure__destroy__h5fc04d9207857a4f: (a: number, b: number) => void; -export const wasm_bindgen__convert__closures_____invoke__h909ef70400a4aa92: (a: number, b: number, c: any, d: any) => void; -export const wasm_bindgen__convert__closures_____invoke__h97f5d3065e41a070: (a: number, b: number, c: any) => void; -export const wasm_bindgen__convert__closures_____invoke__h93fa00cb00fe3f24: (a: number, b: number, c: any) => void; +export const wasm_bindgen__closure__destroy__h30743bca3150d93c: (a: number, b: number) => void; +export const wasm_bindgen__closure__destroy__hfdadf281ff0f1c56: (a: number, b: number) => void; +export const wasm_bindgen__convert__closures_____invoke__h3c7e771ac0cfa72e: (a: number, b: number, c: any, d: any) => void; +export const wasm_bindgen__convert__closures_____invoke__hcf7d3eaee8800b37: (a: number, b: number, c: any) => void; +export const wasm_bindgen__convert__closures_____invoke__h9bdf540eb7e61590: (a: number, b: number, c: any) => void; export const __wbindgen_malloc: (a: number, b: number) => number; export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; export const __wbindgen_exn_store: (a: number) => void;