Recon Toolkit™ logo

Engineering Dynamics Company

Recon Toolkit™

Accident Reconstruction Tools for Blender

Recon Toolkit — User Guide

Data-driven animation and analysis for accident reconstruction in Blender.

This guide walks through installing the add-on, finding its panels, and completing the common tasks step by step.


Contents

  1. What this add-on does
  2. Install and find the panels
  3. Choosing which tools appear
  4. CSV import basics
  5. Task guides
  6. Units and scale
  7. Example files
  8. Troubleshooting
  9. License & support

What this add-on does

Recon Toolkit turns recorded crash data — EDR reports, motion tables, survey points — into animated Blender scenes, and adds the measurement and visualization tools reconstructionists need to present motion clearly.

Tool What it does
EDR Data Importer / EntryAnimate an object from Time, Speed, Yaw Rate or Time, Speed, Steering Wheel Angle data, or follow an existing path using a Time, Speed profile
Motion Data ImporterAnimate an object from Time, X, Y, Z, Roll, Pitch, Yaw rows
Point ImporterPlace numbered, labelled markers from a survey coordinate list, connected into polylines
Motion Path ToolsGenerate, remove, toggle, and convert Blender motion paths to editable 3D curves
Timed Location MarkersDrop triangle markers (with optional time labels) at a fixed time interval along an animated object's motion
Scale ObjectsScale an object so two selected vertices match a known real-world distance
Speed + AccelerationBake speed and acceleration from an animated object to animated custom properties, on the object itself or on a helper empty
Data Display BoxShow imported data (or any standalone CSV) as a live, HVE-style on-screen text box, grouped by vehicle and data kind

The add-on targets Blender 4.x and uses only Blender's bundled Python modules — no extra installation.


Install and find the panels

  1. In Blender, open Edit → Preferences → Add-ons → Install… and select the ReconToolkit-<version>.zip file.
  2. Enable Recon Toolkit in the add-ons list.
  3. Open the 3D View sidebar with <kbd>N</kbd> and select the EDC Toolkits tab.

The add-on's preferences let you rename the sidebar tab — set it to an existing tab's name to share a tab with other add-ons.

On Blender 4.2+ the same zip also installs as an extension (Preferences → Get Extensions → Install from Disk), and updates automatically when added from the EDC Software repository.


Choosing which tools appear

If you only use part of the toolkit, you can hide the rest. Open Edit → Preferences → Add-ons, expand Recon Toolkit, and use the Features checkboxes:

Feature Hides
EDR Data Importer / EntryThe EDR panel (yaw-rate, steering-angle, and path-follow modes)
Motion Data ImporterThe Time, X, Y, Z, Roll, Pitch, Yaw importer
Point ImporterThe survey-point / polyline importer
Motion Path ToolsMotion path generation and curve conversion
Timed Location MarkersThe interval triangle markers
Scale ObjectsThe two-vertex known-distance scaler
Speed + AccelerationThe speed / acceleration bake
Data Display BoxThe live on-screen readout of imported data
Imported DataThe list of imported files, the object each animates, and its Time Zero

All nine are on by default. Unchecking one removes its panel from the sidebar immediately — no restart needed. Documentation always stays visible, so the user guide remains reachable.

Nothing is uninstalled: the tools are only hidden, and re-checking a box brings the panel back with its settings intact.

Click Save Preferences (or enable Auto-Save Preferences) so your choices persist the next time you open Blender.


CSV import basics

Every importer reads CSV files the same forgiving way:

A row counts as a header when most of its cells are text, not merely when it contains some. Data rows carry text of their own — a Brake column reading On/Off, an N/A, or a clock timestamp such as 19:18.5 in the first column — and a looser test silently eats the first rows of data. The row count in the panel is worth a glance against the file: rows quietly dropped as header show up there and as a late start on the timeline. Prefix and units flow into the column dropdowns (Honda Fit: Speed (mph)) and are saved with the imported data, so a Data Display Box scan pre-fills the group prefix and units automatically.

