# Cord

Three-layer 3D geometry system: **Source → Trig IR → CORDIC binary**.

Cord compiles constructive solid geometry into a trigonometric DAG (TrigGraph),
which can be evaluated as f64 reference values, compiled to WGSL shaders for
GPU raymarching, or lowered to pure CORDIC shift-and-add arithmetic with zero
floating-point operations.

## Architecture

```text
[Cordial DSL / SCAD] → AST → SdfNode → TrigGraph → WGSL Shader
                                                   → CORDIC Binary
                                                   → f64 Evaluator
                                                   → Riesz Analysis

[STL/OBJ Mesh] → BVH → Sparse Grid → RANSAC → Monogenic Classify → SDF Tree
```

## Crates

| Crate | Description |
|-------|-------------|
| **cord-trig** | TrigGraph IR — the universal intermediate representation |
| **cord-parse** | SCAD lexer and parser |
| **cord-sdf** | SDF node tree, AST → SdfNode → TrigGraph lowering |
| **cord-shader** | TrigGraph → WGSL raymarcher codegen |
| **cord-cordic** | TrigGraph → CORDIC compiler and evaluator |
| **cord-format** | ZCD archive format (ZIP container for all layers) |
| **cord-render** | Standalone wgpu raymarcher |
| **cord-decompile** | Mesh → SDF decompiler (RANSAC + monogenic classification) |
| **cord-riesz** | 3D Riesz transform, monogenic signals, spatial cepstrum |
| **cordial** | Rust DSL for CSG with parallel composition patterns |
| **cord-gui** | Interactive iced-based editor (not published) |

## File Formats

| Extension | Description |
|-----------|-------------|
| `.crd` | Cordial source |
| `.cord` | Raw CORDIC binary (magic: `CORD`) |
| `.trig` | Serialized TrigGraph (magic: `TRIG`) |
| `.zcd` | Zipped Cord archive containing any combination of layers |

## Quick Start

```bash
# View a .scad file
cargo run -- view examples/test.scad

# Compile to .zcd archive
cargo run -- build input.scad -o output.zcd

# Dump generated WGSL
cargo run -- shader input.scad

# Launch the GUI editor
cargo run -p cord-gui

# Verify CORDIC accuracy
cargo run -- verify --word-bits 32
```

## Cordial Language

See [docs/cordial-reference.md](docs/cordial-reference.md) for the full
language reference. Quick taste:

```
let shell: Obj = diff(sphere(5), sphere(4))
let hole: Obj = cylinder(1.5, 12)
let result: Obj = diff(shell, union(hole, rotate_x(hole, pi/2)))
cast(result)
```

## Cordial as Rust DSL

```rust
use cordial::prelude::*;

let shell = sphere(5.0).difference(sphere(4.0));
let hole = cylinder(1.5, 12.0);
let result = shell.difference(hole.clone() | hole.rotate_x(90.0));

let wgsl = result.to_wgsl();
let cordic = result.to_cordic();
```

## License

Unlicensed — [pszsh](https://else-if.org)
