-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathexample10.rs
67 lines (58 loc) · 1.75 KB
/
example10.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// To run:
// $ ./example10 < ../../data/samples2.xyz
#![allow(dead_code)]
extern crate csv;
extern crate serde;
extern crate startin;
#[macro_use]
extern crate serde_derive;
use std::error::Error;
use std::io;
#[derive(Debug, Deserialize)]
pub struct CSVPoint {
pub x: f64,
pub y: f64,
pub z: f64,
}
fn main() {
let re = read_xyz_file();
let vec = match re {
Ok(vec) => vec,
Err(error) => panic!("Problem with the file {:?}", error),
};
let mut dt = startin::Triangulation::new();
dt.set_snap_tolerance(0.00000000000001);
dt.set_jump_and_walk(false);
dt.use_robust_predicates(true);
// let mut duplicates = 0;
// for p in vec.into_iter() {
// let re = dt.insert_one_pt(p[0], p[1], p[2]);
// match re {
// // Ok(_x) => println!("{:?}", dt),
// Ok(_x) => continue,
// Err(_e) => duplicates = duplicates + 1,
// // Err(e) => println!("Duplicate point! Not inserted {}", dt.get_point(e)),
// };
// }
// if duplicates > 0 {
// println!("Duplicates? {} of them.\n", duplicates);
// } else {
// println!("Duplicates? none.\n");
// }
let _re = dt.insert(&vec, startin::InsertionStrategy::AsIs);
// let _re = dt.insert(&vec, Some(vec![434366.0, 19722.0, 900289.0, 337914.0]));
println!("{}", dt);
}
fn read_xyz_file() -> Result<Vec<[f64; 3]>, Box<dyn Error>> {
let mut rdr = csv::ReaderBuilder::new()
.delimiter(b' ')
.from_reader(io::stdin());
let mut vpts: Vec<[f64; 3]> = Vec::new();
for result in rdr.deserialize() {
let record: CSVPoint = result?;
if record.z != -9999.0 {
vpts.push([record.x, record.y, record.z]);
}
}
Ok(vpts)
}