update the README.md
This commit is contained in:
@@ -3,111 +3,3 @@
|
||||
The main turtle graphics library built on Macroquad with Lyon tessellation.
|
||||
|
||||
**See the [main README](../README.md) for complete documentation.**
|
||||
|
||||
## Features
|
||||
|
||||
✅ **Complete Lyon Integration** - All drawing operations use GPU-optimized tessellation
|
||||
- Unified rendering pipeline for lines, arcs, circles, and fills
|
||||
- ~410 lines of code eliminated through architectural simplification
|
||||
- Consistent high-quality rendering across all primitives
|
||||
|
||||
✅ **Multi-Contour Fill System** - Advanced fill capabilities with automatic hole detection
|
||||
- EvenOdd fill rule for complex shapes with holes (like cheese or yin-yang symbols)
|
||||
- `pen_up()` closes current contour, `pen_down()` opens next contour
|
||||
- Progressive fill preview during animations
|
||||
- Support for self-intersecting paths
|
||||
|
||||
✅ **Smooth Animation** - Tweening system with live rendering
|
||||
- Configurable speed control
|
||||
- Frame-rate independent animation
|
||||
- Live fill preview during circle/arc drawing
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Using the `turtle_main` Macro (Recommended for Beginners)
|
||||
|
||||
The easiest way to create turtle programs is with the `turtle_main` macro:
|
||||
|
||||
```rust
|
||||
use macroquad::prelude::*;
|
||||
use turtle_lib::*;
|
||||
|
||||
#[turtle_main("My First Drawing")]
|
||||
fn my_drawing(turtle: &mut TurtlePlan) {
|
||||
turtle.set_pen_color(RED);
|
||||
turtle.forward(100.0);
|
||||
turtle.right(90.0);
|
||||
turtle.forward(100.0);
|
||||
}
|
||||
```
|
||||
|
||||
The macro automatically handles:
|
||||
- Window creation and setup
|
||||
- Turtle initialization
|
||||
- Rendering loop
|
||||
- Quit handling (ESC or Q keys)
|
||||
|
||||
### Manual Setup (For Advanced Use)
|
||||
|
||||
For more control over the application loop:
|
||||
|
||||
```rust
|
||||
use macroquad::prelude::*;
|
||||
use turtle_lib::*;
|
||||
|
||||
#[macroquad::main("Turtle")]
|
||||
async fn main() {
|
||||
let mut turtle = create_turtle();
|
||||
turtle.forward(100.0).right(90.0);
|
||||
|
||||
let mut app = TurtleApp::new().with_commands(turtle.build());
|
||||
|
||||
loop {
|
||||
clear_background(WHITE);
|
||||
app.update();
|
||||
app.render();
|
||||
next_frame().await;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Quick Examples
|
||||
|
||||
All examples now use the `turtle_main` macro for simplicity:
|
||||
|
||||
```bash
|
||||
# Run from this directory
|
||||
cargo run --example hello_turtle # Minimal 10-line example
|
||||
cargo run --example macro_demo # Simple square with macro
|
||||
cargo run --example square # Basic square drawing
|
||||
cargo run --example shapes # Different turtle shapes
|
||||
cargo run --example yinyang # Multi-contour fills with holes
|
||||
cargo run --example koch # Recursive fractals
|
||||
cargo run --example fill_demo # Fill with holes (donut)
|
||||
cargo run --example cheese_macro # Cheese example using macro
|
||||
cargo run --example fill_advanced # Complex shapes (manual setup)
|
||||
```
|
||||
|
||||
Most examples use `turtle_main` for simplicity. A few keep manual setup for custom UI or logging.
|
||||
|
||||
## Architecture Highlights
|
||||
|
||||
### Rendering Pipeline
|
||||
All drawing operations → Lyon tessellation → GPU mesh rendering
|
||||
|
||||
### DrawCommand Enum
|
||||
Simplified from 5 variants to 1:
|
||||
- `Mesh(MeshData)` - unified variant for all drawing operations
|
||||
|
||||
### Fill System
|
||||
- `FillState` tracks multiple contours (completed + current)
|
||||
- Pen state management automatically handles contour creation
|
||||
- EvenOdd tessellation provides automatic hole detection
|
||||
|
||||
See [LYON_COMPLETE.md](LYON_COMPLETE.md) and [MULTI_CONTOUR_FILLS.md](MULTI_CONTOUR_FILLS.md) for implementation details.
|
||||
|
||||
## Status
|
||||
|
||||
✅ **Stable** - Lyon integration complete, multi-contour fills working, all examples passing.
|
||||
|
||||
See [../README.md](../README.md) for full API documentation and project status.
|
||||
|
||||
Reference in New Issue
Block a user