Skip to content

Geometry concepts and evidence

Axiolid separates authored geometry, operation contracts, and execution results. This page uses small exact examples to explain those layers. It is not a claim that every represented curve, surface, or solid already has a production evaluator; use the capability matrix for that status.

One shape, three responsibilities

Diagram source
flowchart TD
  accTitle: From authored intent to an evaluated result
  accDescr: An authored profile and operation enter the neutral graph, a typed contract describes the requested result and error budget, and an explicitly selected provider returns either evidence or a refusal.
  A["Authored values<br/>profile, curve, surface, topology"] --> G["GeometryGraph<br/>shared neutral intent"]
  G --> C["Typed operation contract<br/>result domain + budget"]
  C --> P{"Explicit provider"}
  P -->|supported| R["Result + evidence"]
  P -->|unsupported or over budget| F["Typed refusal"]

The graph does not choose a provider. A contract does not promise that an implementation exists. This distinction keeps representation breadth from being mistaken for executable capability.

Closed profile and straight extrusion

Take the counter-clockwise triangular profile

P=((0,0),(2,0),(0,1))

and extrude it by h=1 along the positive z axis. Its area and expected volume are

A(P)=1221=1,V=A(P)|h|=1.

The STL below is the resulting closed, outward-oriented triangle mesh. On GitHub it uses the native STL viewer; on the documentation site the same source is parsed locally in the browser. Drag to rotate and scroll or pinch to zoom.

0 triangles · bounds

Drag to rotate. Scroll or pinch to zoom. Geometry and equations below are the normative explanation.

STL source
solid triangular_prism
  facet normal 0 0 -1
    outer loop
      vertex 0 1 0
      vertex 2 0 0
      vertex 0 0 0
    endloop
  endfacet
  facet normal 0 0 1
    outer loop
      vertex 0 0 1
      vertex 2 0 1
      vertex 0 1 1
    endloop
  endfacet
  facet normal 0 -1 0
    outer loop
      vertex 0 0 0
      vertex 2 0 0
      vertex 2 0 1
    endloop
  endfacet
  facet normal 0 -1 0
    outer loop
      vertex 0 0 0
      vertex 2 0 1
      vertex 0 0 1
    endloop
  endfacet
  facet normal 0.4472135955 0.894427191 0
    outer loop
      vertex 2 0 0
      vertex 0 1 0
      vertex 0 1 1
    endloop
  endfacet
  facet normal 0.4472135955 0.894427191 0
    outer loop
      vertex 2 0 0
      vertex 0 1 1
      vertex 2 0 1
    endloop
  endfacet
  facet normal -1 0 0
    outer loop
      vertex 0 1 0
      vertex 0 0 0
      vertex 0 0 1
    endloop
  endfacet
  facet normal -1 0 0
    outer loop
      vertex 0 1 0
      vertex 0 0 1
      vertex 0 1 1
    endloop
  endfacet
endsolid triangular_prism

This identity is executable evidence in axiolid-construct/tests/extrusion_volume.rs. It applies to a valid closed profile and a straight extrusion; it does not turn an open profile into an area.

Orientation and signed volume

For an outward-oriented closed triangle mesh with triangles (ai,bi,ci), the signed tetrahedral sum is

Vs=16iai(bi×ci).

Consistent outward winding gives a positive volume; reversing every face changes the sign. The expression is not a validity test by itself: a torn shell or non-manifold mesh must be rejected before treating Vs as enclosed volume.

The unit right tetrahedron makes the factor 1/6 visible:

0 triangles · bounds

Drag to rotate. Scroll or pinch to zoom. Geometry and equations below are the normative explanation.

STL source
solid unit_tetrahedron
  facet normal 0 0 -1
    outer loop
      vertex 0 0 0
      vertex 0 1 0
      vertex 1 0 0
    endloop
  endfacet
  facet normal 0 -1 0
    outer loop
      vertex 0 0 0
      vertex 1 0 0
      vertex 0 0 1
    endloop
  endfacet
  facet normal -1 0 0
    outer loop
      vertex 0 0 0
      vertex 0 0 1
      vertex 0 1 0
    endloop
  endfacet
  facet normal 0.5773502692 0.5773502692 0.5773502692
    outer loop
      vertex 1 0 0
      vertex 0 1 0
      vertex 0 0 1
    endloop
  endfacet
endsolid unit_tetrahedron

Here Vs=1/6. Axiolid's mesh-audit and measurement paths keep manifold checks separate from the integral so that a plausible number cannot certify invalid topology.

Tolerance is operation input

Axiolid does not hide one global epsilon. A linear tolerance εl means an operation may classify points as coincident only under an explicit caller-selected bound such as

pq2εl.

A tessellation or flattening request may additionally carry a chord-deviation budget c. The useful contract is not “produce enough triangles”; it is

maxu[u0,u1]dist(C(u),p0p1)c,

for each accepted segment, subject to an explicit work budget. If the provider cannot establish its bounded evidence within that budget, it must refuse rather than silently loosen c.

Rational B-spline representation

For control points Pi, weights wi>0, and basis functions Ni,p(u), a rational B-spline curve is

C(u)=iNi,p(u)wiPiiNi,p(u)wi.

Axiolid represents polynomial and rational B-spline curves and surfaces and has opt-in scalar reference algorithms for documented subsets. Representation alone does not imply global intersection, projection, or tessellation coverage; those claims stay in the capability matrix and operation-specific ADRs.

Open profiles do not acquire area

Diagram source
flowchart TD
  accTitle: Closed and open profile semantics
  accDescr: Closed profiles may enter area-bearing construction operations, while authored open profiles remain path-only values and area or solid requests refuse.
  Path["Authored 2D path"] --> Q{"Endpoints exactly equal?"}
  Q -->|yes| Closed["Closed profile"]
  Q -->|no| Open["OpenProfile<br/>path only"]
  Closed --> Area["Area-bearing operations<br/>when otherwise valid"]
  Open --> Refuse["Area / swept-solid request<br/>typed refusal"]

OpenProfile preserves authored finite, bounded, non-closed 2D intent. It has no implicit width and must not be promoted to a swept area. This is the neutral contract used by ifc-geometry for IfcArbitraryOpenProfileDef.

What the models prove—and what they do not

The embedded STL examples prove that the documentation renderer can display the listed triangles. They are explanatory fixtures, not evidence for general solid construction, Boolean robustness, or exact B-rep coverage. Production claims require tests, conformance evidence, and the bounded refusal behavior documented for each operation.

Released under the Mozilla Public License 2.0.