Place families on Point arrays on surface

Hi everyone,

I am trying to populate some shelves with A. Bottles and B. Books.

On my workflow I want the flexibility of ‘selecting.Face’ (shelves) to place a ‘Sequence’ of points on which then I can select a family to place on those points.

From the attached image please let me know what I am doing wrong:

A. I am not getting an array of points on the top surface I selected
B when the family (Generic Bottle) is placed via the Node it is placed at the ‘origin’ of the family with what appears to be an X/Y/Z coordinate of 0 (zero) yet a point is placed at the top shelf (please see blue point on the image attached)

Please advise how to amend my workflow to allow me the flexibility to choose a surface then populate that surface with an array of families


Place family oPlace family on Shelf by points on surface with Z point n Shelf by points on surface|690x326

Have you tried a cross product lacing on the point at parameter node

A. Select Face returns a list, which is throwing off the list structure for Surface.PointAtParameter. You either need to use longest lacing on that node or get the singular surface from the list. Unrelated, but your U/V parameters are incorrect as well. PointAtParameter uses values from 0 to 1. As is, the vast majority of your points are outside of your surface.

B. What is the normal placement type of your family (ie. face, workplane, point, etc.)? Does the family utilize an Offset parameter that needs to be adjusted? I’m guessing the family hosts to the level and needs be given an offset.

1 Like

Hi Nick

-not sure what you mean by using longest lacing

-family is face based

Ideally I need the dynamo workflow to be flexible to be used for populating different shelf families


See this page on the Dynamo Primer for more info on lacing:

It’s likely a good idea to revisit the whole primer from cover to cover as there will be a lot of ‘basic’ info like this which won’t readily be clear otherwise.

This means you can’t just use a point and get an accurate and well functioning graph. Look into the other methods of placing a family instance by face, such as:

Review what Surface.PointAtParameter returns with those values. By the looks of it all but one will not fall in the face.

Hi Jacob/Nick

Thanks for all your guidance.

I have managed to place the family on the points.

Can you please advise what nodes/workflow I can introduce between selecting the surface and defining the X/Y/Z coordinates of the first point (A range follows as per ‘step’)

Currently I ‘Watch’ the X/Y/Z list that the surface node picks and I manually put that ‘data’ numbers and connect to the point.bycoordinate node.

I tried using this workflow but got a bit confused on the hierarchy…

The next challenge I have is controling the ‘normal’ of the point to give some families an angle after placement! Any tips?


Not sure what you mean by this. Can you post a sketch?

Hi Jacob,

At the moment I have to select each shelf to get the X/Y and Z coordinates
Then I manually input those coordinates as per sketch attached to define the placement of points which will host the families

Can I use a flaten.list node and get.atindex node to ‘automate’ the above process?
As a newbie I can get to grips with managing lists yet :slight_smile:


I hope this helps.

Have you done the Dynamo Primer yet? Most of the concepts needed to resolve your issue are well covered there. Be sure not to skip any exercises even if you don’t think you will need the results, as the methods are the important part not the outcomes.

If you have done this and are still lost look into the Select Facenode, the Surface.PointAtParameter node, the Geometry.DoesIntersect node, the List.FilterByBoolMask node, and then the FamilyInstance.ByFace node.

If your shelving system is well built in Revit via nested parametric parts then likely you can expedite further by getting all shelves as a type and using their location line to find the points.

1 Like