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

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.ThisOrThat

List:

List.ArchitecturalAlphabeticalSequence

 

List.ReturnItemsPreviousToIndex

Output.Clean

 

OS:

OS.CurrentUser

OS.CurrentUserAppData

 

Rhythm.Revit

Collector:

Collector.DuctsBySystem

Collector.ModelGroupByName

Collector.OfExteriorWalls

Collector.OfInteriorWalls

Collector.OfLegendViews

Collector.OfStructuralWalls

Collector.PipesBySystem

Collector.PlacedRooms

Selection:

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

Application:

BasicFileInfo.SavedInVersion

Application.CloseDocument

Application.OpenDocumentFile

Document:

Document.CopyElementsFromDocument

Elements:

Annotation:

RoomTag.Host

SpaceTag.Host

BeamSystem:

BeamSystem.DropBeamSystem

BeamSystem.Members

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.CopyFromViewToView

Element.GetJoinedElements

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

Collector:

ElementsOfTypeInDocument

Tools:

Batch:

Batch.UpgradeFamilies

To be documented/reviewed:

All Upper
Arrowhead Assigner
Geometry.SpaceEvenlyWithBuffer

Rhythm.3DRoomTags
Rhythm.BackupRFADeleter

Rhythm.PercentGlazingByOrientation
Rhythm.RenumberGridsByCurve
Rhythm.RenumberRoomsByCurve
Rhythm.Toggle
Rhythm.WhatTheNode
String.IndicesOfCharacter
String.RemoveAfterGivenCharacter
String.RemovePriorToCharacter
String.ToTitle

Viewport.ViewName
Workset.Create

GIS2BIM Node Index

Package published by Maarten Vroegindeweij

Set of nodes to load 2D and 3D raster and vector GIS-data from various sources into Revit.

  • WMS: Web Map Service: rasterdata as aerialphotos, maps.
  • WMTS/TMS: Web Map Tile Service: rasterdata downloaded as tiles and after then combined and import in a view.
  • WFS: Web Future Service: vectordata from a geoxml/geoJSON converted to curves, detail lines and filled regions.
  • POINTCLOUD: LASZip can be used to filter, crop and modify pointclouds and converts them into points in Dynamo.
  • NETHERLANDS Quite some nodes to load GIS-data for the Netherlands such as kadaster, AHN, BAG, BGT, PDOK
  • HAWAI Geoserviceslibrary for Cadastre
  • SOUTH AFRICA Geoserviceslibrary for Cadastre
  • BELGIUM Geoserviceslibrary for Cadastre and aerialphotos
  • ARCGIS First approach to load data from ARCGIS-services via the REST API
  • GOOGLE Geocoding with the Google API and download OSM-data.
  • GOOGLE EARTH Import Google Earth aerialphoto in Revit
  • GEF Import GEF-files for modelling of the subsoil with data from CPT-files
  • CRS Library with all Coordinate Reference Systems from EPSG and tools to transform coordinates from one CRS to another

Current nodes

 

