Verification
What each CAD API
can verify
Scoring a demonstration means reading the model through the software's automation API. All four packages have one. None of them expose the same checks. This is what each can read.
What can be captured
Recorded while the work happens. The recorder adds screen, microphone, the input hook and the clock; everything below comes from the software itself.
| Check | CATIA V5 | AutoCAD | Revit | Tekla |
|---|---|---|---|---|
| Action trace The API-level record of what was actually done, alongside the clicks that did it. | macro recorder — lossy, brittle selections | command log + Action Recorder | journal file — complete, replayable | macro recorder — idiomatic C# |
| UI semantics Which control was clicked, by name and path, rather than by pixel. | UIAutomation — toolbars, dialogs | UIAutomation — ribbon only | UIAutomation — ribbon only | UIAutomation — dialogs only |
| Selection at command time The only thing that gives a click inside the 3D view any meaning. | Selection object | pickfirst set | Selection.GetElementIds() | ModelObjectSelector |
| Model state dump What the model became at each step, not just what was pressed. | tree, params, sketches, mass props | entity enumeration | full API dump + warnings list | Open API enumeration |
| Neutral geometry A kernel-independent copy, so a result can be checked without the seat that made it. | STEP, IGES | DXF — ASCII, diffable | IFC | IFC, DSTV/NC |
| Recorded intent Why a step was taken. Nothing derives this; it has to be spoken or written. | narration + step marks | narration | narration + sync comments | narration |
natively exposed reachable through the API not available does not apply
What can be checked
Answered afterwards, from the finished model, with nobody watching.
| Check | CATIA V5 | AutoCAD | Revit | Tekla |
|---|---|---|---|---|
| Rebuilds clean Did the model survive its own update, or is the tree full of errors? | Part.Update() | no history to rebuild | GetWarnings() | clash check |
| Under-constrained Is the geometry pinned down, or will it wander the first time something moves? | not exposed by the API | constraint DOF | unconnected height | hand-modelled plates |
| Geometry match Is the result the part that was asked for, to a tolerance? | boolean residual | entity + area compare | element + quantity compare | assembly compare |
| Perturbation Change a driving value and rebuild. The one test that separates a model from a drawing. | change a parameter | flex a dynamic block | move a level | change a profile |
| Runs headless Can the check run without a seat, a screen and a person? | no | accoreconsole | Design Automation | attached instance only |
natively exposed reachable through the API not available does not apply
Three things the tables say out loud
Revit is a better target than CATIA
A native quality checker, real headless execution, native journals, and a constraint tell that is machine-readable in a way V5's simply is not. The objection that a verifiable environment needs a licensed Windows seat per rollout mostly disappears with Design Automation.
AEC has more graders than mechanical does
"Is this model built properly" is a question the industry already argues about, with published standards behind it. A rubric with external anchors is a far easier thing to defend than one asserting its author's taste.
The viewport is opaque in all four
Every one of these has a single pane where the engineering actually happens, and no accessibility API can name anything inside it. The fix is identical each time: read the selection through the API immediately after the click. One line of work, four times, and the highest-value thing in the capture layer.
AutoCAD
Autodesk- API
- .NET (ObjectARX managed), COM, AutoLISP
- Headless
- accoreconsole.exe — runs a script against a DWG with no GUI
- In practice
- Mostly no parametric history, so "rebuilds clean" does not exist. What you assert instead is drafting discipline, which is what a senior drafter grades anyway.
- The "faked it" tell
- Copied geometry instead of a block reference, and exploded dimension text. Both look identical on a plot. Both are worthless downstream.
-
layer_disciplineevery entity on its correct layer, ByLayer colour and linetype -
no_duplicate_geometryno stacked or zero-length lines, no overlapping polylines -
closed_boundarieshatch boundaries and outlines are closed polylines -
block_usagerepeated geometry is a block reference, not copied entities -
dimensions_associativedimensions attached to geometry, not exploded text -
titleblock_attributesrequired attributes populated -
purge_cleanno unreferenced blocks, layers or styles -
plot_setupcorrect paper size, scale and plot style table
Revit
Autodesk- API
- .NET Revit API, pyRevit, Dynamo
- Headless
- Design Automation for Revit — genuinely headless, cloud, parallel
- In practice
- The strongest of the four, by a distance. Revit maintains a live warnings list — duplicate instances, overlapping walls, unenclosed rooms, elements off axis. Built in, no inference needed. Revit also journals every command a user issues, which is an action trace for free.
- The "faked it" tell
- A wall with Unconnected Height typed in, instead of Top Constraint: Up to Level 3. Identical geometry. One follows when the level moves. One does not.
-
no_warningsGetWarnings() empty, or below a threshold by severity -
element_countsN doors of type X, M walls on level 2 -
parameterstype and instance parameters set, shared parameters present -
level_constraintswalls constrained to a level, not an unconnected height -
rooms_boundedevery room encloses, no unplaced or redundant rooms -
worksetselements on the correct workset -
interference_checkno clashes between disciplines -
schedule_totalsa schedule's computed quantity matches expected -
view_templatesviews use templates rather than ad-hoc overrides
Tekla Structures
Trimble- API
- Tekla Open API (.NET), plus a macro recorder that emits C#
- Headless
- Open API attaches to a running instance rather than running detached
- In practice
- The macro recorder gives you a paired corpus: every GUI action alongside the API call it produced. That is the translation data most packages will not hand over.
- The "faked it" tell
- An experienced detailer applies a connection component. A rushed one hand-models the plates and bolts to look the same. Visually identical. Only one adapts when the beam moves.
-
clash_freebuilt-in clash check returns nothing -
numbering_consistentno duplicate or unnumbered assembly marks -
profiles_materialsparts use catalogue profiles, correct grade -
connections_are_componentsjoints are intelligent components, not loose plates -
bolt_edge_distancesbolts satisfy minimum edge distance and pitch -
weld_definitionswelds defined on the connection, not drawn -
assembly_structurecorrect main part per assembly -
drawing_completenessevery assembly has a drawing
Every check above is answerable without a person watching. None of them replace the reviewer — they decide which sessions a reviewer should spend time on, and they make the disagreements between the machine and the engineer visible. Those disagreements are the most valuable thing the pipeline produces.