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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
use crate::common::{
PolyMesh,
MeshType,
TransPolyMeshPtr,
transform::{
PolyVector,
PolyColor
}
};
use super::quad::make_quad;
pub fn make_hexahedron(corner_a: PolyVector, corner_b: PolyVector, color: PolyColor) -> PolyMesh {
let mut parent = PolyMesh::new(MeshType::Group, None);
parent.set_name("Hexahedron".to_string());
let all_max_corner = PolyVector::max(corner_a, corner_b);
let all_min_corner = PolyVector::min(corner_a, corner_b);
let x_max_corner = PolyVector { x: all_max_corner.x, y: all_min_corner.y, z: all_min_corner.z };
let y_max_corner = PolyVector { x: all_min_corner.x, y: all_max_corner.y, z: all_min_corner.z };
let z_max_corner = PolyVector { x: all_min_corner.x, y: all_min_corner.y, z: all_max_corner.z };
let xy_max_corner = PolyVector { x: all_max_corner.x, y: all_max_corner.y, z: all_min_corner.z };
let xz_max_corner = PolyVector { x: all_max_corner.x, y: all_min_corner.y, z: all_max_corner.z };
let yz_max_corner = PolyVector { x: all_min_corner.x, y: all_max_corner.y, z: all_max_corner.z };
let positive_x_transform = PolyVector { x: all_max_corner.x, y: 0.0, z: 0.0 };
let positive_y_transform = PolyVector { x: 0.0, y: all_max_corner.y, z: 0.0 };
let positive_z_transform = PolyVector { x: 0.0, y: 0.0, z: all_max_corner.y };
let negative_x_transform = PolyVector { x: all_min_corner.x, y: 0.0, z: 0.0 };
let negative_y_transform = PolyVector { x: 0.0, y: all_min_corner.y, z: 0.0 };
let negative_z_transform = PolyVector { x: 0.0, y: 0.0, z: all_min_corner.y };
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/positive_x_geo".to_string(),
mesh: Box::new(make_quad(
all_max_corner - positive_x_transform,
xy_max_corner - positive_x_transform,
xz_max_corner - positive_x_transform,
x_max_corner - positive_x_transform,
color
)),
translation: Some(positive_x_transform)
});
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/positive_y_geo".to_string(),
mesh: Box::new(make_quad(
y_max_corner - positive_y_transform,
xy_max_corner - positive_y_transform,
yz_max_corner - positive_y_transform,
all_max_corner - positive_y_transform,
color
)),
translation: Some(positive_y_transform)
});
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/positive_z_geo".to_string(),
mesh: Box::new(make_quad(
yz_max_corner - positive_z_transform,
all_max_corner - positive_z_transform,
z_max_corner - positive_z_transform,
xz_max_corner - positive_z_transform,
color
)),
translation: Some(positive_z_transform)
});
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/negative_x_geo".to_string(),
mesh: Box::new(make_quad(
y_max_corner - negative_x_transform,
yz_max_corner - negative_x_transform,
all_min_corner - negative_x_transform,
z_max_corner - negative_x_transform,
color
)),
translation: Some(negative_x_transform)
});
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/negative_y_geo".to_string(),
mesh: Box::new(make_quad(
z_max_corner - negative_y_transform,
xz_max_corner - negative_y_transform,
all_min_corner - negative_y_transform,
x_max_corner - negative_y_transform,
color
)),
translation: Some(negative_y_transform)
});
parent.add_child(TransPolyMeshPtr {
path: "/faces_gr/negative_z_geo".to_string(),
mesh: Box::new(make_quad(
xy_max_corner - negative_z_transform,
y_max_corner - negative_z_transform,
x_max_corner - negative_z_transform,
all_min_corner - negative_z_transform,
color
)),
translation: Some(negative_z_transform)
});
return parent;
}