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)=12⋅2⋅1=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=16∑iai⋅(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

‖p−q‖2≤ε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)wiPi∑iNi,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.