Load a file first, then confirm or adjust the column mapping before importing.


Task guides

Animate from EDR data

Use EDR Data Importer / Entry to drive a vehicle from event-data-recorder output. You can import a CSV or hand-enter rows.

The panel is laid out in the order you work through it: Source → Timing → Import CSV → Entries → Animate.

  1. Under Source, pick the object to animate and the input mode:
  2. *(Optional)* Enable the slip-angle estimate and tune its gain and clamp. The formulas behind these live in their tooltips — hover to see them.
  3. Under Timing, set the frame rate and Time Zero (next import).
  4. Under Import CSV, click Load CSV File. With a header row detected and a target object chosen, that one click loads the file, maps the columns, imports the rows and animates the object. Turn off Animate On Import to stop at the rows.

A file with no header row stops after mapping instead, because positional guessing is exactly the case worth a human glance. Check the columns, then Import With These Columns.

Correcting the mapping. The detected columns are summarised on one line — Time: t Speed: Vel Yaw: YawRate. Click the triangle to open the dropdowns. Import With These Columns appears only once you have changed something, so it means "apply this" rather than being a step to remember.

Editing rows by hand. The Entries section is folded away with a row count; open it to edit, add or remove rows. A CDR export runs to hundreds of rows, which is why it does not unroll by default. After a hand edit, press Animate Object to re-key.

Speeds are read as mph in Imperial scenes and m/s in Metric scenes (see Units and scale). Imported rows are stored on the animated object.

Time Zero Frame places the data's t = 0 somewhere other than frame 0 — set it to 300 and the first row lands on frame 300, with everything after it following at the frame rate above. Use it to line data up against footage, or to stage several datasets against each other.

The value in the panel is the starting point for the *next* import. Once imported, that dataset owns its own time zero and can be re-timed on its own from Imported Data — see Re-time and re-import a dataset.

Animate from a motion table

Use Motion Data Importer when you already have a full pose per timestamp (Time, X, Y, Z, Roll, Pitch, Yaw).

  1. Select the target object and load the CSV.
  2. Only Time is required — any missing field defaults to 0.
  3. Choose linear or constant extrapolation for times outside the data range.

Imported rows are stored on the animated object.

Place survey points

Use Point Importer to bring a survey coordinate list into the scene.

  1. Load a CSV of points (number, description, X, Y, Z).
  2. The tool creates circle markers with point-number and description labels in an Imported Points collection, using a configurable scale factor.
  3. Points that share a description are connected into a polyline.

Re-time and re-import a dataset

Every EDR and motion import is listed in Imported Data. Each row names its source file, the object it animates, and the timeline frame its t = 0 sits on. A row whose object has been deleted says so rather than sitting there looking normal.

Select a row and edit Time Zero to slide that dataset along the timeline. Only that dataset moves: an EDR export and a motion table rarely begin at the same instant, so each carries its own offset rather than sharing one.

Everything that reads the dataset follows. One edit moves:

You no longer have to mirror the offset by hand in the box's Time Zero Frame. That field is still there, and is now a manual adjustment applied *on top of* the import's own offset — leave it at 0 unless you want the readout to disagree with the animation on purpose.

The Time row has no single object behind it. With one import in the scene it follows that import; with several it stays neutral and the box's Time Zero Frame decides, since two datasets at different offsets have no shared answer.

Diagnosing a value that looks stuck. The magnifier beside Export CSV in the display box reports, for every checked row, what it is bound to and whether it actually changes over the scene's frame range. A row reading a constant looks exactly like a row reading correctly from flat data, and this says which it is — and names the object and key it is reading, so a row bound to something that no longer exists stops looking like a value of zero. For a row that is flat it also gives the reason: how many samples the data holds (or what frames its keys span) against the frames actually being indexed, since a mesh attribute clamps at its ends and an F-Curve extrapolates flat, and neither says so on its own.

