Skip to content
Get on GitHub Autodesk App Store - coming soon

Navisworks: Analysis

9 nodes. Types ending in [] are lists. An input with a default is optional.

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