Skip to content

Commit fa9f4d5

Browse files
committed
refactor: Deprecate Cell::new and Cell::new_with_data
1 parent 3d01927 commit fa9f4d5

File tree

3 files changed

+53
-87
lines changed

3 files changed

+53
-87
lines changed

src/delaunay_core/cell.rs

Lines changed: 14 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![allow(missing_docs)]
12
//! Data and operations on d-dimensional cells or [simplices](https://en.wikipedia.org/wiki/Simplex).
23
34
use super::{facet::Facet, point::Point, utilities::make_uuid, vertex::Vertex};
@@ -7,7 +8,7 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize};
78
use std::{collections::HashMap, fmt::Debug, hash::Hash, iter::Sum, ops::Div};
89
use uuid::Uuid;
910

10-
#[derive(Clone, Debug, Default, Deserialize, Eq, Serialize)]
11+
#[derive(Builder, Clone, Debug, Default, Deserialize, Eq, Serialize)]
1112
/// The [Cell] struct represents a d-dimensional
1213
/// [simplex](https://en.wikipedia.org/wiki/Simplex) with vertices, a unique
1314
/// identifier, optional neighbors, and optional data.
@@ -36,10 +37,13 @@ where
3637
/// The vertices of the cell.
3738
pub vertices: Vec<Vertex<T, U, D>>,
3839
/// The unique identifier of the cell.
40+
#[builder(setter(skip), default = "make_uuid()")]
3941
pub uuid: Uuid,
4042
/// The neighboring cells connected to the current cell.
43+
#[builder(setter(skip), default = "None")]
4144
pub neighbors: Option<Vec<Uuid>>,
4245
/// The optional data associated with the cell.
46+
#[builder(setter(into, strip_option), default)]
4347
pub data: Option<V>,
4448
}
4549

@@ -52,38 +56,7 @@ where
5256
f64: From<T>,
5357
[T; D]: Copy + Default + DeserializeOwned + Serialize + Sized,
5458
{
55-
/// The function `new` creates a new [Cell] object with the given
56-
/// vertices. A D-dimensional cell has D + 1 vertices, so the number of
57-
/// vertices must be less than or equal to D + 1.
58-
///
59-
/// # Arguments:
60-
///
61-
/// * `vertices`: The vertices of the [Cell] to be constructed.
62-
///
63-
/// # Returns:
64-
///
65-
/// a [Result] type. If the condition `vertices.len() > D + 1` is true, it
66-
/// returns an [Err] variant with the message "Number of vertices must be
67-
/// less than or equal to D + 1". Otherwise, it returns an [Ok] variant
68-
/// with a [Cell] containing the provided `vertices`, a generated [Uuid],
69-
/// and optional neighbor and data fields.
70-
///
71-
/// Neighbors will be calculated by the
72-
/// `delaunay_core::triangulation_data_structure::Tds`.
73-
///
74-
/// # Example
75-
///
76-
/// ```
77-
/// use d_delaunay::delaunay_core::cell::Cell;
78-
/// use d_delaunay::delaunay_core::vertex::{Vertex, VertexBuilder};
79-
/// use d_delaunay::delaunay_core::point::Point;
80-
/// let vertex1 = VertexBuilder::default().point(Point::new([0.0, 0.0, 1.0])).build().unwrap();
81-
/// let vertex2 = VertexBuilder::default().point(Point::new([0.0, 1.0, 0.0])).build().unwrap();
82-
/// let vertex3 = VertexBuilder::default().point(Point::new([1.0, 0.0, 0.0])).build().unwrap();
83-
/// let vertex4 = VertexBuilder::default().point(Point::new([1.0, 1.0, 1.0])).build().unwrap();
84-
/// let cell: Cell<f64, Option<()>, Option<()>, 3> = Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
85-
/// assert!(cell.vertices.contains(&vertex1));
86-
/// ```
59+
#[deprecated(since = "0.1.0", note = "Please use `CellBuilder` instead.")]
8760
pub fn new(vertices: Vec<Vertex<T, U, D>>) -> Result<Self, &'static str> {
8861
if vertices.len() > D + 1 {
8962
return Err("Number of vertices must be less than or equal to D + 1!");
@@ -99,38 +72,7 @@ where
9972
})
10073
}
10174

