Bimorph Nodes Index


Developed and maintained by Thomas Mahon

Bimorph Nodes are a versatile collection of powerful utility nodes that extend Dynamo for Revit. It includes ultra-efficient clash detection and geometry intersection nodes, which are enabling entirely new workflows in Dynamo!

It is also the first Dynamo Package with nodes capable of converting curves from CAD Links or Imports using layer names as filters.

The package includes:

CAD
CAD.LayerNames Get the full list of layer names from a CAD Link or Import.

Visit Bimorph Nodes CAD.LayerNames for user guides and downloadable example graphs

CAD.LayersInUse Get the list of layer names from a CAD link or import that are in use and contain curves.

Visit Bimorph Nodes CAD.LayersInUse for user guides and downloadable example graphs

CAD.CurvesFromCADLayers Convert curves from a CAD Link or Import by layer name to Dynamo curves or Revit Model Lines. Layer names can be input to filter and convert only curves on those layers. Curves are output in sublists based on their layer name and mapped to the Lines Line Style to prevent unwanted CAD styles from entering your Revit project. Alternatively, Line Style names can be input to map each sublist to that style during conversion. To convert all layers, leave the layerName input unconnected. Input layerNames and LineStyleNames are case-sensitive.

The node is optimised to convert curve-types that typically fail when using Dynamo’s Element.Curves node or Revit’s Explode tool for enhanced performance. The node also circumvents the 10000 element limit set by Revit for greater workflow flexibility.

Visit Bimorph Nodes CAD.CurvesFromCADLayers for user guides and downloadable example graphs

CAD.DetailCurvesFromCADLayers Convert curves to Revit Detail Lines from a CAD Link or Import by layer name. Curves are output in sublists based on their layer name and mapped to the Lines Line Style to prevent unwanted CAD Line Styles from entering your project.

Alternatively, Line Style names can be input to map each curve sublist to that style during conversion. Layer names can be input to filter and convert only curves on those layers. To convert all layers, leave the layerName input unconnected. Input layerNames and LineStyleNames are case-sensitive.

The node is optimised to convert-curve types that typically fail when using Dynamo’s Element.Curves node or Revit’s Explode tool for enhanced performance. The node also circumvents the 10000 element limit set by Revit for greater workflow flexibility.

Visit Bimorph Nodes CAD.DetailCurvesFromCADLayers for user guides and downloadable example graphs

CAD.SymbolicCurvesFromCADLayers Convert curves from a CAD Link or Import to Revit Family Symbolic Lines using the import instance layer names as filters.

Curves are output in sublists based on their layer name and mapped to the Family’s default Line Style to prevent unwanted CAD Line Styles from entering your project. Alternatively, Line Style names can be input to map each curve sublist to that style during conversion. Layer names can be input to filter and convert only curves on those layers. To convert all layers, leave the layerNames input unconnected. Input layerNames and lineStyleMap are case-sensitive.

The node is optimised to convert-curve types that typically fail when using Dynamo’s Element.Curves node or Revit’s Explode tool for enhanced performance. The node also circumvents the 10,000 element limit set by Revit for greater workflow flexibility.

Visit Bimorph Nodes CAD.SymbolicCurvesFromCADLayers for user guides and downloadable example graphs

CAD.ReportInstances Generates a report of all CAD links and imports in the document providing information on: instance name, link status, view specific, owner view id, workset name, file path and host level. Linked and Imported CAD links are output into lists to aid with CAD file management in Revit. The node can be used to report the current document by leaving the filePath unput unconnected, or any external Revit file or Family can be reported silently (without opening) by inputting its file path.

Visit Bimorph Nodes CAD.ReportInstances for user guides and downloadable example graphs

CAD.SetObjectStyle Set weight and colour of CAD link or import layers Object Styles. Enter the layers to set as strings. The layer names are case-sensitive. If there are less items in the lineStylesWeight or lineStylesColour list then longest lacing is used to map these attributes to the layerNames list.

Visit Bimorph Nodes CAD.SetObjectStyle for user guides and downloadable example graphs

Curve
Curve.RemoveDuplicates Removes duplicates from a list of Curves. Dynamo Curves, Revit Model or Detail Lines are all supported. Revit Curves have optional inputs to delete any duplicates from the document and to retain duplicate curves that match the first style from the retainByLineStyles input (optional). LineStyle lists are iterated until a match is found. If no match is found, first-in first-out rules apply.

To simplify model element selection in Revit when using the Dynamo Select Model Elements node, heterogeneous lists (any Revit element type) can be input as the node filters the list for curves before processing. Note that LineStyle names are case-sensitive.

Visit Bimorph Nodes Curve.RemoveDuplicates for user guides and downloadable example graphs

