Skip to main content

Goal

Create or extract mesh and point geometry from Speckle model data when analysis needs vertices, areas, or lengths — not only BIM properties.

When to use this

Most AEC automation uses DataObject.properties for schedules and QA — start with Find objects by property. Read this guide when you need 3D geometry from displayValue or Speckle.Objects types.
Install separately: dotnet add package Speckle.Objects. Not a dependency of Speckle.Sdk.
  1. Receive model with Receive2
  2. Extract meshes via Flatten().OfType<Mesh>() or TryGetDisplayValue<Mesh>()
  3. For creating geometry to send, put primitives in DataObject.displayValue

Prerequisites

Complete Example

Complete example

Mesh Data Layout

Mesh.vertices and Mesh.faces are flat lists:
  • vertices: flat x, y, z, x, y, z, ... triples
  • faces: each face starts with vertex count (n-gon size), followed by indices — [3, 0, 1, 2, 4, 1, 2, 3, 4] is one triangle then one quad
Example
For large meshes, iterate vertices directly instead of GetPoints().
Speckle meshes support n-gons. Triangulate before handing off to triangle-only renderers — see MeshTriangulationHelper in Speckle.Objects.Utils.

Units

Geometry types carry a units string (Units.Meters, Units.Millimeters, etc.). Objects in the same graph can use different units.
Example

Extracting Geometry from Received Data

All meshes in a graph:
Example
Most BIM geometry is in displayValue:
Example

Material

RenderMaterial (Speckle.Objects.Other) is typically set as a dynamic renderMaterial property on geometry. For shared materials across many objects, use RenderMaterialProxy — see Working with Proxies.

Common Pitfalls

vertices.Count must be a multiple of 3. Validate list lengths from untrusted sources.
The mesh likely contains n-gons — triangulate first.
Put geometry in a container’s displayValue — see Display values.

Next Steps

Objects and Traversal

displayValue and Base mechanics

Find objects by property

Extract meshes after receive

Operations API

Send and receive geometry graphs
Last modified on July 18, 2026