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
72
73
74
75
76
77
// SPDX-License-Identifier: Apache-2.0
//! # cadmpeg-codec-catia
//!
//! Decoder for Dassault Systèmes CATIA V5 `.CATPart` files.
//!
//! ## What is implemented
//!
//! A `.CATPart` is a `V5_CFV2` container: an outer file header with a big-endian
//! directory offset/length pair, and (for most parts) a nested `V5_CFV2`
//! sub-container whose `CATIA_V5 CB0001` directory catalogues named logical
//! streams as extent lists. The geometry is stored in one of **five distinct
//! families**, each with its own decode path. This codec:
//!
//! - [`CatiaCodec::detect`] recognizes the unique `V5_CFV2\0` outer magic;
//! - [`CatiaCodec::inspect`] parses the outer header, reconstructs the inner
//! stream directory, enumerates its named streams, and identifies the storage
//! variant (spec §1) — this works for every variant;
//! - [`CatiaCodec::decode`] decodes standard-nested `05 08 01` vertex points,
//! tag-bridged planes, and inline analytic carriers from `SurfacicReps`; it
//! also decodes directly framed analytic carriers in zero-entity `a9 03`
//! streams, E5 circle/cone/torus carriers, and `a8`/`a5` freeform NURBS
//! carrier pools where present.
//!
//! ## What is decoded, and what is reported as loss
//!
//! Standard-nested geometry decodes vertices, analytic carriers, compatible
//! circle/line carriers, and faces when their stored senses are available.
//! Zero-entity, E5, and object-stream families transfer their directly framed
//! carriers. Remaining carrier-to-topology bindings are reported as loss rather
//! than fabricated.
use ;
/// The CATIA V5 `.CATPart` codec.
;