ArcGIS
ArcGIS_REST_API_QUERY ArcGIS query to webservers using the REST api(WORK IN PROGRESS)
Coordinates
CreateBoundingbox Create boundingboxstring in syntax to use in webrequests
CreateBoundingboxLATLONG Create boundingbox with from lat/long coordinate in degrees
DistanceBetweenCoordinatesWGS84 Calculate the distance between 2 coördinates in WGS84
DoubleToString Converts Coordinate in Double to String
GetMortonCodeCoordinate Get mortoncode given 2 coordinates and tiledimension. For more information check: https://en.wikipedia.org/wiki/Z-order_curve
GetSharedCoordinate Get shared coordinate/project basepoint
SetSharedCoordinate Set shared coordinate/project basepoint
SearchCRS Search for a Coordinate Reference System
TransformCRS_epsg Uses the ESRI webserver to convert coordinates between coördinatesystems
DutchGEO
BGT2D Import BGT from the Netherlands
DownloadAHN Download AHN pointcloudsets
DownloadBGTdata Download BGT-data
GetLocationdataNetherlands Gives Locationdata based on adress in the Netherlands using the PDOK-server
KadasterHouseNumbers Place textnotes for housenumbers from the dutch kadaster
KadasterPercelen Place textnotes for percelen from the dutch kadaster
SuggestLocationdata Suggests the adress in the Netherlands that best matches the given search terms
WMTSGeoservicesLibraryNetherlands WMTS=Web Map Tile Service Library with webrequests of WMTS-services in the Netherlands
WMTSLayersNetherlands Library with layers for webrequests of WMTS-services in the Netherlands
WMTSRequestAndImport Total node with WMTS webrequest and import of image in view
WMTSScaleSetNetherlands WMTS=Web Map Tile Service gives resolution, scaledenominator and number of tiles
Geometry
ArcGISJSONtoPolygons Convert a JSON-file from a ARCGIS-server to points and polygons. And transforms the coordinates to the Revit project basepoint(WORK IN PROGRESS)
CreateDetaillinesFromPolygons Create detaillines from polygons in a view
CreatePointFromGML Create Points from space seperated GML
CreatePointsPolygonFromGMLxy Create points and polygons from a xml/gml-file
CreatePointsPolygonFromGMLxyz Create points and polygons from a xml/gml-file with x,y and z value
FilterGML Filter GML-file based on boundingbox
Helpers
OpenBrowser Opens your standard internetbrowser with a given (download)link
UnzipFile Unzip zip-file
Image
ImportImageInVIew Import image in view
SetImageWidth Set width of imported raster image
SystemDrawingBitmapToJPG Save a bitmapobject as JPG
OSM
DownloadOSM Download openstreetmaps using de overpass API
OSM3DBuilding Filter OSM-data and look for buildings with ‘height’ parameter and create 3D solid
Pointcloud
DownloadLASZIP Download LASZIP http://www.laszip.org
BuildCMDLASZIP Create scriptfile to run laszip
LASZIPCommands Commandline options for LASZIP
PTStoPoints Convert a pts-file(ascii) to dynamo points
Revit
GetRevitSiteLocation Gets the properties of the current Site Location of the active Revit Project
SetRevitSiteLocation Sets the properties of the current Site Location of the active Revit Project
SubSoil
ReadGEFCPT Convert a GEF-file into soillayers. GEF=Geotechnical Exchange Format
GEFCPTTo3DSoilLayers Creates 3D site families for each unique soillayer
WMS
WebrequestWMS Imports the result(image) of a webrequest based on WMS-protocol into a view in Revit
WebrequestWMS2 Get the image from a WMS-webrequest
WMTS/TMS
CombineImages WMTS CombineImages
TMSTileNumberFromCoordinate Calculate TMS(Tile Map Service) Number from a lat/lon coördinate
TMSBoundingboxFromTileNumber Calculate Lat/Lon boundaries from a TileNumber in TMS(Tile Map Service)
TMSWebServices Library with TMS Webservices
TMS_WMTS_WebrequestAndCombineImage Webrequest for list of WMTS or TMS/Google webrequests for tiles. Combines them to 1 image.
TMSGetTileNumbersFromBboxLATLON Get the Tilenumbers in X and Y in the TMS Webprotocol based on a given Boundingbox in LAT/LON
WebrequestWMTS WMTS=Web Map Tile Service imports the result(images) of a webrequest based on WMTS-protocol into a view in Revit
WMTSTileListFromBbox WMTS=Web Map Tile Service gives a list with tiles
WMTSZoomLevelTileRow WMTS=Web Map Tile Service gives the tilerow and tilecolumn for the WMTS webrequest
Geoservices
SouthAfricaGeoservicesLibrary
HawaiGeoservicesLibrary Geoservices in Hawai
BelgiumGeoservicesLibrary Geoservices in Belgium
NetherlandsGeoservicesLibrary Library with multiple webadresses which can be used for WFS and WMS webrequests
SpainGeoservicesLibrary Geoservices in Spain
GoogleStaticMapsAPI Use the Google Static Maps API to download map or aerialphoto(WMS)
GeoCodingGoogleAPI Gets coordinate from address with google API

Home page: https://github.com/DutchSailor/GIS2BIM

Batch.UpgradeFamilies

Batch.UpgradeFamilies

Dynamo Hierarchy: Rhythm>Tools>Batch>Batch.UpgradeFamilies

Description: This tool with batch upgrade all the Revit families in a directory and delete the backup files that are generated. Back up your files first if you might need them after.

Inputs:

directoryPath : String

 

Outputs:

Succesfully Upgraded : FilePath

Not So Succesfully Upgraded : FilePath

Element.AnimateTransparency

Element.AnimateTransparency

Dynamo Hierarchy: Rhythm>Animate>Element>Element.AnimateTransparency

Description: Animate the transparency of an element. This will export images of the element, then revert the element back to where it was. Inspired by the Bad Monkeys team.

Inputs:

element : Element

parameterName : String

startPercentage : int

endPercentage : double

iterations : int

directoryPath : String

view : View

Outputs:

element : Element

Element.AnimateNumericParameter

Element.AnimateNumericParameter

Dynamo Hierarchy: Rhythm>Animate>Element>Element.AnimateNumericParameter

Description: Animate a numeric parameter of an element. This will export images of the parameter, then revert the element back to where it was. Also, adds text to comments to prevent infinite loops. Clear this comment for subsequent runs. Inspired by the Bad Monkeys Team.

Inputs:

element : Element

parameterName : String

startValue : double

endValue : double

iterations : int

directoryPath : String

view : View

Outputs:

element : Element

Element.AnimateColor

Element.AnimateColor

Dynamo Hierarchy: Rhythm>Animate>Element>Element.AnimateColor

Description: Animate the color of an element. This will export images of the element, then revert the element back to where it was. Inspired by the Bad Monkeys team.

Inputs:

element : Element

startColor : Color

endColor: Color

iterations : int

directoryPath : String

view : View

Outputs:

element : Element

ReferencePlane.GetCurvesInView

ReferencePlane.GetCurvesInView

Dynamo Hierarchy: Rhythm>Revit>Elements>ReferencePlane>ReferencePlane.GetCurvesInView

Description:

This will obtain the geometric curves of the reference plane in a given view. Revit 2016+

Inputs:

referencePlane : ReferencePlane

view : View (default is active view)

Outputs:

curve : Curve

Mullion.SortByDirection

Mullion.SortByDirection

Dynamo Hierarchy: Rhythm>Revit>Elements>Mullion>Mullion.SortByDirection

Description:

This will sort mullions of a host curtain wall by the direction they are facing.

Inputs:

hostingElement : Wall

Outputs:

Horizontal : Element

Vertical : Element