Bimorph Nodes V2.2 Adds Holistic Support For Linked Element Clash Detection With New Link-Element Nodes

We are delighted to announce the release of BimorphNodes v2.2, which is now available for download via the Dynamo Package Manager.

BimorphNodes v2.2 introduces the new LinkElement class nodes to Dynamo which are purpose-built for retrieving elements from linked Revit models. While this functionality has existed for some time in a number of other packages, what makes LinkElements unique are the range of additional properties and features they implement that solve a major limitation in the Revit API (and therefore Dynamo) concerning the location of linked elements within their host file.

The other significant update in v2.2, also related to this issue, is the addition of holistic support for linked element clash detection using any of the Bimorph Element and BoundingBox nodes. LinkElements serve a vital role in enabling this functionality, resulting in a range of nodes that are no longer impeded by the problems that arise from limitations in the Revit API.

BimorphNodes v2.2 overview:

  • New LinkElement class nodes for rapid interop with elements from linked Revit models
  • Element.IntersectsElement, Element.IntersectsSolid, BoundingBox.GetElementsInside and BoundingBox.GetElementsIntersect nodes now provide holistic support for linked elements
  • Clash detection codebase micro-optimised, resulting in +15% performance increase
  • CAD.CurveFromCADLayers refactored with improved support for view-specific CAD links
  • Curve.RemoveDuplicates refactored resulting in +80% performance increase
  • Built on the Revit 2017 API (Revit 2015 no longer supported)
  • Efficiency enhancements and general stability improvements

New Link-Element Class Nodes

The new LinkElement nodes include a range of methods and properties for retrieving and interacting with Elements from a linked Revit model (a Link Instance). What makes LinkElements unique are the way they locate the linked element in the host file. This is significant as the Revit API has a limitation which restricts linked elements to their external files origin-to-origin location, regardless of any transformations made to them in the host file. LinkElements have been purpose-built to solve this limitation by performing operations, such as geometry extraction, at the linked elements host location.

LinkElement instances can be created using the LinkElement.OfCategory node:

Properties and metadata attached to the LinkElement instance can be accessed using the LinkElement property nodes. The Solids, Faces, Location and BoundingBox nodes return the respective geometry at its host location by default:

There are also property nodes to access its associated Link Instance id, total transform and the embedded Dynamo Revit Element:

Link-Elements Solve The Revit Api Linked Element Transform Limitation

The linked element transform limitation manifests only in the Revit API context, which subsequently exposes a number of BimorphNodes to the problem. As mentioned, this limitation causes linked elements to default to their external files origin-to-origin position, even if the elements Link Instance has been transformed in the host document. The Revit projects most at risk of this problem are those where transformations have been applied to the Link Instance for coordination purposes, which is likely if Shared Coordinates are in use or if linked models have been manually moved to align with the main building model.

The problem is most pronounced when calling Revit API methods on a linked element where its relative location in the host file is required to yield a result. For example, the Revit API ElementQuickFilter and ElementSlowFilter class methods – which are used for clash detection in the BimorphNodes BoundingBox and Element nodes – produce erroneous results if element A vs B includes any linked elements which have been transformed. This is especially confusing to users since any linked Revit models which are moved to visually align with other links or live elements in the host file, are always positioned back at their respective origin-to-origin locations in the API context, causing the clash results to fail unexpectedly.

The following example illustrates the problem, showing the position of bounding boxes created in the API context from linked wall elements while its Link Instance is transformed. One would expect the bounding boxes to be drawn where the walls are positioned in the host model, but the Revit API limits them to the links origin-to-origin location:

LinkElements on the other-hand solve the problem by handling linked elements at their host location (where you see it in Revit), and this new functionality forms the basis for enabling holistic linked element support in the BimorphNodes BoundingBox and Element nodes:

Learn More About BimorphNodes V2.2 and the Revit API Limitation

