1#![cfg_attr(not(debug_assertions), deny(warnings))]
4#![deny(clippy::all, rust_2018_idioms)]
5#![warn(
6 missing_docs,
7 missing_debug_implementations,
8 trivial_casts,
9 trivial_numeric_casts,
10 unsafe_code,
11 unstable_features,
12 unused_import_braces,
13 unused_qualifications
14)]
15
16use array_macro::array;
17use serde::{Deserialize, Serialize};
18
19pub mod base {
21 pub use truck_base::{
22 assert_near, bounding_box::BoundingBox, cgmath64::*, hash, hash::HashGen, tolerance::*,
23 };
24 pub use truck_geotrait::*;
25}
26pub use base::*;
27
28pub trait Attributes<V> {
30 type Output;
32 fn get(&self, vertex: V) -> Option<Self::Output>;
34}
35
36#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
38pub struct StandardAttributes {
39 pub positions: Vec<Point3>,
41 pub uv_coords: Vec<Vector2>,
43 pub normals: Vec<Vector3>,
45}
46
47#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
49pub struct StandardAttribute {
50 pub position: Point3,
52 pub uv_coord: Option<Vector2>,
54 pub normal: Option<Vector3>,
56}
57
58#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Serialize, Deserialize)]
60pub struct StandardVertex {
61 pub pos: usize,
63 pub uv: Option<usize>,
65 pub nor: Option<usize>,
67}
68
69#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
74pub struct Faces<V = StandardVertex> {
75 tri_faces: Vec<[V; 3]>,
76 quad_faces: Vec<[V; 4]>,
77 other_faces: Vec<Vec<V>>,
78}
79
80#[derive(Clone, Debug, PartialEq, Eq, Serialize)]
86pub struct PolygonMesh<V = StandardVertex, A = StandardAttributes> {
87 attributes: A,
88 faces: Faces<V>,
89}
90
91#[derive(Clone, Debug, Serialize)]
93pub struct StructuredMesh {
94 positions: Vec<Vec<Point3>>,
95 uv_division: Option<(Vec<f64>, Vec<f64>)>,
96 normals: Option<Vec<Vec<Vector3>>>,
97}
98
99#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
101pub struct PolylineCurve<P>(pub Vec<P>);
102
103mod attributes;
104pub mod errors;
106mod expand;
107pub mod faces;
109mod meshing_shape;
110pub mod obj;
112pub mod polygon_mesh;
114pub mod polyline_curve;
116pub mod stl;
118mod structured_mesh;