Recommended test
Use an Inside circular opening, a pocket, and a detailed Outside part contour with several thousand total moves.
- Open CAM in 3D, then choose Complete job · ordered sequence from the Animate selector. Both operations should remain fully visible.
- Press Play. The cutter should machine operation 1, remain at Safe Z while linking, and then begin operation 2.
- Pause during a cut, orbit the camera, then resume. Camera movement must not change animation progress.
- Drag the progress slider. The cutter, move number, pass, motion type, and XYZ readout should update together without the player changing height on retract moves.
- Choose 25× and play near the final pass. The cutter should lift at each gold tab, cross at tab-top Z, and lower afterward.
- Press Restart. Playback should return to job zero at 0% and remain ready.
- Switch Climb to Conventional or drag a tab in 2D, then return to 3D. Animation should reset and follow the rebuilt motion plan.
- Select only the circular opening. The outside profile should remain as translucent context and its summary should read Not in playback. Click the outside-profile summary to switch focus.
- Play the complete job at 10× and 25×. Cutter motion should remain smooth while the progress bar and text update at a calmer readable rate.
- Make the operation invalid. Animation should become unavailable instead of playing unverified motion.
01 · PLAYBACK
Direct controls without changing the job
The player begins directly with the Animate selector because it already identifies the active operation or complete job. When one operation is selected, it remains vivid while the others are dimmed and labeled Not in playback. Complete-job playback uses only operations set to On, follows their visible CAM order, and joins consecutive operations at Safe Z. When the next operation uses a different diameter, playback pauses with the exact cutter size and requires Continue preview. Operations set to Off remain subdued and labeled Excluded from complete job, but can still be selected for individual playback.
02 · MOTION LANGUAGE
The cutter tip identifies the active move
BlueSafe-height rapid positioningPale blueApproach through the cleared entry channelMintDescending path rampGoldExplicit straight plungeGreenContour or pocket cutting motionLight goldVertical lift onto a holding tabPurpleVertical lower after a holding tabLavenderSafe retractThe same names appear in the 2D Motion Plan inspector. Color is supplementary: the text readout always names the current move.
03 · PREVIEW TIMING
Proportional movement without a cycle time promise
Each valid operation shows its standalone estimated duration in the 3D summary. The job estimate follows only enabled operations in their numbered order and includes the Safe-Z links between them; it is therefore calculated from the combined plan rather than by simply adding the displayed standalone times.
Feed, plunge, and tab-transition durations use each motion record's stored rate. Circular duration uses exact radius × absolute sweep—not the endpoint chord or display polyline. Rapid and retract records do not yet contain a machine-specific rapid rate, so animation and estimates use an explicit preview-only value of 3000 mm/min.
Shapeoko acceleration, GRBL look-ahead, spindle startup, tool changes, probing, and operator pauses are not modeled. The 1× to 25× selector changes presentation speed only and never changes the estimate or any stored cutting parameter.
04 · REUSABLE FOUNDATION
Motion data remains independent of Three.js
Validated CAM operation
↓
Typed motion records
↓
Cached time + interpolation timeline
↓
Binary-search sampling
↓
Direct 3D cutter transform
↓
Throttled UI + changed material tilesThe timeline calculates linear distance or exact circular arc length, segment duration, active move, interpolation fraction, and current XYZ without importing React or Three.js. Sampling uses cumulative move times and logarithmic lookup, so later moves do not cost more to find.
During playback, the cutter transform and its motion color update at display-frame speed. Progress, text, and material refresh ten times per second. Flat-tool, V-bit, and mixed-cutter material playback mutates only tiles reached since the previous update and uploads their displacement, color, mask, and normal textures. The live mask exposes only the cut footprint and its edge transition, so an allocated tile does not appear as a large square around the cutter; untouched stock and unchanged tiles remain stable.
CURRENT SCOPE
Visual verification rather than machine simulation
- Plays one selected operation or every enabled operation in numbered job order
- Standalone and mixed-path arcs animate from exact centre/radius/sweep data rather than display samples
- Mixed open chains preserve typed linear/circular order; splines and general closed contours preserve their approved G1 samples
- Material mode progressively removes stock from the same timeline using adaptive sparse high-resolution tiles for flat and V-bit cutters
- No acceleration, jerk, controller look-ahead, or exact cycle-time prediction
- No holder, collet, clamp, or collision checking
- No spindle rotation visualization
- Local NC Export packages the matching G-code only after preflight