What Time Zero Frame does and does not move. It sets which frame reads t = 0 on the Time row, and it slides *imported datasets* against the timeline — an EDR or CSV table is stored in its own time base, and lining it up with the animation is exactly what the field is for. A Speed + Acceleration bake is the opposite: it was measured *off* the timeline, so the speed at frame 60 is the speed at frame 60 whatever frame you call t = 0. Bakes are therefore left where they are. Sliding them reported some other moment's speed — and because a data mesh clamps at its ends, a box with a large Time Zero Frame showed one number that never changed.

Which channels follow their import. Re-timing an import physically moves keyframes, so anything stored as keyframes — including a Speed + Acceleration bake written onto the object itself — has already moved and is read straight off the timeline. Data stored as a table of times (EDR and motion tables) or as a Data: mesh is not moved; those are looked up relative to the import's t = 0 instead. Either way the readout follows the animation. The box's own Time Zero Frame applies to every channel on top of that.

A Speed + Acceleration bake is registered to the same import as the object it was measured from, whichever target it was written to, so re-timing that import moves the speed with the motion it describes. Bear in mind this also means Clear on that import removes the bake along with the animation — re-run the bake afterwards.

Button What it does
Load Into ImporterPoints the matching importer at this dataset's object, source file and time zero, ready to change settings and import again over it
SelectSelects the object this dataset animates
ClearRemoves the animation this import created and drops the row — the object itself is kept, since it existed beforehand
ForgetDrops the row only; the animation stays exactly as it is

Re-importing is safe. Importing again onto the same object replaces that object's row rather than adding another, so the list keeps one entry per animated object however many passes it takes to get the settings right.

Scale a scene to a known distance

Use Scale Objects to bring imported geometry to real-world scale.

  1. In Edit Mode, select two vertices a known distance apart.
  2. Enter the known real-world distance.
  3. Apply — the object is scaled so the two vertices match that distance.

Motion paths and timed markers

Bake speed and acceleration

Which way does Forward Yaw Offset turn? Positive is counter-clockwise seen from above — the same sense as a positive Z rotation in Blender — and it is *added* to the forward direction's heading. So a forward that already points 3° off +X needs −3 to bring it onto +X, not +3.

You should not have to work that out. The panel reports the heading your current settings produce (Forward points +3.0° from +X), so nudge the offset and watch it move. If the axis you picked points straight up, it says that too — forward is measured in the horizontal plane, so a vertical axis falls back to world +Y on every frame.

Use Speed + Acceleration to read motion off an animated object for HUD-style readouts or analysis.

Bakes already in the scene are listed at the top of the panel, the same way Object Distance lists its measurements: each row names the object and the unit its channels are in, and says whether acceleration was baked too. Select This Object picks it in the viewport; the X strips its speed channels and leaves the object itself alone, because a bake can be written straight onto a vehicle. There is no New button here — a speed bake takes its source from the selection, so selecting another object already is starting a new one.

Bakes are found by the channels an object carries, not by name, so all three Bake To targets appear in the list.

  1. Choose the object. Source Object wins if it is set; leave it empty to bake whatever is selected in the viewport. (It used to be the other way round, so picking a vehicle in the panel and then clicking something else baked the wrong object without saying so.)
  2. Set the averaging window (centred), forward axis, and yaw offset; optionally restrict to XY-only.
  3. Choose Bake To:

Object, No Keyframes stores one value per frame as a mesh attribute rather than an F-curve. The Data Display Box reads it exactly as it reads an imported CSV — this is the same container those use — so the channels appear in the scan as usual. What you lose is the Graph Editor: there is no curve to plot or hand-edit. Bake to Source Object or Helper Empty when you want to see the trace as a curve.

  1. Bake — results are written as animated custom properties: average and forward speed, and forward/lateral/vertical acceleration.

Baking onto the source object adds five custom properties and their F-curves to that object's existing action. Replace Existing Curves only ever removes those five; a vehicle's location and rotation animation is not touched.

