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
use crate::diagnostics::LookupError;
use super::{MeshBuilder, MeshNode, ModelBuilder, ModelNode, NodeKey, NodeKind, Transform};
impl MeshBuilder<'_> {
/// Overrides the parent node. The parent is validated when [`Self::add`] is called.
pub fn parent(mut self, parent: NodeKey) -> Self {
self.parent = parent;
self
}
/// Overrides the local transform. The default is [`Transform::IDENTITY`].
///
/// Mesh geometry is transformed during render preparation, including the active scene
/// origin shift used for large-scene precision.
pub fn transform(mut self, transform: Transform) -> Self {
self.transform = transform;
self
}
/// Inserts the mesh node and returns its typed node key.
pub fn add(self) -> Result<NodeKey, LookupError> {
self.scene.insert_node(
self.parent,
NodeKind::Mesh(MeshNode {
geometry: self.geometry,
material: self.material,
}),
self.transform,
)
}
}
impl ModelBuilder<'_> {
/// Overrides the parent node. The parent is validated when [`Self::add`] is called.
pub fn parent(mut self, parent: NodeKey) -> Self {
self.parent = parent;
self
}
/// Overrides the local transform. The default is [`Transform::IDENTITY`].
pub fn transform(mut self, transform: Transform) -> Self {
self.transform = transform;
self
}
/// Inserts the model node and returns its typed node key.
pub fn add(self) -> Result<NodeKey, LookupError> {
self.scene.insert_node(
self.parent,
NodeKind::Model(ModelNode { model: self.model }),
self.transform,
)
}
}