102-
/// The function `new_with_data` creates a new [Cell] object with the given
103-
/// vertices and data. A D-dimensional cell has D + 1 vertices, so the
104-
/// number of vertices must be less than or equal to D + 1.
105-
///
106-
/// # Arguments:
107-
///
108-
/// * `vertices`: The vertices of the [Cell] to be constructed.
109-
/// * `data`: The data associated with the [Cell].
110-
///
111-
/// # Returns:
112-
///
113-
/// a [Result] type. If the condition `vertices.len() > D + 1` is true, it
114-
/// returns an [Err] variant with the message "Number of vertices must be
115-
/// less than or equal to D + 1". Otherwise, it returns an [Ok] variant
116-
/// with a [Cell] containing the provided `vertices`, a generated [Uuid],
117-
/// the provided data, and optional neighbor fields which will be later be
118-
/// calculated by the
119-
/// `delaunay_core::triangulation_data_structure::Tds`.
120-
///
121-
/// # Example
122-
///
123-
/// ```
124-
/// use d_delaunay::delaunay_core::cell::Cell;
125-
/// use d_delaunay::delaunay_core::vertex::{Vertex, VertexBuilder};
126-
/// use d_delaunay::delaunay_core::point::Point;
127-
/// let vertex1: Vertex<f64, i32, 3> = VertexBuilder::default().point(Point::new([0.0, 0.0, 1.0])).data(1).build().unwrap();
128-
/// let vertex2: Vertex<f64, i32, 3> = VertexBuilder::default().point(Point::new([0.0, 1.0, 0.0])).data(1).build().unwrap();
129-
/// let vertex3: Vertex<f64, i32, 3> = VertexBuilder::default().point(Point::new([1.0, 0.0, 0.0])).data(1).build().unwrap();
130-
/// let vertex4: Vertex<f64, i32, 3> = VertexBuilder::default().point(Point::new([1.0, 1.0, 1.0])).data(2).build().unwrap();
131-
/// let cell = Cell::new_with_data(vec![vertex1, vertex2, vertex3, vertex4], "three-one cell").unwrap();
132-
/// assert_eq!(cell.data.unwrap(), "three-one cell");
133-
/// ```
75+
#[deprecated(since = "0.1.0", note = "Please use `CellBuilder` instead.")]
13476
pub fn new_with_data(vertices: Vec<Vertex<T, U, D>>, data: V) -> Result<Self, &'static str> {
13577
if vertices.len() > D + 1 {
13678
return Err("Number of vertices must be less than or equal to D + 1!");
@@ -160,15 +102,15 @@ where
160102
/// # Example
161103
///
162104
/// ```
163-
/// use d_delaunay::delaunay_core::cell::Cell;
105+
/// use d_delaunay::delaunay_core::cell::{Cell, CellBuilder};
164106
/// use d_delaunay::delaunay_core::facet::Facet;
165107
/// use d_delaunay::delaunay_core::vertex::{Vertex, VertexBuilder};
166108
/// use d_delaunay::delaunay_core::point::Point;
167109
/// let vertex1 = VertexBuilder::default().point(Point::new([0.0, 0.0, 1.0])).build().unwrap();
168110
/// let vertex2 = VertexBuilder::default().point(Point::new([0.0, 1.0, 0.0])).build().unwrap();
169111
/// let vertex3 = VertexBuilder::default().point(Point::new([1.0, 0.0, 0.0])).build().unwrap();
170112
/// let vertex4 = VertexBuilder::default().point(Point::new([1.0, 1.0, 1.0])).build().unwrap();
171-
/// let cell: Cell<f64, Option<()>, Option<()>,3> = Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
113+
/// let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default().vertices(vec![vertex1, vertex2, vertex3, vertex4]).build().unwrap();
172114
/// let facet = Facet::new(cell.clone(), vertex4).unwrap();
173115
/// let vertex5 = VertexBuilder::default().point(Point::new([0.0, 0.0, 0.0])).build().unwrap();
174116
/// let new_cell = Cell::from_facet_and_vertex(facet, vertex5).unwrap();
@@ -547,8 +489,10 @@ mod tests {
547489
.data(2)
548490
.build()
549491
.unwrap();
550-
let cell: Cell<f64, i32, Option<()>, 3> =
551-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
492+
let cell: Cell<f64, i32, Option<()>, 3> = CellBuilder::default()
493+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
494+
.build()
495+
.unwrap();
552496

553497
assert_eq!(cell.vertices, [vertex1, vertex2, vertex3, vertex4]);
554498
assert_eq!(cell.vertices[0].data.unwrap(), 1);
@@ -593,6 +537,7 @@ mod tests {
593537
.unwrap();
594538
let cell: Result<Cell<f64, i32, Option<()>, 3>, &'static str> =
595539
Cell::new(vec![vertex1, vertex2, vertex3, vertex4, vertex5]);
540+
// let cell: Cell<f64, i32, Option<()>,3> = CellBuilder::default().vertices(vec![vertex1, vertex2, vertex3, vertex4, vertex5]).build().unwrap();
596541

597542
assert!(cell.is_err());
598543

src/delaunay_core/facet.rs

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ where
6060
/// # Example
6161
///
6262
/// ```
63-
/// use d_delaunay::delaunay_core::cell::Cell;
63+
/// use d_delaunay::delaunay_core::cell::{Cell, CellBuilder};
6464
/// use d_delaunay::delaunay_core::facet::Facet;
6565
/// use d_delaunay::delaunay_core::point::Point;
6666
/// use d_delaunay::delaunay_core::vertex::{Vertex, VertexBuilder};
6767
/// let vertex1 = VertexBuilder::default().point(Point::new([0.0, 0.0, 0.0])).build().unwrap();
6868
/// let vertex2 = VertexBuilder::default().point(Point::new([1.0, 0.0, 0.0])).build().unwrap();
6969
/// let vertex3 = VertexBuilder::default().point(Point::new([0.0, 1.0, 0.0])).build().unwrap();
7070
/// let vertex4 = VertexBuilder::default().point(Point::new([0.0, 0.0, 1.0])).build().unwrap();
71-
/// let cell: Cell<f64, Option<()>, Option<()>, 3> = Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
71+
/// let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default().vertices(vec![vertex1, vertex2, vertex3, vertex4]).build().unwrap();
7272
/// let facet = Facet::new(cell.clone(), vertex1).unwrap();
7373
/// assert_eq!(facet.cell, cell);
7474
/// ```
@@ -98,7 +98,7 @@ where
9898
mod tests {
9999

100100
use super::*;
101-
use crate::delaunay_core::{point::Point, vertex::VertexBuilder};
101+
use crate::delaunay_core::{cell::CellBuilder, point::Point, vertex::VertexBuilder};
102102

103103
#[test]
104104
fn facet_new() {
@@ -118,8 +118,10 @@ mod tests {
118118
.point(Point::new([0.0, 0.0, 1.0]))
119119
.build()
120120
.unwrap();
121-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
122-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
121+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
122+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
123+
.build()
124+
.unwrap();
123125
let facet = Facet::new(cell.clone(), vertex1).unwrap();
124126

125127
assert_eq!(facet.cell, cell);
@@ -146,8 +148,10 @@ mod tests {
146148
.point(Point::new([0.0, 0.0, 1.0]))
147149
.build()
148150
.unwrap();
149-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
150-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
151+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
152+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
153+
.build()
154+
.unwrap();
151155
let vertex5 = VertexBuilder::default()
152156
.point(Point::new([1.0, 1.0, 1.0]))
153157
.build()
@@ -162,7 +166,10 @@ mod tests {
162166
.point(Point::new([0.0, 0.0, 0.0]))
163167
.build()
164168
.unwrap();
165-
let cell: Cell<f64, Option<()>, Option<()>, 3> = Cell::new(vec![vertex1]).unwrap();
169+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
170+
.vertices(vec![vertex1])
171+
.build()
172+
.unwrap();
166173

167174
assert!(Facet::new(cell.clone(), vertex1).is_err());
168175
}
@@ -185,8 +192,10 @@ mod tests {
185192
.point(Point::new([0.0, 0.0, 1.0]))
186193
.build()
187194
.unwrap();
188-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
189-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
195+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
196+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
197+
.build()
198+
.unwrap();
190199
let facet = Facet::new(cell.clone(), vertex1).unwrap();
191200
let vertices = facet.clone().vertices();
192201

@@ -217,8 +226,10 @@ mod tests {
217226
.point(Point::new([0.0, 0.0, 1.0]))
218227
.build()
219228
.unwrap();
220-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
221-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
229+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
230+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
231+
.build()
232+
.unwrap();
222233
let facet = Facet::new(cell.clone(), vertex1).unwrap();
223234
let serialized = serde_json::to_string(&facet).unwrap();
224235

@@ -253,8 +264,10 @@ mod tests {
253264
.point(Point::new([0.0, 0.0, 1.0]))
254265
.build()
255266
.unwrap();
256-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
257-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
267+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
268+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
269+
.build()
270+
.unwrap();
258271
let facet1 = Facet::new(cell.clone(), vertex1).unwrap();
259272
let facet2 = Facet::new(cell.clone(), vertex1).unwrap();
260273
let facet3 = Facet::new(cell.clone(), vertex2).unwrap();
@@ -281,8 +294,10 @@ mod tests {
281294
.point(Point::new([0.0, 0.0, 1.0]))
282295
.build()
283296
.unwrap();
284-
let cell: Cell<f64, Option<()>, Option<()>, 3> =
285-
Cell::new(vec![vertex1, vertex2, vertex3, vertex4]).unwrap();
297+
let cell: Cell<f64, Option<()>, Option<()>, 3> = CellBuilder::default()
298+
.vertices(vec![vertex1, vertex2, vertex3, vertex4])
299+
.build()
300+
.unwrap();
286301
let facet1 = Facet::new(cell.clone(), vertex1).unwrap();
287302
let facet2 = Facet::new(cell.clone(), vertex1).unwrap();
288303
let facet3 = Facet::new(cell.clone(), vertex2).unwrap();

src/delaunay_core/triangulation_data_structure.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
//! [CGAL Triangulation](https://doc.cgal.org/latest/Triangulation/index.html).
55
66
use super::{
7-
cell::Cell, facet::Facet, point::Point, utilities::find_extreme_coordinates, vertex::Vertex,
7+
cell::Cell, cell::CellBuilder, facet::Facet, point::Point, utilities::find_extreme_coordinates,
8+
vertex::Vertex,
89
};
910
use na::{ComplexField, Const, OPoint};
1011
use nalgebra as na;
@@ -239,7 +240,12 @@ where
239240
points.push(point);
240241
}
241242

242-
Cell::new(Vertex::from_points(points))
243+
let supercell = CellBuilder::default()
244+
.vertices(Vertex::from_points(points))
245+
.build()
246+
.unwrap();
247+
248+
Ok(supercell)
243249
}
244250

245251
/// Performs the Bowyer-Watson algorithm to triangulate a set of vertices.

0 commit comments

Comments
 (0)