⚠️ caution

This project is in early development.

Geolis

Geolis is a CAD kernel written in Rust. It provides geometry representation using NURBS curves and surfaces, along with B-rep structures for solid modeling.

Features

  • NURBS Curves & Surfaces: Mathematically precise freeform geometry representation
  • B-rep Structure: Topology management with Vertex, Edge, Face, Shell, and Solid
  • Boolean Operations: Solid operations including Union, Difference, and Intersection
  • Fast & Safe: Built in Rust, can run in browsers via WebAssembly

Installation

[dependencies]
geolis = "0.1"

Capabilities

NURBS Curves

Generation

FunctionDescription
NurbsCurve::newCreate curve from control points, knots, and weights
NurbsCurve::interpolateGenerate interpolating curve through point sequence
NurbsCurve::from_arcCreate NURBS curve from arc
NurbsCurve::from_circleCreate NURBS curve from circle
NurbsCurve::periodicCreate closed periodic curve

Evaluation

FunctionDescription
evaluateGet point at parameter value
derivativeGet nth derivative vector
tangentTangent vector (normalized)
curvatureCurvature value
curvature_vectorCurvature vector
torsionTorsion (3D curves)

Analysis

FunctionDescription
closest_pointFind closest point on curve to given point
arc_lengthCalculate arc length
parameter_at_lengthInverse: get parameter from arc length
divide_by_countGet equally divided points
divide_by_lengthDivide by equal arc length

Operations

FunctionDescription
splitSplit at specified parameter
trimTrim to range
reverseReverse direction
joinJoin two curves
offsetGenerate offset curve
insert_knotKnot insertion (Boehm algorithm)
elevate_degreeDegree elevation

Curve-Curve Operations

FunctionDescription
intersectIntersection points between curves
filletGenerate fillet curve

NURBS Surfaces

Generation

FunctionDescription
NurbsSurface::newCreate surface from control point grid
NurbsSurface::extrudeExtrude curve to create surface
NurbsSurface::loftCreate surface from multiple curves
NurbsSurface::revolveRevolve curve to create surface
NurbsSurface::sweepSweep cross-section along rail curve
NurbsSurface::ruledRuled surface between two curves
NurbsSurface::from_sphereSphere surface
NurbsSurface::from_cylinderCylinder surface
NurbsSurface::from_coneCone surface
NurbsSurface::from_torusTorus surface

Evaluation

FunctionDescription
evaluateGet point at (u, v) parameters
normalNormal vector
partial_derivativePartial derivatives
gaussian_curvatureGaussian curvature
mean_curvatureMean curvature
principal_curvaturesPrincipal curvatures

Extraction

FunctionDescription
isocurve_uIsocurve at fixed u
isocurve_vIsocurve at fixed v
boundary_curvesBoundary curves (4 edges)

Operations

FunctionDescription
trimTrim surface with trim curves
split_u / split_vSplit at specified parameter
reverse_u / reverse_vReverse direction
transposeSwap u and v directions

Surface-Surface Operations

FunctionDescription
intersect_surfaceIntersection curve between surfaces
intersect_curveIntersection points of surface and curve

B-rep Structure

Topology Elements

ElementDescription
VertexVertex (3D coordinate)
EdgeEdge (curve + start/end vertices)
LoopBoundary loop (chain of Edges)
FaceFace (surface + boundary loops)
ShellShell (collection of Faces)
SolidSolid (collection of Shells)

Topology Operations

FunctionDescription
adjacent_facesFaces adjacent to specified face
adjacent_edgesEdges connected to specified vertex
is_manifoldCheck if manifold
is_closedCheck if shell is closed
euler_characteristicEuler characteristic

Boolean Operations

FunctionDescription
unionUnion
differenceDifference (hole creation)
intersectionIntersection (common part)

Tessellation

FunctionDescription
tessellateConvert surface to mesh
TessellationOptions::toleranceTolerance
TessellationOptions::adaptiveAdaptive subdivision based on curvature
TessellationOptions::max_divisionsMaximum divisions

Module Structure

geolis
├── geolis-math       # Math utilities
├── geolis-curve      # NURBS curves
├── geolis-surface    # NURBS surfaces
├── geolis-topology   # B-rep structure
├── geolis-boolean    # Boolean operations
├── geolis-mesh       # Tessellation
└── geolis-io         # File I/O

License

MIT License