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