Placing revit family into site boundary based on the creation of a grid system of points

I AM TRYING TO CREATE A GENERATIVE DESIGN SCRIPT TO AUTOMATE THE PLACEMENT OF A REVIT FAMILY WITHIN A SITE BOUNDARY. NOT SURE THE BEST WAY TO GO ABOUT THIS, THIS IS WHAT I HAVE SO FAR, CAN’T SEEM TO GET THE list.cartesianproduct NODE TO COMBINE MY X AND Y VALUES INTO A SET OF COORDINATES.

the cross-product lacing works as well.

Yes ! This creates a single grid of points, but I need to create a grid system across my site boundary outlined in the black line. Any ideas, thanks for your


help ?

see the “Auto” at bottom right of Point.ByCoordinates, right click → lacing → cross-product. see if the output suits ur need.

Wow, thank you so much, tried all day friday to figure that out ! Next step is to filter all points that are outside the site boundary, so that family types are not placed along these points. With the end goal to have a adpative script that allows the user to control parameter inputs, like family type number and grid/point spacings.

Geometry.DoesIntersect is looking for two sets of geometry to intersect, not a boolean. This should be the list of points and the surface.


Thanks a lot, however now the FamilyInstance.byPoint is coming in with an error, it seems the Geometry intersect node can not wire straight into FamilyInstance.byPoint ? Am i missing a node in between ?

Again, your types don’t match. The error states that one of the inputs received is not what the node expects. Geometry.DoesIntersect returns a boolean of whether the two geometries intersect or not. You would then have to filter your list of points to return only the points on the surface. The other option would be to use Geometry.Intersect, which returns the intersecting geometry of the two inputs. Because you’re checking points, the intersection will always be the same point and essentially filter itself in this particular case.

Geometry.Intersect` between Points and Surface.ByPatch results in a nested list with Empty Lists. Even when the point touches the surface, Dynamo doesn’t treat the point as intersecting properly. Because in Dynamo, Points do NOT “intersect” surfaces unless it’s a 3D solid or curve intersection. That’s why i suspect this solution does not work. Any other ideas, thanks a lot for your help

That’s incorrect. Any geometry will intersect with any other geometry. The structure is a list of lists because that’s the structure of points you have. You’ve created the points without a z-coordinate, which is the same as setting them to 0, so I’m assuming your surface is also at 0. I’m guessing the input structure you’re using is causing the issue. Can you show us the inputs for the Geometry.Intersect node? Make sure the surface is a single entity (not a list containing a single surface) and flatten your list of points if necessary.

Okay thank you, here is the inputs for the list of points, my surface is all on the one plane to make it simpler for family placement. Really appreciate your help and feedback !!


this is my site boundary in revit, along with my family type placed at each point. The end goal is to have all points/family types placed inside the boundary line, with the ability to rotate each family as needed. I have a list of 4 family types that i would like to control try and control the amount of each type using number slider nodes etc… to be placed on the points.

We need to see the node previews or a Watch node to know what’s actually going into your nodes.


Apologies, I am around for a teams call on C21474446@mytudublin.ie, if that helps, may be easier to communicate, again really appreciate your help !

You’ve confirmed that the surface is at Z=0? The information that we’re looking for here is the z-coordinates of your geometry.

Since you’re creating the points based off the surface bounding box anyway, you may as well just use Surface.PointAtParameter. That will give you a similar array of points relative to the bounds of the surface without having to deal with the specific coordinates.

Example:



Okay I have used the Surface.bypointatparameter node. it is now creating points way outside the scope of my surface area. Do i now filter using the points like we mentioned before to inside the site boundary ?

I’m guessing your UV values are way off. UV values range from 0 to 1. If you’re using the same sequence you created before then you’ll be way outside the bounds of the actual geometry. I think you may also be seeing points from other nodes in your graph. It’s best to turn off all the node geometry previews for anything you aren’t using.

Okay thanks for all your help Nick :+1: