Electronic Timing builds a temporal mesh: a triangulated surface in plan view where Z represents firing time in milliseconds, not ground elevation. You draw one or two timing contours (polylines or sampled Bézier curves), set timing parameters, then assign electronic detonators in the charging design so their fire times follow that surface.
This workflow is separate from connector timing (fromHoleID, timingDelayMilliseconds, visible arrows between collars). Electronic timing writes primer detonator fields for initiators marked Electronic in the charge design.
Availability: The Electronic Timing toolbar control is part of the
experimental-electronicsUI group. From v1.0.46, that group is shown automatically when loaded charging data includes at least one Electronic detonator on any hole (hasAnyElectronicCharginginkirra.js); it stays hidden when no electronic detonators are present. There is no separate global “enable experimental electronics” toggle. Visibility is refreshed when charging is loaded with the project.
| Term | Meaning |
|---|---|
| Timing construct | One complete temporal mesh: stored geometry, generated mesh, visibility, assigned holes, and parameters. |
| Timing contour | User-drawn polyline (or Bézier control structure); every vertex on that contour shares the same time at the ridge (relief mode) or lies on a fixed-time boundary (range mode). |
| Contour polyline | Connected chain of segments forming one continuous contour. |
| Contour vertex | Point where two segments meet; offset geometry uses interior vertex logic (bisector / mitre). |
| Relief | Rate of change of time with distance (ms/m). Treat it as a “velocity” of the timing wave along the offset direction, not acceleration. |
| Bisector | At an interior vertex, the direction used to place a single mitre offset point from the two adjacent segment normals. |
| Mitre join | One offset point along the bisector ray (normal case). |
| Mitre limit | Maximum mitre distance as a multiple of offset distance (implementation uses 3× the strip offset). |
| Mitre clamping | When the geometric mitre distance would exceed the limit, it is capped to avoid blow-outs and preserve vertex count. |
| Collapse | Adjacent offset vertices converge; strip generation stops for that direction. |
| Strip | One offset copy of the contour at a given perpendicular distance; assigned a single time value for that row of the mesh. |
| Quad strip | Corresponding points on two adjacent strips form quads, split into two triangles each. |
| Self-intersection | Offset polylines can fold back on themselves at large offsets or sharp corners. |
| Smooth temporal mesh | When enabled, the generator subdivides the triangulated temporal mesh (two midpoint passes) then applies Laplacian smoothing in X, Y, and Z (time). Smoothing strength is controlled by a numeric field (fractional passes supported, e.g. 1 = one full pass blend toward neighbours). |
| Bézier handle | Per-knot cpIn / cpOut control points; handles are collinear with independent lengths when editing. |
| Timing Relief tool | One contour plus explicit start time and relief (ms/m) → offset strips in both time directions. |
| Time Range tool | Two contours plus Line 1 and Line 2 times → stitched mesh; effective relief is derived between the boundaries. |
Manual offset (timeOffsetMs) |
Extra milliseconds added in the Electronic Timing dialog with + / − (per selected holes’ Electronic detonators). Cleared by Apply & Reset Offsets (on re-apply) or Reset Selected Hole Offsets. |
Loading-stage offset (offsetDelayMs) |
Set in Deck Builder for the detonator; always kept when you apply timing or reset manual offsets — it is not the same field as timeOffsetMs. |
Connector-based hole-to-hole delays and electronic mesh times can coexist in one project; they address different initiation models.
When the Blast Holes toolbar shows the control (see Availability above): toggle Electronic Timing. The dialog is a dockable FloatingDialog titled Electronic Timing (default size about 340×680 px).
Closing the dialog deactivates drawing mode and removes draw-complete listeners.
#RRGGBB).smoothPasses on the construct). Changing either triggers surface regeneration.With the Electronic Timing dialog open (and the draw tool idle), hover and drag contour knots and Bézier handles in 2D or 3D. The ElectronicTimingEditTool uses capture-phase mouse events so drags do not start a canvas pan; C1 continuity is enforced when moving one side of a handle pair.
While drawing, canvas panning is suspended (window.isElectronicTimingDrawActive).
For each polyline segment between consecutive vertices:
assignedHoles (combined id entityName:::holeID). Holes already on another construct are moved. Also runs interpolation immediately for feedback.With holes selected, + / − adjust timeOffsetMs on Electronic detonators (step from the numeric field, default 5 ms). delayMs is updated from interpolated time plus offset. Charging data is saved when the database handle exists.
Colour stops define how time maps to colours on the canvas for construct visualisation (see getTimingGradientStops() export used by 2D/3D draw helpers). They do not change numerical firing times.
Constructs are stored in IndexedDB under the TIMING_CONSTRUCTS object store and held in memory in window.loadedTimingConstructs (a Map). See the wiki IndexedDB Schema for the store description.
KAP project files (v1.0.47+): Exporting a .kap (ZIP) includes timingConstructs.json — an array of [id, constructJSON] pairs. Importing a KAP restores constructs into memory and saves them back to IndexedDB (KAPParser.js / KAPWriter.js). Use KAP for full project round-trips that include electronic timing geometry.