Onion - new package

[edit: current node list is here : http://lubim.co/dynamo-nodes/]

Hi all!,

I have decided to put together some of my recent code pieces into a package. You can find it by the name ‘Onion’ in the package manager. As it is a 0.0.1 version I would love to here some comments from you:).
It is built for Dynamo 2.0.3
So far it contains modest eight nodes:

CurtainWall.VGridReferences and CurtainWall.UGridReferences - outputs references to gridlines of a curtain wall; extra ‘IncludeSides’ parameter allows you to get also references for sides/top/bottom of the wall

FamilyInstance.ReferenceByName - gives you a references to a named reference plane inside a family - eg. “Left”, “Center” etc.; can be useful for dimensioning

Grid.FindClosestIntersection - returns a closest grids intersection to a given point; outputs three lists grid A, grid B and an intersection point

Grid.Intersections - outputs intersection points for given grids; output is similar as above

Point.FindClosest - takes a point (A) and finds a closest point from another point list (B); outputs the closest point and it’s index in the list

Wall.Intersections (removed at 0.0.2 - replaced by Element.LinearIntersections) - returns intersection points of given walls, again outputs three lists - wallA, wallB and intersection point; extra bool parameter allows you to get duplicate intersections (if wall A intersects wall B then also wall B intersects wall A)

Wall.Split (removed at 0.0.2 - replaced by Element.Split) - splits a wall at a given point - like Revit’s slice tool; the point has to be located on the wall’s location curve - extra IgnoreZ parameter allows to take only X and Y coordinates into consideration (so you can use a point that is higher than wall’s base)

Hope it can be useful to somebody :slight_smile: Please let me know!



Cool! Thank you!

If i were to suggest something that is of a similar type to one of the above that is not currently out there.
(If not too hard?)

Can your “Wall.Split” Node be modified to split ducting?


It would be great if you could share a dynamo workflow with this wall.split node. @maciek.glowka

1 Like

Thanks for your comments guys!

@Fasher - I have never worked with MEP system in Revit, but I will take a look into it. Should be doable. Would a duct intersections also be handy? or maybe it already exists?

@karthi1015 - a basic scenario could look like that:

I have a model line extended to a wall centerline. Then the graph would look like that:

A more complex one, using another node Wall.Intersections:

It splits walls where they meet another walls (they have to be on the same level though). You can see here that only two walls got split (4 new walls in the output) - it is because the rest was intersected at their endpoints (touching by corners for instance).
The output of wall split node is either a pair of two walls (if the wall got split) or a null if the wall could not be split (split point not on the wall or exactly at the endpoint for example)

the .dyn files of the above:
wallSplit_1.dyn (7.5 KB) wallSplit_2.dyn (7.4 KB)


I’m unsure if duct intersect points are out there but i do know there is nothing to split a duct at a point on a MEP curve.

1 Like

Ok, so it turns out ducts and walls have some differences (like ducts can slope!).
But after some tweaking I have managed to make those two nodes more universal. They should in theory work for any elements that are based on a location curve (limited to a straight line).
The node names got changed to Element.LinearIntersections and Element.Split. They are uploaded in a 0.0.2 version of the package.

I have also added IgnoreZ option to Intersection node as well. If the ducts are sloped than it would not be handy propably to always have to aim a the exactly correct Z value.

What is interesting now is that you can split for instance ducts where they meet walls.

The Intersection node elements input is therefore split into two lists A and B. This allows you to be sure that you receive intersection points for the duct element (in this example) and not for the wall element.
It is important as when using the IgnoreZ option the final intersection point is projected onto a location curve of the A element from the intersecting pair. Walls location curve would be usually located much lower than the one of the duct.

If you want to intersect walls with walls you can just input the same list twice:

Also the split node can now split the same element in multiple points at one go. 0.0.1 version might not do so.


Hi again,

I have added a new node that allows to join geometry of elements. It takes two lists and tries to join each element from first list with each element from the second. It is written in c# for performance - I have tested it with quite large project and it is working well I think. As it might take some time to process all the geometry it displays a progress bar window.
I am afraid there might be an issue with automatic loading of the DLL together with the rest of the package - not sure how to handle it properly. If somebody has knowledge how to fix it - please let me know! :slight_smile:

All the nodes are described here http://lubim.co/dynamo-nodes/



Hello everybody!

I have decided to rebuild the package slightly and I have pushed a new update to the repository.
I am moving everything into C# zero touch nodes, so not everything is there yet (and maybe won’t be) - but the most useful nodes are included.
There are four of them at the moment:

AutoJoin.JoinList - joins geometries of all objects from list A with objects from list B. It is faster than any python solution would be, I believe + lets you know about progress (same as before).

GridIntersections.FindClosestIntersection - finds a closest grid intersetion to a point given - useful for describing elements location in the project

Elements.LinearIntersection - finds intersections between line based elements (ducts, walls etc.). checkSolids parameter allows to find an intersection even if the location curves are not on the same plane (for example wall and a duct below ceiling) - in this case intersection point will be located on a element from list A

Elements.LinearSplit - splits line based elements, works a bit like Revit’s slice tool. Works well with the LinearIntersetcion node

Please somebody let me know if it is working…I have always hard time uploading DLLs to the package manager :slight_smile:



Hi @maciek.glowka, thanks for your great package Onion, I test yours nodes for split ducts (or pipes) and walls, with python custum (that I prefer because the code is available) and also C# nodes. I don’t know if I used correctly your nodes but it’s worked perfectly only with horizontal ducts (or pipes) but nex to the split position the duct (or pipe) fitting became unconnected.

It works also for vertical duct/pipes (that intersect with floors)?

Maybe for split duct and pipe you can also use the break method?
For ducts:

and for pipes:

Thanks for your efforts

thanks for your efforts
Have a nice day


thanks a lot for your input! I plan to share also the C# code on github (soon) so it also will be available to look at.
I am afraid it might not work for vertical ducts ( I believe they work like columns in Revit - are they two level based as well?)
I had horizontal or inclined elements in mind when working on the nodes - more like walls and some line based systems.
I do not work in Revit MEP so it is hard for me to answer about the fittings. But maybe I should make a second node indeed using the break method. I didn’t use it before since it would not work for walls for example.

Your node setup look correct to me.
If you could provide me with some sample file with ducts with fittings then maybe I can look into it in the (near I hope) future.

Hi ,
I have created floor openings for MEPF elements ( current and linked file) , my script works fine only Oval and rectangular Ducts but not in Circular. please help me to find out.1. Opening by selected element.dyn (31.5 KB)

there was a problem with the PullOntoSurface, it was not accepting the curve from circular duct…so I passed it through another node, but then the Python code was not accepting a spline that is in fact a circle…so I decided to recreate the circle and it works…but I am pretty sure it is not a good way to solve it (have no better idea though - maybe it will give you some direction).

Anyways I dont see how it is related to the Onion package :slight_smile:

1 Like

I have modified the split node, so it uses the BreakCurve() method if possible (when element is pipe or duct). It works now with vertical elements. I didn’t know how to test the fitting issue - but anyways I think it is as far as I can get with this method:)
The update applies only to the C# versions, but the source code is now available:

I have also added some new nodes:

  • UnjoinNotIntersecting - unjoins elements that give ‘joined but not intersecting’ warning
  • FindNotTagges - finds elements from a given category that are not tagged in specified views
  • also experimental Loop nodes, that allow to loop part of the script and update continuously
1 Like

Good evening Maciek!

Would it be possible to make a node to vertically split walls? For example where it intersects with a floor or with a level?

That could be very useful.

Kind regards,


1 Like

Hi @maciek.glowka
Great, I will test it and I Will give you a feedback !

1 Like

should be possible by making a copy and adjusting top level / base level…I will take a look - just have to figure out how to specified desired split level.

@paris - thanks :slight_smile: let me know!

Hello @maciek.glowka ,

Would the walls not loose their connection with other walls when you copy them?

I have to check. Walls tend to join automatically, so maybe after adjusting heights the connections would appear.
For sure all the annotations on one of the walls (copy) would disappear.

1 Like

The annotations are the least of my worries :slight_smile: Thank you for looking in to it, I am curious to see the result!

1 Like