Grasshopper
Goal
Import a point cloud from SiteScape or Polycam, control how many points display, cut a section through it, and draw the section line.
Method A - native components (recommended)
Rhino 8 includes point cloud components. This route uses existing components where possible.
- Get the cloud into Rhino.
- Choose File > Import and select the E57, LAS, PLY, or XYZ file from SiteScape or Polycam.
- Rhino 8 opens point clouds natively as a PointCloud object.
- Reference the cloud in Grasshopper.
- Place a Point Cloud parameter (Params > Geometry > Point Cloud).
- Right-click it and choose Set one Point Cloud, then click the cloud in the viewport.
- Limit how many points you process.
- Displaying fewer points is a Rhino viewport setting, not a Grasshopper setting. In Rhino, select the imported cloud and lower the displayed point count in its point cloud display properties. This only changes what you see in the viewport, not the data.
- To actually reduce the points in Grasshopper, decimate explicitly. Keep every Nth point with Cull Pattern (Sets > Sequence > Cull Pattern), driven by a Number Slider that sets the keep interval, or use Random Reduce.
- Cut a section.
- Add a Point Cloud Section component (search PC Section or Point Cloud Section in the component finder, Ctrl+Alt+Q).
- Feed it the point cloud and a section plane.
- Build the plane with an XZ or YZ Plane component plus a Move to position the cut, or use Construct Plane with a point and a normal.
- Draw the section line.
- If the section component outputs points, sort them along the section and connect them to a Polyline (Curve > Spline > Polyline) or Interpolate.
- To sort, use Sort List (Sets > List > Sort List) keyed by the tangent coordinate from Point X or Point Y components.
Note: exact component locations vary by Rhino version. Use the component finder and type the name.
Method B - one GhPython component (fast and reliable)
Use pointcloud-section.gh to skip the setup and open the definition ready-made, or build it yourself from pointcloud-section.py. It reads an XYZ/PTS file directly, decimates, cuts, and draws the line in a single component. This is the most robust route for arbitrary point cloud files and is the easiest to share as a single file.
Steps:
- Place a GhPython component (Maths > Script > GhPython, or search Python in the finder).
- Double-click it and paste the full contents of pointcloud-section.py.
- Add five inputs. Right-click the component and use the input editor, then rename them to exactly: file_path, decimate, axis, section_pos, tolerance.
- Add four outputs and rename them to exactly: status, cloud_pts, section_pts, section_line.
- Connect a Panel holding the file path to file_path, a Number Slider to decimate, a Panel with X, Y, or Z to axis, a Number Slider to section_pos, and a Number Slider to tolerance.
- The outputs give you the decimated cloud, the section points, and the section line.
Why both methods
Method A is the idiomatic Grasshopper route and uses built-in components. Method B is more reliable across point cloud file types and easier to hand to someone else as a single file. Use A for a clean native graph, B when you hit a file that will not import or when you need a shareable definition.
Notes on the section
- axis = X cuts a vertical section normal to the X axis (the plane is the YZ plane at x = section_pos). This is the usual landscape cross section.
- axis = Z cuts a horizontal slice (like a contour band). The line traces the plan outline.
- The section line is a polyline through points sorted along the tangent axes. For uneven data, raise the tolerance to thicken the slab, or decimate less.