Navisworks: Analysis¶
9 nodes. Types ending in [] are lists. An input with a default is optional.
Nodes¶
Audit.DuplicateItems¶
Finds duplicated geometry (double-exported elements) by running a temporary Duplicate clash test over the items. The test is added to the Clash Detective tests for the moment the check runs and removed again, so the node changes the clash tests (and the Script Player says so). tolerance is in the unit of the Advanced input units; "document" means the file's own unit, which is often feet, so name the unit when you know it.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
items any number of wires required |
ModelItem[] |
— | The model items to audit. |
tolerance |
number |
0.001 |
Duplicate tolerance, in the unit of the units input. |
units |
string |
"document" |
The unit of the tolerance: "document" (the file's own unit, often feet) or a unit name such as Meters or Millimeters. |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
items1 |
ModelItem[] |
items2 |
ModelItem[] |
count |
integer |
Returns: Index-aligned lists of duplicate pairs and the pair count.
Tags: audit duplicate geometry double export qa
Audit.MissingProperty¶
Finds every item that does NOT carry the given property — the data-completeness audit. Lace over a property list to batch-audit.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
categoryName required |
string |
— | Category display name (e.g. "Element"). Internal names do not match. |
propertyName required |
string |
— | Property display name (e.g. "Level"). Internal names do not match. |
items |
ModelItem[] |
null |
Items to audit (defaults to the whole model). |
geometryOnly |
boolean |
true |
True to report only geometry-bearing items (skips containers). |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
items |
ModelItem[] |
count |
integer |
Returns: The offending items and how many there are.
Tags: audit missing property qa completeness not defined
Distance.BetweenItems¶
Shortest distance between two selections, with the closest (witness) point on each side. method "mesh" = exact surface-to-surface via the Clash engine (can be slow on very large selections); "bbox" = fast bounding-box approximation. Document units — chain Units.Convert. The bbox tier measures between the combined box of each side, a coarser answer than Proximity.NearestDistance, which measures to each target on its own. The default is mesh here and bbox on Proximity.NearestDistance.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
itemsA required |
ModelItem[] |
— | The first selection. |
itemsB required |
ModelItem[] |
— | The second selection. |
method |
string |
"mesh" |
"mesh" = exact surface-to-surface (Clash engine; slower on huge selections), "bbox" = fast bounding-box approximation. |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
distance |
number |
pointA |
Point |
pointB |
Point |
Returns: The distance (document units; 0 when touching/intersecting) and the closest point on each selection.
Tags: distance clearance closest shortest measure between gap
FallHazard.EdgeHandrailCheck¶
Marks the floor edges around voids: green where the gap across the void is under the limit (safe), red where it is over the limit and there is no handrail (needs one), and blue where a handrail covers it — override any of the three colours with the colour inputs. Handrail geometry is projected flat onto the plan — posts and rails, corners and all — and matched per length, so a 1 m handrail on a 5 m edge protects only its 1 m. A dangerous stretch shorter than 'minPassage' also counts as safe (a person cannot fit through the break). Turn on 'showOverage' to print how far each dangerous run exceeds the limit on the image, ready for reports. Set 'units' to the unit your numbers are in (e.g. Meters) — documents often store coordinates in feet even when the measure tool displays metres. Writes a top-down PNG and reports the dangerous / protected / safe edge lengths. Needs a live Navisworks session.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
floors required |
ModelItem[] |
— | The floor/slab items to treat as safe ground. |
level required |
number |
— | The elevation (world Z) of the plan to analyse. |
handrails required |
ModelItem[] |
— | The handrail items. Everything in the selection tree under what you pick is read (pick the railing elements or a group above them to get the whole railings); their geometry is projected flat onto the plan (posts and rails alike), so a handrail protects only the length it actually runs along an edge. |
obstructions |
ModelItem[] |
null |
Equipment/ducts/pipes that plug openings; a floor edge facing one at less than the limit is safe. Optional. |
band |
number |
1.0 |
Vertical tolerance for deciding a floor/equipment element crosses the level. |
cellSize |
number |
0.1 |
Grid resolution in document units (smaller = finer, use a few times below the limit). |
limit |
number |
0.2 |
A floor edge needs a handrail when the void it faces is locally at least this wide (e.g. 0.2 = 20 cm, document units) — a narrower gap cannot be fallen through however long it runs. |
handrailTolerance |
number |
0.3 |
A handrail within this distance of a dangerous edge protects it. |
minPassage |
number |
0.0 |
A dangerous stretch of edge shorter than this counts as safe — a person cannot fit through so small a break in the protection (e.g. between two handrails, or a handrail and an obstacle). 0 disables. |
units |
string |
"document" |
The unit every number on this node is in ("Meters", "Millimeters", "Feet", …). "document" = the document's own units — beware: a document often stores coordinates in feet even when the measure tool displays metres, so name your unit explicitly to be safe. |
imagePath |
string |
null |
Where to write the PNG (empty = a temp file; the path is returned). A relative path is next to the graph file. |
pixelsPerCell |
integer |
6 |
Image pixels per grid cell. |
showOverage |
boolean |
false |
True to print, at each dangerous run, how far its gap exceeds the limit (e.g. "+0.35", in the chosen units) — for plans that go into reports. |
dangerousColor |
any |
null |
Colour for dangerous edges (a Color, "#RRGGBB" or [r,g,b]); empty = the default red. |
protectedColor |
any |
null |
Colour for handrail-protected edges; empty = the default blue. |
safeColor |
any |
null |
Colour for safe edges; empty = the default green. |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
imagePath |
file |
dangerousLength |
number |
protectedLength |
number |
safeLength |
number |
report |
any |
Returns: The image path, the dangerous/protected/safe edge lengths (in the chosen units), and a diagnostic report.
Tags: fall hazard edge handrail guardrail railing floor void opening safety protected perimeter color label report
FallHazard.FloorOpeningMap¶
Whole-floor fall-hazard heat map. At 'level', reads the filled silhouette of the floor and (optional) equipment elements that cross that plane, finds the voids enclosed by floor, subtracts the equipment that plugs them, and writes a top-down PNG heat map coloured by how far each void point is from the nearest floor edge or obstacle: cool below the 'minGap' limit (within reach of a solid), hot beyond it (a genuine fall hazard). Wire 'lowColor'/'highColor' to replace the default ramp with your own two-colour gradient (low = safe end, high = worst hazard; the limit sits at the 50% blend), and turn on 'showOverage' to print each flagged opening's gap-over-limit on the image — ready for reports. Openings that reach past the limit are flagged and get a saved viewpoint (named "Opening 1 — gap 0.35 Meters", the gap in the unit you chose) in the folder "Floor Openings"; running again replaces a viewpoint of the same name instead of adding another, and turning saveViewpoints off leaves the document alone. Set 'units' to the unit your numbers are in (e.g. Meters). Needs a live Navisworks session.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
floors required |
ModelItem[] |
— | The floor/slab items to treat as safe ground (e.g. a search for floor elements). |
level required |
number |
— | The elevation (world Z) of the plan to analyse. |
obstructions |
ModelItem[] |
null |
Equipment, ducts and pipes that plug openings — where these sit, there is no fall hazard. Optional. |
band |
number |
1.0 |
Vertical tolerance for deciding an element crosses the level: an element counts when its bounding box reaches within this of the level. Its full silhouette is then read, so this need not match the slab thickness. |
cellSize |
number |
0.25 |
Grid resolution in document units (smaller = finer and slower). |
minGap |
number |
0.2 |
The handrail limit as a distance from the nearest floor edge or obstacle (e.g. 0.2 = 20 cm): a void point farther than this from any solid is a hazard. It is the heat-map pivot — cells below it read cool, at it yellow, above it red — and openings that contain such a point are flagged. |
units |
string |
"document" |
The unit every number on this node is in ("Meters", "Millimeters", "Feet", …). "document" = the document's own units — beware: a document often stores coordinates in feet even when the measure tool displays metres, so name your unit explicitly to be safe. |
imagePath |
string |
null |
Where to write the PNG heat map. Empty = a file in the temp folder (the path is returned). A relative path is next to the graph file. |
saveViewpoints |
boolean |
true |
True to add one top-down saved viewpoint per flagged opening. |
pixelsPerCell |
integer |
6 |
How many image pixels each grid cell spans (bigger = larger image). |
showOverage |
boolean |
false |
True to print, at each flagged opening, how far its widest gap exceeds the limit (e.g. "+0.35", in the chosen units) — for plans that go into reports. |
lowColor |
any |
null |
Gradient colour for the safe end (gap → 0; a Color, "#RRGGBB" or [r,g,b]); empty = the default multi-colour ramp. |
highColor |
any |
null |
Gradient colour for the worst hazard (≥ 2× the limit); empty = the default multi-colour ramp. |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
imagePath |
file |
openingCount |
integer |
widestGaps |
number[] |
centers |
Point[] |
viewpoints |
Viewpoint[] |
report |
any |
Returns: The image path, the flagged-opening count, their widest gaps (in the chosen units) and centre points, any saved viewpoints, and a diagnostic report string (triangles read, openings found, grid size).
Tags: fall hazard opening hole floor handrail heatmap heat map gap safety plan grid slab color gradient label report
Proximity.Cluster¶
Groups items into clusters of touching geometry (gap <= tolerance, chained) — turns loose shapes into logical elements, e.g. numbering each ladder. method "bbox" tests bounding boxes (fast); "mesh" confirms every connection with the Clash engine's exact surface clearance (precise, slower). Set propertyName (Advanced) to also stamp every item with its cluster number as a searchable custom property in the tab tabName; without it the node only reads.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
items any number of wires required |
ModelItem[] |
— | The geometry items to group (e.g. all ladder shapes). |
tolerance |
number |
0.01 |
Maximum gap that still counts as touching; 0 requires contact. Must be smaller than the space between separate elements. |
units |
string |
"document" |
Unit of the tolerance: "document" uses the file's internal unit (often feet!), or name the unit your number is in. |
method |
string |
"bbox" |
"bbox" = fast bounding-box test; "mesh" = precise — box candidates are confirmed with the Clash engine's exact surface-to-surface clearance, so fat boxes (diagonal members) can no longer bridge separate elements. |
propertyName |
string |
"" |
When set (e.g. "Ladder Number"), each item gets its cluster number written as this custom property. |
tabName |
string |
"CamelGraph Data" |
Custom property tab that receives the number. |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type |
|---|---|
groups |
ModelItem[][] |
clusterNumbers |
integer[] |
clusterCount |
integer |
sizes |
integer[] |
report |
any |
Returns: Item groups (one list per cluster), each input item's 1-based cluster number (0 = no geometry), cluster count and sizes, and a diagnostic report.
Tags: cluster group touching connected proximity ladder assembly clump component mesh precise
Proximity.NearestDistance¶
For each item, the distance to the NEAREST of the targets (document units), so you can flag items with nothing close by — e.g. openings with no handrail within a distance: compare the result with GreaterThan. Returns +∞ for an item when there are no targets at all. method "bbox" (the default here; Distance.BetweenItems defaults to mesh) = fast, "mesh" = exact surfaces (slower on big sets).
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
items any number of wires required |
ModelItem[] |
— | The items to measure from (e.g. floor openings). |
targets required |
ModelItem[] |
— | The items to measure to (e.g. handrails); empty means "no neighbour anywhere". |
method |
string |
"bbox" |
"bbox" = fast bounding-box approximation, "mesh" = exact surface-to-surface (slower). |
document |
Document |
null |
The document (defaults to the active document). |
Outputs
| Output | Type | What it gives |
|---|---|---|
distances |
number[] |
One distance per item (document units); +∞ when there are no targets. |
Tags: proximity nearest closest distance neighbour near far within handrail
Takeoff.SumPropertyByGroup¶
One-node QTO rollup: groups items by a property value and sums a numeric property per group (e.g. Volume per Level). Items without the grouping property land in "(none)". keys, sums and counts are three parallel lists; table is the same result as one table (columns: the grouping property, the summed property, Count) that goes straight into Table.ToExcelFile, Table.ToCsvFile, Table.Sort or Report.Html. For sums over several properties use Properties.ToTable and Table.GroupBy.
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
items any number of wires required |
ModelItem[] |
— | The model items to roll up. |
groupCategoryName required |
string |
— | Category of the grouping property (e.g. "Element"). |
groupPropertyName required |
string |
— | Grouping property (e.g. "Level" or "System Type"). |
valueCategoryName required |
string |
— | Category of the quantity property (e.g. "Element"). |
valuePropertyName required |
string |
— | Numeric quantity property to sum (e.g. "Volume", "Length", "Area"). |
Outputs
| Output | Type |
|---|---|
keys |
string[] |
sums |
number[] |
counts |
integer[] |
table |
dict |
Returns: Index-aligned group keys, per-group sums and per-group item counts, and the same as one table.
Tags: takeoff qto quantity sum group rollup pivot table
Zone.AssignByVolumes¶
Tags each target with the name of the zone volume containing its bounding-box center — the iConstruct Zone Tool as one node. The first zone (in list order) that contains an item wins; items inside no zone are left untouched. Written as a searchable user property tab (persists in NWF/NWD only).
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
zoneItems required |
ModelItem[] |
— | The zone volume items (e.g. rooms, provisional spaces or mass elements). |
zoneNames required |
string[] |
— | Zone names, index-aligned with zoneItems (null/empty falls back to each zone item's display name). |
targetItems required |
ModelItem[] |
— | The items to tag. |
tabName |
string |
"Zones" |
User-visible property tab name the zone value is written to. |
propertyName |
string |
"Zone" |
Property name inside the tab that carries the zone name. |
Outputs
| Output | Type |
|---|---|
items |
ModelItem[] |
assignedCount |
integer |
Returns: The target items (pass-through) and how many of them landed inside a zone.
Tags: zone assign volume room area tag spatial contains