Want to learn more? Visit the official BimorphNodes article to gain further insights into:

  • The Revit API limitation imposed on linked elements
  • How BimorphNodes V2.2 solves these limitations
  • How LinkElements serve a vital role in enabling holistic linked element support for clash detection
  • The new linked element clash detection workflows that are made possible using LinkElements with Bimorph Element.IntersectsElement and Element.IntersectsSolid nodes

The article includes extra video content and comprehensive details all of the new functionality that’s been added to v2.2:

BimorphNodes v2.2 Official Article

Advertisements

Tag.SetLeaderElbowPosition

Tag.SetLeaderElbowPosition

Dynamo Hierarchy: Rhythm>Revit>Elements>Tag>Tag.SetLeaderElbowPosition

Description:

This will attempt to set the leader elbow position of the tag.

Inputs:

tag : Tag

point : Point

Outputs:

void : Void

Tag.SetHeadPosition

Tag.SetHeadPosition

Dynamo Hierarchy: Rhythm>Revit>Elements>Tag>Tag.SetHeadPosition

Description:

This will attempt to set the head position of the tag.

Inputs:

tag : Tag

point : Point

Outputs:

void : Void

Tag.SetLeaderEndPosition

Tag.SetLeaderEndPosition

Dynamo Hierarchy: Rhythm>Revit>Elements>Tag>Tag.SetLeaderEndPosition

Description:

This will attempt to set the leader end position of the tag.

Inputs:

tag : Tag

point : Point

Outputs:

void : Void

 

Tag.GetLeaderEnd

Tag.GetLeaderEnd

Dynamo Hierarchy: Rhythm>Revit>Elements>Tag>Tag.GetLeaderEnd

Description:

The position of the leader end for a tag using free end leader behavior.

Inputs:

tag : Tag

Outputs:

point : Point

Tag.GetHeadPosition

Tag.GetHeadPosition

Dynamo Hierarchy: Rhythm>Revit>Elements>Tag>Tag.GetHeadPosition

Description:

The position of the head of tag in model coordinates (if available).

Inputs:

tag : Tag

Outputs:

point : Point

All Elements of Model Category

All Elements of Model Category

Dynamo Hierarchy: Rhythm>Revit>Selection>All Elements of Model Category

Description: This allows you to collect all elements of a selected category. Also removes model subcategories from selection. Essentially combines Category> All Elements of Category.

Inputs:

none

Outputs:

element : Element

 

Rhythm Node Index

This will be updated as Rhythm gets updated. For a detailed list of changes visit Rhythm on GitHub

 

Rhythm.Animate

Element.AnimateColor

Element.AnimateNumericParameter

Element.AnimateTransparency

Rhythm.Core

Ayuda:

Ayuda.IsArchi-LabInstalled

Ayuda.IsClockworkInstalled

Ayuda.IsSteamNodesInstalled

Ayuda.ThisOrThat

List:

List.AllIndicesOf

List.ArchitecturalAlphabeticalSequence

List.GetItemIndices

List.MergeSublists

List.ReturnItemsPreviousToIndex

Output.Clean

RemoveListFromList

SquareFeetDropper

OS:

OS.CurrentUser

OS.CurrentUserAppData

Unicode:

Unicode.LRE

Unicode.LRM

Unicode.RLE

Unicode.RLM

Unicode.ZWJ

Unicode.ZWNJ

Rhythm.Revit

Collector:

Collector.DuctsBySystem

Collector.ModelGroupByName

Collector.OfExteriorWalls

Collector.OfInteriorWalls

Collector.OfLegendViews

Collector.OfStructuralWalls

Collector.PipesBySystem

Collector.PlacedRooms

Selection:

All Elements of Type in Document

All Pipes at Reference Level

All Framing at Reference Level

Isolated Pick Model Elements

Isolated Pick Model Elements(ordered)

Numbered Pick Model Elements

Pick Model Element

Pick Model Elements

Select Elements By Curve

Select Grids By Curve

UI

UI.ColorPicker

UI.UserMessage

Application:

BasicFileInfo.SavedInVersion

Application.CloseDocument

