XYZ Cells by Face

I have created two custom nodes for creating XYZ cell grids on a surface face.

  • XYZ Triangle Grid by Face

  • XYZ Quadrangular Grid by Face

These are available as a Dynamo package. More to come... :)


in revit the surface domains are created differently between planar and non-planar surfaces. could be the surface domain node does not deal well with planar surfaces.

weird thing is that it works fine with non planar faces! with correct scale.

thanks for this great work. I have an issue maybe due to some localization in Revit. it works for me but there's a scale problem: the grid is very small regarding the original geometry. any idea? thx!

Nate is a superstar!

thanks! Made some more and updated the package...


Amazing job!

Thank you.

Is there a solution to the issue Julien identified?

I’m running into the same thing and can’t read Python enough to understand what the custom node is doing to reverse engineer a solution.

Matt - is there a documentation for what is the difference between planar surface domain and non-planar?

I ran into this issue, and yesterday I did a separate test for planar/non-planar surfaces - attached the screen captures.

So how do we map the planar surface domain to get the correct results?

Please advise.




With a planar surface I would project each point towards the surface, if you get an intersection coordinate you keep that point, otherwise you filter it out. Will that solve your problem?

@Michael Kirschner - thanks for reply.

My struggle is: how do I “know” that a face is planar or not in order to take one path or another? as of now I use “select face” built in node.

How do I query the selected surface and check if it is planar or not? If I can do that, then I can pass through a boolean and split the solution in two approaches (one that I used and

in case face is planar, use what you suggested).

How about a non-simply connected region? will your approach work in that case - see screen capture.

Thanks for your comments!


The Clockwork library (by Andreas Dieckmann) has a Surface.IsPlanar custom node that you could try.