DESCRIPTION
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.
MORE INFO
Visit Bimorph Nodes for more information and downloadable example graphs
DESCRIPTION
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.
MORE INFO
Visit Bimorph Nodes for more information and downloadable example graphs
DESCRIPTION
Renumber and/or rename Revit Sheets. To renumber only, leave the newNames input unconnected. To rename only, leave the newNumbers input unconnected.
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.
MORE INFO
Visit Bimorph Nodes for more information and downloadable example graphs
INPUTS
scheduleView : string or View
refresh : bool
OUTPUTS
Sheet[] : Sheet[]
DESCRIPTION
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.
MORE INFO
Visit Bimorph Nodes for more information and downloadable example graphs
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.
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.
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.
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.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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 and its category 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.
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.
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.
Get Elements from a linked Revit model (a Link Instance) by Category.
The LinkElement class is exclusive to BimorphNodes and inherits Dynamo’s Revit.Elments.Element class, meaning instances are compatible with any node that accept Elements as inputs.
LinkElement’s are purpose-built to solve the Revit API transform limitation imposed on elements from links (which restricts them to their center-to-center position, even if the associated link instance has been transformed).
LinkElement’s have no such restriction and are designed to position elements at their host location by default.
The LinkElement class is also optimised for use with BimorphNodes Element and BoundingBox nodes, firstly to ensure these nodes remain ultra-efficient, and secondly, to enable full support of elements from linked Revit models by virtue of solving the Revit API transform limitation.
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.
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.
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.
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.
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.