mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 08:52:32 +00:00
PdfCraft's pdfcraft-prc crate (revision 80e26e674d1aa33078e83c8139875047f3289eb6), moved whole with its tests. It reads PRC (ISO 14739-1), the model format of PDF 3D annotations: the container, the bit-level primitives, the schema, tessellations and the product tree. The code is unchanged. The package and its README are renamed, the doctests and tests import craft_prc, and the Double code table taken from prc-rs (MIT) has its row in ATTRIBUTION.md and its licence in licenses/prc-rs.
38 lines
1.6 KiB
Rust
38 lines
1.6 KiB
Rust
//! A reader for PRC, the 3D model format a PDF `/3D` stream of `/Subtype /PRC` carries
|
|
//! (ISO 32000-2 §13.6.3, ISO 14739-1).
|
|
//!
|
|
//! It depends on no PDF code: the caller hands it the stream's bytes. It reads the
|
|
//! uncompressed container, inflates each section, and decodes the bit-level primitives and
|
|
//! the schema a newer producer uses to describe fields this reader does not know; it decodes
|
|
//! tessellations and walks the product tree into placed, coloured meshes
|
|
//! ([`PrcFile::placements`], [`PrcFile::model_tree`]).
|
|
//!
|
|
//! Clause numbers in `[WD x.y]` refer to the PRC working draft, ISO/TC 171/SC 2 N570.
|
|
//!
|
|
//! Every read is bounded: inflation by [`MAX_INFLATED_BYTES`] (or a caller's limit), decoded
|
|
//! array elements by [`MAX_DECODED_ELEMENTS`] and schema-program steps by [`MAX_SCHEMA_STEPS`]
|
|
//! per reading pass, schema programs by a depth ceiling. Damaged data is an error, never a panic.
|
|
#![forbid(unsafe_code)]
|
|
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]
|
|
|
|
mod acof;
|
|
mod arrays;
|
|
mod bits;
|
|
mod container;
|
|
mod entity;
|
|
mod error;
|
|
mod geometry;
|
|
mod schema;
|
|
mod tess;
|
|
#[cfg(test)]
|
|
mod testw;
|
|
mod tree;
|
|
|
|
pub use bits::{BitReader, MAX_DECODED_ELEMENTS, MAX_SCHEMA_STEPS};
|
|
pub use container::{FileStructure, MAX_FILE_STRUCTURES, MAX_INFLATED_BYTES, PRC_READER_VERSION, PrcFile, PrcHeader, SectionKind, UniqueId};
|
|
pub use error::PrcError;
|
|
pub use geometry::Matrix;
|
|
pub use schema::Schema;
|
|
pub use tess::{Tessellation, TriangleMesh, TriangleStyle};
|
|
pub use tree::{EntityOverrides, MAX_PLACEMENTS, ModelNode, ModelUnits, NameSource, Placement, Rgba, StyleAlpha};
|