Curve.SolidIntersection Curve.SolidIntersection adds entirely new functionality to Dynamo – now solids can be used to intersect or trim curves. Prior to BimorphNodes v2.1 it was not possible to intersect a solid with a curve, yet this functionality has significant value for a myriad of workflows; from volumetric containment testing to procedural modelling.

The node can output curve segments that either intersect the solid (default behaviour), or the result can be inverted, which outputs curve segments outside the solid. Inverting provides dual functionality to the node, with both solid intersection or solid trim possible.

In some cases, curves can fail the intersection process due to tolerance limitations within the Revit API. The node has been designed to handle these failures by returning the indexes of any problem curves to the exceptions[] output, enabling them to be filtered and rerouted to alternative methods.

Visit Bimorph Nodes Curve.SolidIntersection for user guides and downloadable example graphs

Curve.IntersectAll Curve.IntersectAll adds new functionality to Dynamo’s Curve class. The node is ultra-efficient, implementing a purpose-built curve intersection method from the Revit API which is further optimised by our own algorithms to eliminate redundant intersection tests and maximise efficiency. The result is a node which can calculate intersection points infinitely quicker than the same workflow using standard Dynamo nodes; in bench-marking tests, we have recorded up to 99.7% reduction in overall processing time!

Visit Bimorph Nodes Curve.IntersectAll for user guides and downloadable example graphs

BoundingBox
BoundingBox.GetElementsInside Filter and return Revit elements inside a bounding box. BoundingBox.GetElementsInside exposes Revits ElementQuickFilter class, which operates only on the ElementRecord (a low-memory class), making it ideal for rapid element containment testing and collection. Note that the results are – by design – coarse, as the input element Outlines (BoundingBoxes) are used to determine the result, not the geometry. QuickFilters therefore, should be used as a means of optimisation prior to performing more complex, time-consuming processes, such as geometry intersections.

For example, these nodes can be used to optimise an interference checking workflow by collecting only elements within the proximity of another element. The result will be a far more focused collection of elements, making any subsequent geometry or element interference process significantly more efficient as redundant interference tests will be largely eliminated.

The optional tolerance input can be used to collect elements extending from the BoundingBox by the distance input. Use positive values to increase the BoundingBox zone, or negative values to decrease the zone. It uses the active document units (mm, cm, m etc) and converts them to Revit internal units dynamically.

Visit Bimorph Nodes BoundingBox.GetElementsInside for user guides and downloadable example graphs

BoundingBox.GetElementsIntersect Filter and return Revit elements that are inside or intersecting a bounding box. BoundingBox.GetElementsIntersect exposes Revits ElementQuickFilter class, which operates only on the ElementRecord (a low-memory class), making it ideal for rapid element containment testing and collection. Note that the results are – by design – coarse, as the input element Outlines (BoundingBoxes) are used to determine the result, not the geometry. QuickFilters therefore, should be used as a means of optimisation prior to performing more complex, time-consuming processes, such as geometry intersections.

For example, these nodes can be used to optimise an interference checking workflow by collecting only elements within the proximity of another element. The result will be a far more focused collection of elements, making any subsequent geometry or element interference process significantly more efficient as redundant interference tests will be largely eliminated.

The optional tolerance input can be used to collect elements extending from the BoundingBox by the distance input. Use positive values to increase the BoundingBox zone, or negative values to decrease the zone. It uses the active document units (mm, cm, m etc) and converts them to Revit internal units dynamically.

Visit Bimorph Nodes BoundingBox.GetElementsIntersect for user guides and downloadable example graphs

Element
Element.IntersectsElement Element.IntersectsElement is one of our new game-changing clash-detection nodes, making it possible to perform ultra-efficient clash-detection tests in Dynamo.

It utilises a purpose-built Revit API method to perform the intersection – which itself is optimised – coupled with our own algorithm, which optimises each clash test by collecting and using only surrounding elements before processing. The technique results in a massive performance increase, with up to a 99.95% reduction in overall processing time compared to the current approach using standard Dynamo nodes Geometry.Intersects + Element.Solid.

The output Elements are structured into sublists to support downstream workflows. Understanding the output data structure is simple: any elements from Set B that intersect an element in Set A are stored in a sublist (the ‘clash result’). If there are no intersections, an empty sublist is returned to maintain data structure consistency.

The node also includes intelligence which prevents self-intersections if an element is found in both element Set A and B, to eliminate false-flags.

Visit Bimorph Nodes Element.IntersectsElement for user guides and downloadable example graphs

Element.IntersectsSolid Element.IntersectsSolid is a game-changing clash-detection node built for Dynamo BIM, which provides greater flexibility and interop with Dynamo Solid vs Revit elements. The node is extremely useful in situations where there is no reference geometry – for example, testing if door swings clash with another element. In this scenario, Dynamo Cylinder extrusions could be created at each door to represent the swing zone, then Element.IntersectsSolid can be used to perform the clash test.