Application.OpenDocumentFile

Document:

Document.CopyElementsFromDocument

Elements:

Annotation:

RoomTag.Host

SpaceTag.Host

BeamSystem:

BeamSystem.DropBeamSystem

BeamSystem.Members

CableTray:

CableTray.Space

CurtainGrid:

CurtainGrid.AddLineByPoint

CurtainGrid.ByWallElement

CurtainGridLine:

CurtainGridLine.AllSegmentCurves

CurtainGridLine.FullCurve

CurtainGridLine.RemoveSegment

CurtainPanel:

CurtainPanel.IsolateInView

Dimension:

Dimension.IsOverridden

Dimension.LeaderEndPosition

Dimension.MultiSegmentMembers

Dimension.NumberOfSegments

Dimension.Origin

Dimension.GetCurve

Dimension.GetReferenceElements

Element:

Element.Category

Element.CopyFromViewToView

Element.GetJoinedElements

Element.GetParameterValueByNameAsString

Element.OverrideCutColorInView

Element.OverrideCutLineweight

Element.OverrideProjectionFillColor

Element.OverrideProjectionLineColor

Element.ParentFamily

Element.SetPinnedStatus

Element.CreateParts

Element.GetIntersectingElementsOfCategory

Element.GetParameterValueByNameCaSeiNSeNSiTiVe

Element.SetParameterValueByNameCaSeiNSeNSiTiVe

Element.GetParameterValueByNameTypeOrInstance

Element.SetParameterValueByNameTypeOrInstance

ElevationMarker:

ElevationMarker.CreateElevationMarker

ElevationMarker.CreateElevationByMarkerIndex

FamilyInstance:

FamilyInstance.Room

FamilyInstance.Space

Parts:

Parts.DivideParts

Parts.GetSourceElement

Group:

Group.UngroupElements

Mullion:

Mullion.SortByDirection

ReferencePlane:

ReferencePlane.GetCurvesInView

RevitLink:

RevitLink.GetDocument

Room:

Room.CenterRoom

RoomTag:

RoomTag.CenterOnRoomLocation

RoomTag.TaggedRoom

Sheet:

Sheet.Create

Sheet.GetViewportsAndViews

Tag:

Tag.GetHeadPosition

Tag.GetLeaderEnd

Tag.GetLeaderElbow

Tag.SetLeaderEndPosition

Tag.SetHeadPosition

Tag.SetLeaderElbowPosition

TextElement:

TextElement.ToLower

TextElement.ToTitle

Viewport:

Viewport.Create

Viewport.GetView

Viewport.LabelOutline

Viewport.LocationData

Viewport.SetLocationBasedOnOther

ViewSection:

ViewSection.OverrideCrop

ViewSection.OverrideCropVersion2

ViewPlan:

ViewPlan.GetCropBox

ViewPlan.Rotate

View3D:

View3D.SetSectionBox

View:

View.ConvertToIndependent

View.GetCropRegionElement

View.GetFilterVisibility

View.SetElementProjectionLineweight

Selection:

All Elements of Model Category

Design Options

Links

MEPSystemTypes

Roof Types

Sheets

SpaceTypes

ViewFamilyTypes

Tools:

Batch:

Batch.UpgradeFamilies

To be documented/reviewed:

All Upper
Arrowhead Assigner

Element.Type
Geometry.SpaceEvenlyWithBuffer

Parametric Graphic Scale

Rhythm.3DRoomTags
Rhythm.BackupRFADeleter

Rhythm.PercentGlazingByOrientation
Rhythm.RenumberGridsByCurve
Rhythm.RenumberRoomsByCurve
Rhythm.Toggle
Rhythm.WhatTheNode

String.CharacterAtIndex
String.FlipReverse
String.IndicesOfCharacter
String.RemoveAfterGivenCharacter
String.RemovePriorToCharacter
String.SpecifyDecimalPlaces
String.ToTitle

Viewport.ViewName
Wall.NorthSouthEastWest
Workset.Create