Settings are remembered per object. What "forward" means, and how much yaw to add to it, is a fact about the object — a camera solved from footage and an HVE vehicle do not agree, and neither do two HVE vehicles. So when a bake succeeds, the settings that produced it are stored on that object; pick it again, from the Source Object field or by clicking it in the viewport, and they come back. The panel says Settings remembered for this object when what you are looking at came from the object rather than from the last thing you baked, with an ✕ to forget them.

An object with nothing remembered leaves the panel exactly as it is, so clicking around a scene never blanks a setup you have just typed. The settings are stored on the object itself, so they survive saving, and travel with it if it is appended into another file.

Scenes baked before this option existed have their channels on SpeedData_* empties. Those keep working — the Data Display Box scans every object for animated custom properties rather than looking for helpers by name — so existing display profiles do not need rebuilding. Switch to Helper Empty if you want new bakes to match them.

Units are chosen automatically from the scene, or can be forced.

The averaging window at the ends of the range. Speed is measured over a window of frames centred on each frame. Where the window runs past the start or end of the scene range it shrinks, keeping its centre on the frame it belongs to; the very first and last frame fall back to a single-interval difference. Values near the ends are therefore noisier than the middle — there is genuinely less data to average — but they describe the right instant.

Before version 1.0.8 the window slid along instead of shrinking. That kept the width but moved the centre, so on a 0.8 g braking run with an 11-frame window the reported speed was up to 2.9 mph out at each end, and the acceleration read exactly 0 g across the first and last five frames — every frame in that span shared one window and therefore one velocity. Re-bake anything measured with an earlier version; the numbers near the range ends will change, and the new ones are correct.

Forward axis. Forward is measured in the horizontal plane, so an axis that ends up pointing straight up or down carries no heading. Picking +Z or -Z on an upright object does exactly that, and forward and lateral acceleration then fall back to world +Y. The bake now warns when this happens instead of reporting confident nonsense.

XY-only flattens Z before measuring, so vertical acceleration could only ever be zero. It is no longer baked in that mode, rather than appearing in a display box as a reading of 0.000 g.

Measure the distance between two objects

Use Object Distance to answer "how far apart were these two, and when were they closest" across the whole animation. The result is a set of channels the Data Display Box picks up like any other, so it scrubs with the timeline, renders in the box, and goes out with the CSV export.

  1. Pick the pair. Select two objects and the panel uses them, reading from the other object to the active one. To keep a pair fixed, set From and To — pinned pointers win over the selection, so a re-bake does not depend on remembering what was selected last time.
  2. Choose what is measured.
  3. Pick the channels. Separation and Horizontal Separation are always baked. Closing Speed (mph or km/h, following the lengths; *positive means closing*) and the X / Y / Z components are optional.
  4. Press Measure Distance Over Time, then Scan Channels in the Data Display Box and tick the rows you want.

The channels land on an empty named Distance: <A> - <B>, which also carries the closest approach — the distance and the frame it happened on — shown back in the panel.

Horizontal Separation is not a rounding of the 3D number. On a graded road or a hill, two vehicles level with each other still differ in Z, and that difference inflates the 3D distance without saying anything about how close they are on the ground.

Closest approach is quoted as a frame. It is the nearest *sampled* frame, with no interpolation between frames — a parabola through the neighbouring samples would read to a finer time than the animation was sampled at, and this is a number that gets quoted. The seconds stamped alongside it count from the start of the scene frame range, which is not necessarily what the display box's Time row reads at that frame: that row counts from the box's own Time Zero Frame.

A bake is a snapshot. Move either object afterwards and the channels describe a scene that no longer exists. The panel shows the frame range the bake covered and flags it when the scene range has changed since — but it cannot see an object that moved, so re-bake after any repositioning.

Live, or baked?

Add Live Distance gives a reading that follows the two objects instead of a snapshot. Drag either one, at any frame, and the number in the display box changes with it — nothing to re-bake and nothing to go stale. Use it while you are still positioning.

