mirror of
https://github.com/hannobraun/Fornjot
synced 2025-03-01 02:25:59 +00:00
Merge pull request #1863 from hannobraun/model
Clean up model-related code in `fj-interop`
This commit is contained in:
commit
c270824282
@ -1,50 +0,0 @@
|
||||
//! Debug information definitions for the Fornjot ecosystem
|
||||
//!
|
||||
//! Defines debug information that is used by other crates within the Fornjot
|
||||
//! ecosystem. The types in here aren't very useful in themselves, but they
|
||||
//! define an interface that other crates use to communicate between each other.
|
||||
|
||||
use fj_math::{Point, Segment};
|
||||
|
||||
/// Debug info from the CAD kernel that can be visualized
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct DebugInfo {
|
||||
/// Rays being used during face triangulation
|
||||
pub triangle_edge_checks: Vec<TriangleEdgeCheck>,
|
||||
}
|
||||
|
||||
impl DebugInfo {
|
||||
/// Construct an empty instance of `DebugInfo`
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// Clear all information within this instance
|
||||
///
|
||||
/// The resulting instance is the same, as if created by [`DebugInfo::new`],
|
||||
/// but calling `clear` might be more efficient in regard to heap
|
||||
/// allocations.
|
||||
pub fn clear(&mut self) {
|
||||
self.triangle_edge_checks.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// Record of a check to determine if a triangle edge is within a face
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct TriangleEdgeCheck {
|
||||
/// The origin of the ray used to perform the check
|
||||
pub origin: Point<3>,
|
||||
|
||||
/// The points where the ray hit edges of the face
|
||||
pub hits: Vec<Segment<3>>,
|
||||
}
|
||||
|
||||
impl TriangleEdgeCheck {
|
||||
/// Construct a new instance
|
||||
pub fn new(origin: Point<3>) -> Self {
|
||||
Self {
|
||||
origin,
|
||||
hits: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
@ -11,7 +11,6 @@
|
||||
|
||||
#![warn(missing_docs)]
|
||||
|
||||
pub mod debug;
|
||||
pub mod ext;
|
||||
pub mod mesh;
|
||||
pub mod processed_shape;
|
||||
pub mod model;
|
||||
|
15
crates/fj-interop/src/model.rs
Normal file
15
crates/fj-interop/src/model.rs
Normal file
@ -0,0 +1,15 @@
|
||||
//! An approximated model
|
||||
|
||||
use fj_math::{Aabb, Point};
|
||||
|
||||
use crate::mesh::Mesh;
|
||||
|
||||
/// An approximated model
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Model {
|
||||
/// The triangle mesh that approximates the model
|
||||
pub mesh: Mesh<Point<3>>,
|
||||
|
||||
/// The axis-aligned bounding box of the model
|
||||
pub aabb: Aabb<3>,
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
//! A processed shape
|
||||
|
||||
use fj_math::{Aabb, Point};
|
||||
|
||||
use crate::{debug::DebugInfo, mesh::Mesh};
|
||||
|
||||
/// A processed shape
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ProcessedShape {
|
||||
/// The axis-aligned bounding box of the shape
|
||||
pub aabb: Aabb<3>,
|
||||
|
||||
/// The triangle mesh that approximates the original shape
|
||||
pub mesh: Mesh<Point<3>>,
|
||||
|
||||
/// The debug info generated while processing the shape
|
||||
pub debug_info: DebugInfo,
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
//! Viewer camera module
|
||||
use std::f64::consts::FRAC_PI_2;
|
||||
|
||||
use fj_interop::{mesh::Mesh, processed_shape::ProcessedShape};
|
||||
use fj_interop::{mesh::Mesh, model::Model};
|
||||
use fj_math::{Aabb, Point, Scalar, Transform, Vector};
|
||||
|
||||
use crate::screen::NormalizedScreenPosition;
|
||||
@ -82,7 +82,7 @@ impl Camera {
|
||||
pub fn focus_point(
|
||||
&self,
|
||||
cursor: Option<NormalizedScreenPosition>,
|
||||
shape: &ProcessedShape,
|
||||
shape: &Model,
|
||||
) -> FocusPoint {
|
||||
self.calculate_focus_point(cursor, &shape.mesh)
|
||||
.unwrap_or_else(|| FocusPoint(shape.aabb.center()))
|
||||
|
@ -1,4 +1,4 @@
|
||||
use fj_interop::processed_shape::ProcessedShape;
|
||||
use fj_interop::model::Model;
|
||||
use fj_math::Aabb;
|
||||
use tracing::warn;
|
||||
|
||||
@ -28,7 +28,7 @@ pub struct Viewer {
|
||||
pub renderer: Renderer,
|
||||
|
||||
/// The shape
|
||||
pub shape: Option<ProcessedShape>,
|
||||
pub shape: Option<Model>,
|
||||
}
|
||||
|
||||
impl Viewer {
|
||||
@ -60,7 +60,7 @@ impl Viewer {
|
||||
}
|
||||
|
||||
/// Handle the shape being updated
|
||||
pub fn handle_shape_update(&mut self, shape: ProcessedShape) {
|
||||
pub fn handle_shape_update(&mut self, shape: Model) {
|
||||
self.renderer.update_geometry((&shape.mesh).into());
|
||||
|
||||
let aabb = shape.aabb;
|
||||
|
@ -1,6 +1,4 @@
|
||||
use fj_interop::{
|
||||
debug::DebugInfo, mesh::Mesh, processed_shape::ProcessedShape,
|
||||
};
|
||||
use fj_interop::{mesh::Mesh, model::Model};
|
||||
use fj_math::{Aabb, Point};
|
||||
use fj_viewer::{
|
||||
InputEvent, NormalizedScreenPosition, RendererInitError, Screen,
|
||||
@ -24,10 +22,9 @@ pub fn display(mesh: Mesh<Point<3>>, invert_zoom: bool) -> Result<(), Error> {
|
||||
let window = Window::new(&event_loop)?;
|
||||
let mut viewer = block_on(Viewer::new(&window))?;
|
||||
|
||||
viewer.handle_shape_update(ProcessedShape {
|
||||
viewer.handle_shape_update(Model {
|
||||
aabb: Aabb::<3>::from_points(mesh.vertices()),
|
||||
mesh,
|
||||
debug_info: DebugInfo::new(),
|
||||
});
|
||||
|
||||
let mut held_mouse_button = None;
|
||||
|
Loading…
Reference in New Issue
Block a user