The node utilises a purpose-built Revit API method to perform the intersection test, which drastically improves efficiency in comparison to standard Dynamo nodes such as Geometry.IntersectAll. In addition, it is built on the same infrastructure as the Element.IntersectsElement node, meaning it also includes our custom optimisations to minimise redundant tests by filtering surrounding elements per clash.

As the node utilises a purpose-built method from the API, many of the performance bottlenecks typically encountered with the OOTB Geometry.IntersectAll node are prevented, providing ultra-efficient intersection results despite the fact solid intersections are still being computed.

In some cases, solids can fail the intersection process due limitations with certain geometries processed by the Revit API Shape Builder. The node has been designed to handle these failures by returning the indexes of any problem solids to the exceptions[] output, enabling them to be bypassed, or filtered and rerouted to alternative methods.

Visit Bimorph Nodes Element.IntersectsSolid for user guides and downloadable example graphs

Element.IsCategorySupported Not all Revit Categories are supported by the two Bimorph Element.Intersects nodes because the Revit API provides no support. It is difficult to know which Categories are not supported since the output from the two Element.Intersects nodes defaults to an empty list when intersections fail.

Element.IsCategorySupported provides a means to check if the element Category is supported, outputting true or false accordingly.

Visit Bimorph Nodes Element.IsCategorySupported for user guides and downloadable example graphs

Element.IsElementSupported Not all Revit elements are supported by the two Bimorph Element.Intersects nodes because the Revit API provides no support. It is difficult to know which elements are not supported since the output from the two Element.Intersects nodes defaults to an empty list when intersections fail.

Element.IsElementSupported provides a means to check if the element is supported, outputting true or false accordingly. If the element is not supported (such as Rooms), a good alternative is to extract its solid volume and use the Element.IntersectsSolid node.

Visit Bimorph Nodes Element.IsElementSupported for user guides and downloadable example graphs

Revit.LineStyle
LineStyle.AllAttributes Gets all the Revit Line Styles in the document and reports their Line Style Name, Weight and Colour as strings and integers. The Revit GraphicsStyle (Category) element for each Line Style is also output.

Visit Bimorph Nodes LineStyle.AllAttributes for user guides and downloadable example graphs

LineStyle.Create Create single or multiple new Line Styles in a Revit document by inputting names, line weights and RGB values. The node is equipped with a range of user-friendly pop-up messages that guide users through the creation process by specifying the expected inputs.

Visit Bimorph Nodes LineStyle.Create for user guides and downloadable example graphs

Revit.Schedule
Schedule.GetData Gets all the table data from a given Schedule as strings.

Visit Bimorph Nodes Schedule.GetData for user guides and downloadable example graphs

Schedule.GetDataColumns Get the specified column data from a given schedule as strings. Column indexes start at 0 and any input indexes that are out of range are ignored. Use the removeHeading input to specifiy if the headings should be removed from the returned string lists.

Visit Bimorph Nodes Schedule.GetDataColumns for user guides and downloadable example graphs

Schedule.GetDataRows Get the specified row data from a given schedule as strings. Schedules have a blank row after the headings so index 1 will always contain no data. Row indexes start at 0 and any input indexes that are out of range are ignored.

Visit Bimorph Nodes Schedule.GetDataRows for user guides and downloadable example graphs

Revit.Sheet
Sheet.Duplicate Duplicate selected Sheets with options to specify the duplication of placed Views and the method of duplication. The node will identify illegal characters in View names (such as {3D} for example) and clean them automatically to circumvent unexpected failures.

The algorithm which controls the duplicate View behaviour has been designed so that dependent Views are duplicated from a newly created parent View to maintain the existing View structure. The node will also check if the parent View exists on subsequent runs to handle situations where any of its other dependent Views need to be duplicated.

The report output provides a detailed log of any Sheets that fail to duplicate, any Views that fail to duplicate or cant be placed, and View names cleaned of illegal characters.

Visit Bimorph Nodes Sheet.Duplicate for user guides and downloadable example graphs

Sheet.RenumberRename Renumber and/or rename Revit Sheets. To renumber only, leave the newNames input unconnected. To rename only, leave the newNumbers input unconnected. For the node to execute, the sheets and newNumbers lists must contain an equal number of items.

The node uses an algorithm which handles common Revit Sheet renumber failures, including failures caused by number ‘overlaps’ that can occur during the renumber process, resulting in significantly higher success rates when compared to updating the Number parameter using the out-of-the-box Element.SetParameterByName node.

Visit Bimorph Nodes Sheet.RenumberRename for user guides and downloadable example graphs

Sheet.FromSchedule Collects and returns all Revit sheet elements from a Sheet List Schedule using either a View or view name input. The Sheet Number field should be added to the Schedule for the node to execute.

Visit Bimorph Nodes Sheet.FromSchedule for user guides and downloadable example graphs

Advertisements

2 thoughts on “Bimorph Nodes Index

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s