The catch is the other half of the trade: a live reading only ever knows the frame the playhead is standing on. Everything else in the display box is worked out from a frame *number*, which is what lets the CSV export walk the whole range without scrubbing the timeline; two objects' positions are only knowable by evaluating the scene at that frame. So:

Live Baked
Separation, horizontal, X / Y / Zyesyes
Closing speed—yes
Closest approach—yes
Survives moving an objectyesre-bake
On the timeline / in the graph editor—yes

Closing speed and closest approach cannot be live. A rate needs more than one instant, and closest approach needs the whole run. They are left out rather than shown reading zero, which would look like a measurement instead of an omission.

Both can exist for the same pair at once — they land on separately named helpers (Live Distance: A - B and Distance: A - B) — so you can position against the live reading and bake once you are happy with it.

Exporting a live row to CSV works, and costs a pass. Because a live value has no frame to be asked about, the export fills those columns by actually visiting each frame once, then puts your playhead back. That is the only thing that makes an export slower, and only when a live row is in the profile — a file of baked and imported channels still writes without evaluating the scene at all.

The Measurements list

Every measurement in the scene — live and baked alike — is listed at the top of the Object Distance panel, above the settings that make the next one. Until now the only way to reach one was to re-select the two objects it was made from, which meant knowing which pair a given helper described and finding both halves in the outliner.

The list comes first on purpose. With the settings first, the panel opened on From and To already holding the last pair measured, so changing them to measure something else looked like editing the measurement you already had — and the apparent way to start a new one was to delete or overwrite an old one. New Measurement clears the pair and nothing else; the method, units, window and components are how you work, not part of any one measurement.

Each row names the pair and says which kind it is, and flags one whose object has since been deleted. Selecting a row shows what it is: the method it measures with, the live reading or the baked frame range and closest approach, and whether the scene's frame range has moved since the bake.

From there:

A baked measurement's method is changed by baking it again. Its numbers were computed with the method it was baked under, so switching the label alone would leave it describing one thing and its keyframes another. Use This Pair, change Measure above, then re-bake.

The list is read straight off the scene rather than kept alongside it, so deleting a helper in the outliner removes the row on the next redraw with nothing to refresh.

Why there is no "bake onto the source object". The Speed + Acceleration panel offers that because its channels describe one object. These describe a *pair*, and hanging them on half of it would make them look like a property of that object. For the same reason nothing here is registered with an import's Time Zero: the two objects may come from different imports with different Time Zeros, so there is no single import whose clock this belongs to, and scene frames are the only honest index.

Show data in a display box

Use Data Display Box to render imported data as live text inside a HVE-style box (label column, divider, value column) that updates every frame.

The short version. The panel's sections aren't in the order you use them — the channel list is long, so it sits at the bottom, *below* the button that builds the box. Work in this order instead:

Step Do this Where
1Import Data CSV, or Scan Imported Datatop of the panel
2Tick the channels you want shownChannels, at the bottom
3Create / Update Display BoxDisplay Boxes & Cameras
4Select a camera, then click the 🔗 link button beside the boxDisplay Boxes & Cameras

The panel tracks where you are and shows the next step as a numbered line near the top (*"Step 2 of 4: Check channels to show"*). Click that line and it opens the section the step is talking about; hover it for the full instruction. Once a box is built and attached to a camera the line goes away. Everything after step 4 — labels, units, decimals, colours, size, placement — is tuning, and each of those edits updates the box in place while Auto Update is on.

