mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-03 17:38:27 +00:00
Simplify
This commit is contained in:
parent
38c79002ac
commit
955d90680d
@ -4,9 +4,10 @@ use crate::geometry::{Mesh, Operation, Vertex};
|
||||
|
||||
pub fn export(mesh: &Mesh) -> anyhow::Result<()> {
|
||||
let mut vertices = Vec::new();
|
||||
let mut triangles = Vec::new();
|
||||
|
||||
mesh.vertices(&mut vertices);
|
||||
let triangles = mesh.triangles();
|
||||
mesh.triangles(&mut triangles);
|
||||
|
||||
let mesh = threemf::Mesh {
|
||||
vertices: threemf::model::Vertices {
|
||||
|
@ -22,8 +22,8 @@ impl Operation for Mesh {
|
||||
vertices.extend(self.vertices.iter().copied());
|
||||
}
|
||||
|
||||
fn triangles(&self) -> Vec<Triangle> {
|
||||
self.triangles.clone()
|
||||
fn triangles(&self, triangles: &mut Vec<Triangle>) {
|
||||
triangles.extend(&self.triangles);
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,9 +37,7 @@ impl Operation for Vertex {
|
||||
vertices.push(*self);
|
||||
}
|
||||
|
||||
fn triangles(&self) -> Vec<Triangle> {
|
||||
vec![]
|
||||
}
|
||||
fn triangles(&self, _: &mut Vec<Triangle>) {}
|
||||
}
|
||||
|
||||
pub type Index = u32;
|
||||
@ -47,7 +45,7 @@ pub type Triangle = [Index; 3];
|
||||
|
||||
pub trait Operation {
|
||||
fn vertices(&self, vertices: &mut Vec<Vertex>);
|
||||
fn triangles(&self) -> Vec<Triangle>;
|
||||
fn triangles(&self, triangles: &mut Vec<Triangle>);
|
||||
}
|
||||
|
||||
pub struct OperationInSequence {
|
||||
@ -63,15 +61,11 @@ impl Operation for OperationInSequence {
|
||||
self.operation.vertices(vertices);
|
||||
}
|
||||
|
||||
fn triangles(&self) -> Vec<Triangle> {
|
||||
let mut triangles = self
|
||||
.previous
|
||||
.as_ref()
|
||||
.map(|op| op.triangles.clone())
|
||||
.unwrap_or_default();
|
||||
triangles.extend(self.operation.triangles.clone());
|
||||
|
||||
triangles
|
||||
fn triangles(&self, triangles: &mut Vec<Triangle>) {
|
||||
if let Some(op) = &self.previous {
|
||||
op.triangles(triangles);
|
||||
}
|
||||
self.operation.triangles(triangles);
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,7 +79,7 @@ impl Operation for ClonedOperation {
|
||||
vertices.extend(self.vertices.iter());
|
||||
}
|
||||
|
||||
fn triangles(&self) -> Vec<Triangle> {
|
||||
self.triangles.clone()
|
||||
fn triangles(&self, triangles: &mut Vec<Triangle>) {
|
||||
triangles.extend(&self.triangles);
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +191,9 @@ impl Renderer {
|
||||
let mut indices = Vec::new();
|
||||
let mut vertices = Vec::new();
|
||||
|
||||
let mesh_triangles = mesh.triangles();
|
||||
let mut mesh_triangles = Vec::new();
|
||||
mesh.triangles(&mut mesh_triangles);
|
||||
|
||||
for triangle in &mesh_triangles {
|
||||
let triangle = triangle.map(|index| {
|
||||
let mut mesh_vertices = Vec::new();
|
||||
|
Loading…
Reference in New Issue
Block a user