How to Create a Surface in Revit from XYZ Point Cloud Data?

I have used Dynamo to plot a number of points within an adaptive family template. The xyz data was derrived from a cropped point cloud survey.

Due to the decimation of the original data, the points where data exists, share common ‘Y’ values.

I am trying to plot a number of curves, using the common ‘Y’ values, in order to create a surface within Revit, however, l am completely stumped on how to proceed.


Any guidance on how to achieve this would be much appreciated.



What do you want to use the resulting surface for? If it’s just for reference, maybe you’re better of with using Recap 360, or Meshlab to create a mesh out of your points and import that to Revit via Dynamo via the import mesh functionality + the Directshape.ByMesh node?

Or maybe import the pointcloud directly into Revit.

Hi Jostein,


Thank you for your reply.


I wish to represent a surface via the point cloud data in Revit, but not via a dwg link. I have used Meshlab, however, not in the context with Dynamo and Directshape.ByMesh node. I guess l was trying to not use Meshlab and just use the point cloud data cropped via Recap to achieve the result in the shortest amount of steps.

The client wishes to observe the nuances of a scanned wall or floor etc. and interact with it within Revit.



1 Like

Have you tried NurbsSurface.ByPoints ?

Hi Vikram,


Thank you for your suggestion.

I just tried it and it crashed. Is there a limit within reason that the NurbsSurface.ByPoints can handle? I have currently 3000+ points.


I attempted to do it with only 100 xyz points and crashed??

Don’t know if there is a limit.

How about testing it on a smaller set of points to see if it works.

You could use TakeEveryNthItem to reduce the number of points

In NurbsSurface.ByPoints try setting uDegree and vDegree to 1

The crash shouldn’t be happening (although I’m not able to reproduce this using daily builds) but NurbsSurface.ByPoints also needs a list of list of points (rows), not just a flat list of points. You probably need to order the list into x and z coordinate sorted rows/columns order to make a nurbssurface, using a combination of Point.X, Point.Z, SortByKey, and GroupByKey. I can’t remember if Clockwork has some utilities for this.

If this is heading to Revit, you could also just send the collection of unsorted points to a Topography.ByPoints node, which makes a mesh of whatever jumble of points you have. Of course, then you just have a topo . … not sure how useful that is for you.

I don’t think a topo will do if it’s a vertical face, since Revit topos dont like points that have the same xy coordinate at different heights, or is this changed in later releases of Revit?

Care sharing a flick of the pts-file?

I agree with Jostein- Revit does not like vertical faces in a topo.

I’m no expert in this- but I had similar problems with Civil3D. I don’t know if it uses the same algorithm. I did some reading on delaunay triangulation and it should not matter if faces are vertical.

Sacrilege on a Dynamo forum I know- I ended up using Rhino/Grasshopper ‘mesh from from points’ and bringing into a family as a dwg import.
The family has to be a ‘sectionable’ type- for some reason not all are. From memory, I used ‘structural framing’





Thank you thus far for your responses.

I find Dynamo brilliant and annoying at the same time, however, l know it is my lack of understanding.


I spent most of the weekend trying to get somewhere with this task and ended up deleting what l have created.


I may retrieve it from recycling and pass to you guys later.

Attached are the xyz points (in metres), and my graph as it point cloud data XYZ Point for Adaptive Family

Hi again,

had a look at it now, and I did this to achieve the results in the pics below:

  1. import points to Meshlab via a txt file

  2. Making sure all the vertex normals are heading the same way

  3. remeshed using one of the available filters (Ball pivoting in my case)

  4. Export to .obj

  5. Open in dynamo via the Mesh toolkit package

  6. convert to polysurface. Be careful! Heavy operation!

  7. Import to Revit via spring nodes FamilyInstance.ByGeometry


Thank you for this response. I have managed to recreate what you have outlined.


I tried the attached image, using the same technique, but failed at the Mesh.Triangles node.Capture

this is the Rhino/Grasshopper version.

Looks a bit different- but that is one lumpy wall…!


With Dynamo :slight_smile:

Could get better results with a little more effort.

File: Points-Surface.dyn


You can get a very quick and fairly rough representation of the volume occupied by the points by generating a 3d convex hull. The nice thing about this is that it’s done entirely in Dynamo:

The wall is a very small extract from a point cloud survey from an underground tunnel, however, l agree, it is a rough wall.

Thank you to all thus far. The results are encouraging, however, Meshlab or something similar seems difficult to beat at the moment. Frustrating, but solutions shall present themselves.