The rest of this section is the detail behind those four steps.

  1. *(Optional)* Click Import Data CSV to open any time-based CSV directly — no importer setup needed. Up to four leading header rows are auto-detected (an optional ID row, prefix, variable names, units — a header row is a leading row where *most* cells are text, so a numeric ID row like a vehicle number doesn't stop detection early and a data row carrying a clock timestamp or an On/Off flag isn't mistaken for one), the time column is found by name, preferring one whose values are actually numbers -- so a time_s beats a clock-string timestamp_local; with no time-named column at all, the first numeric column is used. A Time Column dropdown in the file browser's sidebar overrides the pick when the file's naming defeats it. Every numeric column is resampled to the scene frame rate and stored as a hidden Data: mesh whose channels appear in the scan below, grouped under the dataset name. If the same column names repeat once per data block (for example a multi-vehicle export with identical X/Y/Z columns for each vehicle), the repeats are automatically disambiguated using whichever header row actually differs between them (typically the vehicle/event ID), so every vehicle's data is kept instead of the last block silently overwriting the others. The dataset is registered in Imported Data like any other import, so it carries a Time Zero you can move later to line it up against other data. Re-timing one of these moves the readout without touching the stored values — the box samples it relative to its Time Zero.
  2. Click Scan Imported Data. Every data channel in the scene is listed in groups — EDR entries, motion-table rows, baked SpeedData properties, imported data CSVs, and any other animated custom properties. A Time channel is always offered. If the CSV carried prefix/units header rows (see CSV import basics), the group prefix and units are pre-filled from them.
  3. Every display box is driven by a named Box Profile — its own checked rows, Box Style, and camera settings — so different boxes can show completely different variables with entirely different styling instead of all sharing one global look. With only one box you won't notice anything extra; once a second, independent box exists, a row of buttons appears above Display Rows letting you pick which profile the rest of the panel edits, and an Editing Profile field lets you rename the one currently shown.
  4. Display Boxes & Cameras comes first of the three collapsible sections, directly under the profile switcher — the button that builds the box is reachable without scrolling past anything:

Each row also has detach and ✕ remove (to delete just that box). Camera Distance, Screen Width Fraction, Screen Anchor, and the offsets all update attached boxes live as you drag or change them — no re-attach or rebuild needed. Both perspective and orthographic cameras are supported — orthographic framing is computed from the camera's Orthographic Scale rather than its field of view, so the box sizes and positions correctly either way. An attached box automatically re-anchors itself to its corner every time the box rebuilds — including when you check or uncheck channels afterward — so it never needs re-attaching just because its row count changed.

Removing a box also removes its profile, unless another box still shares it — at least one profile is always kept around to edit.

Once attached, a box's on-screen *size* is set by Screen Width Fraction, not by Box Width — Box Width only controls the box's internal layout (divider position, column widths), so changing it afterward resizes the box on screen without also inflating or shrinking the text. That calibration is captured the moment you click the attach button, so click it again on an already-attached box any time you want to recalibrate its on-screen size to the current Box Width.

  1. Two more collapsible sections follow. Both only tune a box that already exists, which is why they sit *below* the button that creates one; expand them at any time (each remembers its open/closed state). Both edit whichever profile the switcher above has selected:

An On Camera group closes the section, holding everything that only applies once a box is attached to a camera:

