File: generate.rs

package info (click to toggle)
rust-genmesh 0.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 220 kB
  • sloc: makefile: 4
file content (74 lines) | stat: -rw-r--r-- 1,739 bytes parent folder | download
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
68
69
70
71
72
73
74
extern crate cgmath;
extern crate genmesh;

use genmesh::{generators, EmitTriangles, MapVertex, Triangulate};
use std::fmt::Debug;

/// Test a generator by comparing two triangular meshes:
/// 1) by using the `Iterator` implementation of the given generator
/// 2) by producing shared vertices and sampling them with the
///    produced indexed polygons.
fn test<F, P, G>(generator: G)
where
    F: EmitTriangles,
    F::Vertex: Clone + Copy + Debug + PartialEq,
    P: EmitTriangles<Vertex = usize>,
    G: generators::SharedVertex<F::Vertex> + generators::IndexedPolygon<P> + Iterator<Item = F>,
{
    let vertices: Vec<_> = generator.shared_vertex_iter().collect();

    let f1: Vec<_> = generator
        .indexed_polygon_iter()
        .triangulate()
        .map(|f| f.map_vertex(|u| vertices[u]))
        .collect();
    let f0: Vec<_> = generator.triangulate().collect();

    assert_eq!(f0.len(), f1.len());
    for (i, (p0, p1)) in f0.iter().zip(f1.iter()).enumerate() {
        assert_eq!(p0, p1, "Mismatched polygon[{}]", i);
    }
}

#[test]
fn gen_plane() {
    test(generators::Plane::new());
    test(generators::Plane::subdivide(3, 4));
}

#[test]
fn gen_cube() {
    test(generators::Cube::new());
}

#[test]
fn gen_cylinder() {
    test(generators::Cylinder::new(5));
    test(generators::Cylinder::subdivide(3, 4));
}

#[test]
fn gen_sphere_uv() {
    test(generators::SphereUv::new(4, 3));
}

#[test]
fn gen_ico_sphere() {
    test(generators::IcoSphere::new());
    test(generators::IcoSphere::subdivide(3));
}

#[test]
fn gen_cone() {
    test(generators::Cone::new(8));
}

#[test]
fn gen_torus() {
    test(generators::Torus::new(1., 0.5, 8, 8));
}

#[test]
fn gen_circle() {
    test(generators::Circle::new(4))
}