1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! FBX DOM utils for FBX v7.4 or later.
//!
//! # Concepts
//!
//! ## Tree
//!
//! FBX data has tree structure at low level.
//! This low-level structure is represented by `fbxcel::tree::v7400::Tree`.
//!
//! Some nodes in FBX (including geometries, bones, textures, etc) has directed
//! acyclic graph structures.
//! These are called "objects".
//!
//! [`Document`] type interprets low-level tree and provides access to
//! high-level objects graph structure.
//!
//! ### Node ID
//!
//! Each node (in low-level tree structure) is assigned internal indentifier by
//! `fbxcel` crate.
//! This does not appear in source FBX data.
//!
//! The node ID for low-level nodes are represented by
//! `fbxcel::tree::v7400::NodeId`.
//!
//! `fbxcel_dom` provides specialized node ID types for some types of nodes,
//! including objects.
//! ([`object::ObjectNodeId`] is one example of them.)
//! They have dedicated node ID types, and they can be converted into low-level
//! node ID.
//!
//! ### Node handle
//!
//! Node IDs cannot be used without the tree the node belongs to.
//! Node handle is a struct which contains both a tree and a node ID.
//!
//! The low-level node handles are represented by
//! `fbxcel::tree::v7400::NodeHandle`.
//!
//! `fbxcel_dom` provides specialized node handle types for some types of nodes,
//! including objects.
//! [`object::ObjectHandle`] is one example of them.
//!
//! ## Object
//!
//! Many useful data are represented as objects in FBX data.
//!
//! Some subsets of object types make tree structures, but the rules are not
//! completely revealed, because FBX is proprietary format.
//!
//! Sometimes users should see multiple connected objects to render 3D content.
//!
//! For detail, see [module documentation of `object`](object/index.html).
//!
//! [`Document`]: struct.Document.html
//! [`object::ObjectHandle`]: object/struct.ObjectHandle.html
//! [`object::ObjectNodeId`]: object/struct.ObjectNodeId.html

pub use self::{
    document::{Document, Loader},
    error::LoadError,
    global_settings::GlobalSettings,
};

pub(crate) mod connection;
pub mod data;
mod definition;
mod document;
pub(crate) mod error;
mod global_settings;
pub mod object;