The whole group stays greyed out until a box using the profile you're editing is attached to a camera: every control in it only ever repositions an attached box, so before that there is nothing for them to move.

  1. Check the channels you want to show, in the Channels section below — its header shows a running checked count and, like Display Rows and Box Style & Placement, collapses as a single section (handy once you've made your selections in a scene with many channels). Inside it, channels are organized in two levels: a top-level group per vehicle (or per source object) with the data subgroups nested inside. Both levels start collapsed — click a triangle to expand (headers show how many channels are checked, and filtering auto-expands matches). The checkbox on a vehicle toggles everything under it; the checkbox on a subgroup toggles just that subgroup; the checkbox next to an individual channel checks it into the profile you're currently editing — use Display Rows above to edit its label, unit, decimal places, and Custom Color once it's checked. Each subgroup also has a Prefix field — text added before every label in it (for example a vehicle name, giving Honda Fit, V Tot (mph)) without editing each variable — and a Zero Frame Offset — an extra frame shift added on top of the box's own Time Zero Frame, applied only to that subgroup's channels. Use it to re-sync one dataset that's drifted a fixed number of frames out of step with the others (for example two CSV imports checked into the same box) without affecting anything else in the box. Both fields are shared across every box profile.

The offset steps in whole frames, which is every ordinary use of it, but it is not limited to them: type a fraction and it reads between samples. A dataset sampled at 100 Hz against video at 29.97 fps lands between frames as a rule, and 0.25 genuinely reads a quarter of the way from one sample to the next.

Profiles. A profile is one set of checked channels and their styling; a display box is an object in the scene that renders one. Several boxes can share a profile and stay in step. With more than one profile the panel lists them, showing how many boxes each drives — including none, which is the case Create / Update Display Box exists for.

Picking a profile filters the box list to the boxes it drives, so the choice has a visible effect rather than only changing the channel ticks further down the panel. The header says how many of the total are showing and Show all brings the rest back — nothing is hidden silently. Remove is scoped to what is listed and reads *Remove These Boxes* when the list is filtered.

If both the Recon and HVE toolkits are installed, each manages its own display boxes independently (scanning or rebuilding in one never touches the other's boxes); when the scene also contains boxes from the other toolkit, the panel notes how many so it's clear why they aren't listed here.

Values are sampled from the underlying animation data (keyframed custom properties, per-frame data attributes, or time-interpolated table rows), so the box works during playback and in final renders. Re-scanning keeps your checked channels and edits.

Export display channels to CSV

Export CSV, beside Import Data CSV in the Data Display Box panel, writes every channel in the active profile to a file — one row per frame, one column per row of the box, plus a Time column.

It exports what the box shows. The same sampling path, the same Time Zero Frame, the same per-group offsets and the same time offset, so a value in the file and the same value in a render always agree. That matters more than it sounds: a discrepancy between a report table and a rendered overlay is very hard to adjudicate after the fact.

The dialog names the profile it will write. That matters when a scene has more than one box: each is bound to its own profile, and the export takes the one currently selected in the panel — which is not necessarily the box you were just looking at.

This is also how baked speed and acceleration leave Blender, whichever Bake To mode produced them — the export reads through the display, so keyframes, a data mesh and a helper empty all come out the same way.

The playhead is not moved. Export samples each frame directly, so it costs no scene evaluation and leaves you on the frame you were on.


Units and scale

Recon Toolkit respects the scene's Unit System (Scene Properties → Units):

The Distance Units dropdown in Object Distance and Speed + Acceleration overrides this per bake: Auto follows the scene, Feet and Meters state it outright. Speeds follow the lengths — feet with mph, metres with km/h — so a display box never mixes the two systems.

The unit is part of each channel's name (separation_m, closing_speed_kph), which is what lets a number carry its unit into the display box, the CSV export and the report. Changing the unit therefore renames the channels; re-measure and any display box row showing one follows the rename automatically, keeping its label, decimals and position.

Set your unit system before importing so speeds and distances are interpreted correctly. Use Scale Objects to match imported geometry to real-world dimensions.


Example files

Example CSVs for trying each importer ship inside the add-on. Click Open Example Files in the Documentation panel (next to Open User Guide) and they open in your file manager — no download needed. In a repository checkout they live in examples/.

File Use with
EDR_YawRate_Example.csvEDR importer, Yaw Rate mode
EDR_SteeringAngle_Example.csvEDR importer, Steering Wheel Angle mode
EDR_Combined_Example.csvEDR importer, column mapping (all four columns)
XYZRPY_Example.csvMotion Data Importer
XYZ_Points_Example.csvPoint Importer

Troubleshooting


License & support

Recon Toolkit™ is a trademark of Engineering Dynamics Company (Anthony Cornetto). The source code is GPL v2 or later. Recon Toolkit is a reconstruction and visualization aid, not a substitute for professional engineering judgment — independently validate every result. See the bundled LICENSE file for licensing and the full disclaimer.

Official builds, updates, and support are provided by Engineering Dynamics Company; visit edccorp.com or contact EDC support.