Skip to content

Commit d278bcd

Browse files
Merge pull request #13 from iShape-Rust/feature/int_api
Feature/int api
2 parents acf6b89 + bc889fe commit d278bcd

48 files changed

Lines changed: 2251 additions & 910 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

iTriangle/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "i_triangle"
3-
version = "0.44.0"
3+
version = "0.45.0"
44
edition = "2021"
55
authors = ["Nail Sharipov <nailxsharipov@gmail.com>"]
66
description = "Polygon Triangulation Library: Efficient Delaunay Triangulation for Complex Shapes."
@@ -24,8 +24,8 @@ serde = { version = "^1.0", default-features = false, features = ["derive"], opt
2424
#i_tree = { path = "../../iTree" }
2525
#i_key_sort = { path = "../../iKeySort/iKeySort" }
2626

27-
i_overlay = "^6.0.0"
28-
i_tree = "~0.18.0"
27+
i_overlay = "^7.0.0"
28+
i_tree = "~0.19.0"
2929
i_key_sort = "~0.10.3"
3030

3131

iTriangle/README.md

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,26 +47,7 @@ iTriangle is a high-performance 2D polygon triangulation library for Rust. It so
4747

4848
## Architecture Overview
4949

50-
<img src="readme/architecture.png" width="700"/>
51-
52-
<details>
53-
<summary>Mermaid source</summary>
54-
55-
```mermaid
56-
flowchart TD
57-
A[Input contours] --> B[Normalize and fix self-intersections]
58-
B --> C[Sweep-line triangulation]
59-
C --> D[Raw triangulation]
60-
D -->|Delaunay| E[Delaunay triangulation]
61-
D --> I[Triangles and indices]
62-
E -->|Tessellation| F[Adaptive refinement]
63-
F --> E
64-
E --> G[Convex decomposition]
65-
E --> H[Centroid net]
66-
E --> I
67-
```
68-
69-
</details>
50+
<img src="readme/architecture.svg" width="700"/>
7051

7152
## Quick Start
7253

@@ -93,6 +74,29 @@ let triangulation = vec![contour].triangulate().to_triangulation::<u16>();
9374
println!("triangles: {}", triangulation.indices.len() / 3);
9475
```
9576

77+
By default, float input is converted to the robust integer core using `i32`
78+
coordinates. If your geometry needs a different integer precision, choose it
79+
explicitly:
80+
81+
```rust
82+
use i_triangle::float::triangulatable::Triangulatable;
83+
use i_triangle::float::triangulator::Triangulator;
84+
85+
let shape = vec![vec![
86+
[0.0, 0.0],
87+
[10.0, 0.0],
88+
[10.0, 10.0],
89+
[0.0, 10.0],
90+
]];
91+
92+
// One-shot triangulation with i64 integer coordinates.
93+
let mesh = shape.triangulate_as::<i64>().to_triangulation::<u32>();
94+
95+
// Reusable triangulator: first generic is index type, second is coordinate type.
96+
let mut triangulator = Triangulator::<u32, i64>::default();
97+
let mesh = triangulator.triangulate(&shape);
98+
```
99+
96100
## Documentation
97101

98102
- [Docs.rs](https://docs.rs/i_triangle)
@@ -192,6 +196,7 @@ let contours = vec![
192196
vec![[5.0, 0.0], [9.0, 0.0], [9.0, 4.0], [5.0, 4.0]],
193197
];
194198

199+
// Uses u32 triangle indices and the default i32 integer coordinate solver.
195200
let mut triangulator = Triangulator::<u32>::default();
196201

197202
// Enable Delaunay refinement
@@ -256,8 +261,8 @@ let contours = vec![
256261
],
257262
];
258263

259-
let mut triangulator = IntTriangulator::<u32>::default();
260-
let mut output = IntTriangulation::<u32>::default();
264+
let mut triangulator = IntTriangulator::<i32, u32>::default();
265+
let mut output = IntTriangulation::<i32, u32>::default();
261266

262267
for contour in &contours {
263268
triangulator.triangulate_contour_into(contour.clone(), &mut output);

iTriangle/readme/architecture.png

-485 KB
Binary file not shown.

0 commit comments

Comments
 (0)