Skip to content

Latest commit

 

History

History
541 lines (386 loc) · 111 KB

format-support.md

File metadata and controls

541 lines (386 loc) · 111 KB

Format support

Support ladder

Scoring rules

  1. A score attaches to declared coverage. A score states the highest level whose requirements pass for the coverage its profile declares, and the profile names that coverage — concretely, the format's scored list in crates/cadmpeg-registry/docs/dialect-support.toml. Surplus capability in a subset of versions, layouts, or files shows as extras. Refusing a band the codec recognizes is a stated, visible fact in the profile, never an exclusion that raises a score.
  2. Full pass. A level passes when its requirements and the proof criteria hold across mainstream files in the declared envelope. One fixture, an entity census, or an opaque record capture does not pass a level.
  3. Inapplicable levels. A format definition may mark a level inapplicable when its document kind cannot contain that category. Inapplicable levels pass. Missing fixtures do not establish inapplicability.
  4. Integer levels only. Scores are whole levels such as L4. Do not use fractional levels, evidence-grade suffixes, or other score variants. A recorded level already means the proof criteria pass for the codec. The published headline for a format is the single integer level and nothing else.
  5. Refusal is a visible mark. Refusing a recognized band is a visible mark and can never improve any published number.

Proof criteria

A level passes only when every criterion holds for the declared envelope:

  • Real files exercise the scored level. A maintainer evaluation recorded in docs/evaluations.toml satisfies this criterion.
  • Every source byte is typed, classified as structural, or preserved as a named opaque record.
  • Every unsupported semantic construct produces a machine-readable loss.
  • Decode, validation, write, and conversion results are deterministic.
  • Generated files re-decode to the expected semantic IR.
  • Geometry and topology satisfy declared tolerance and validity checks.
  • Fuzzing covers every parser and writer touched by the scored level.

The score tables in this document are not a criterion, because they are not written by hand. scripts/render-format-support.py renders every one of them from crates/cadmpeg-registry/docs/dialects.toml and crates/cadmpeg-registry/docs/dialect-support.toml, and its --check mode compares the committed file to a fresh render byte for byte. A registry edit without a re-render fails the gate.

Levels

  • L0: Parsed. The codec detects the format and document kind, parses container framing, and extracts document metadata plus a preview image or tessellation.
  • L1: Opened. The codec navigates sections, directories, streams, compression, and checksums; identifies governing versions and layout variants; enumerates embedded assets and external references; and names undecoded content.
  • L2: Geometry. Typed IR contains placed points, analytic curves and surfaces, and NURBS with correct units, parameterization, and model-space placement. Prototypes, datums, and display meshes require placement or exact geometry to satisfy this level.
  • L3: Model. Connected B-rep from bodies through vertices includes ownership, orientation, trimming, placement, and transforms. Structural validation passes across the band. Connected topology may contain unknown carriers.
  • L4: Design records. Features carry operation semantics, such as an extrude's profile, direction, and extent. Sketch geometry, ordering, and dependencies expose the history. Replayability belongs to higher levels.
  • L5: Shape complete. Every geometry carrier family and topology case in the band decodes. Mainstream band files contain typed carriers throughout, and body and face colors transfer.
  • L6: Design complete. Complete sketch constraints, dimensions, parameters, and expressions; every feature family with full operation semantics; configurations; history coherent enough to re-derive the model.
  • L7: Product. Components, occurrences, placements, external references, mates, and persistent identity across the structure. Part-only formats mark mates inapplicable.
  • L8: Full document. Presentation, PMI, annotations, and drawings where carried; application data typed or deliberately preserved with identity.
  • L9: Writes back. Semantic native writing supports edits, source-less generation, target-version selection, explicit rejection, and unsupported-record survival or refusal. Independent native applications accept verified round trips. Byte replay and bounded patching count as extras at lower levels.

Current scores

Format Level
Autodesk Inventor .ipt and .iam L1
ASM/ACIS bare .sat/.smt/.smb/.sab streams L1
FreeCAD .FCStd L5
IGES L9
Rhino .3dm L1
SolidWorks .sldprt L1
Fusion 360 .f3d L4
Siemens NX .prt L1
CATIA V5 .CATPart L1
Creo Parametric .prt L1
STEP Part 21 L9

Each headline names the format's dialect rows, which the format's own section lists. Every profile below describes the envelope its rows cover.

Autodesk Inventor .ipt and .iam

Model: CFB document with RSe segment databases, exact M/B record frames, OLE properties, Protein assets, external references, and an embedded part-kernel carrier

Primary structural envelope: CFB version 3, RSe database schema 31, Meta Stream version 8, exact zlib members, the defined forward/backward metadata sections, and versioned B-record trailers. CFB version 4, other RSe schemas, and other Meta Stream versions are separate envelopes.

Ladder: L1.

Dialect Read Write
inventor:cfb3-rse31-meta8 detected none
inventor:unknown unclassified-recovered none

Structural detection requires directory evidence. The codec enumerates the complete CFB hierarchy, versioned databases, registry and revision tables, exact segment pairs, metadata tables, typed bulk records, OLE property sets, previews when present, Protein package entries and decoded catalog assets, and UFRxDoc external references. Optional or unknown segments remain named native records.

  • Part geometry: extra above L1. One typed active carrier in one PmBRep segment transfers through cadmpeg-asm. The kernel header controls width, units, tolerances, and SAB framing. Kernel unknown records and source annotations are retained. An empty or invalid decoded carrier produces blocking geometry_not_transferred.
  • ACIS part carriers: extra above L1. The 32-bit ACIS header and solved SAB partition transfer through the same direct and embedded kernel decoder at every save format. Connected B-rep validation and direct-carrier parity pass for majors 217 and 218, the verified bands. A carrier outside them decodes with the nearer verified band's grammar, reports the acis: kernel layer as Admission::Unverified, and charges source.dialect-unverified; a carrier that reads no geometry is retained verbatim and produces blocking geometry_not_transferred.
  • Assemblies: partial extra. A UFRxDoc occurrence transfers when its external file reference, AmDc occurrence identity, and active finite affine AmGraphics placement form one exact join. Placement translations convert from centimetres to millimetres. Suppressed occurrences transfer with hidden visibility and may use an identity placement when graphics are absent. External prototypes remain unresolved, no persisted path is opened, and local prototypes and nested parent links remain untransferred.
  • Materials: partial extra. Shared Protein schema decoding produces typed native assets and neutral appearance definitions. One exact PmApp default-style-to-rendering-style-to-asset join binds the selected appearance to transferred part bodies. One exact PmGraphics face-to-style-collection-to-primary-color join creates a direct face appearance that overrides the body default. Other style and texture families remain native.
  • Design intent: partial extra. Closed scalar parameter graphs and closed planar point, line, circle, ellipse, and constraint graphs transfer with native cross-links. Extrude, hole, constant-radius edge fillet, and equal-distance edge chamfer operations transfer only when every required typed property, dimension, native selection, placement, and result-body reference resolves. Each transferred result has a native intermediate-body identity. Suppression and dependency state remain unresolved, so this extra does not advance the score to L4.
  • Write: None. The codec has no encoder, replay path, or patch path.

See formats/inventor.md, formats/inventor-open-items.md, and formats/protein.md.

ASM/ACIS bare .sat/.smt/.smb/.sab streams

Model: Standalone ShapeManager or Spatial ACIS B-rep stream outside any CAD container

Primary structural envelope: ASM BinaryFile4, ASM BinaryFile8, ACIS BinaryFile, and text SAT/SMT streams that terminate with End-of-ASM-data or End-of-ACIS-data, at any save format. Stream content selects the decoder; file extensions do not. Spatial ACIS save-format majors 217 and 218 are the verified bands. An ACIS-branch stream outside them is framed and decoded with the nearer verified band's record grammar, reported as Admission::Unverified, and charged source.dialect-unverified.

Ladder: L1.

Dialect Read Write
sat:asm-binary detected none
sat:acis-binary detected none
sat:text detected none
sat:unknown refused none

Detection, inspection, and decode cover the admitted binary and text branches. The codec transfers solved-record analytic, NURBS, topology, placement, and procedural carriers through cadmpeg-asm into connected B-rep when the stream yields surfaces, points, or faces. Header scale and tolerances populate the neutral document. Unknown SAB records retain source range, digest, and kernel-qualified identity under the sat namespace. A stream that frames but decodes no carrier produces blocking geometry_not_transferred. Feature history, assemblies, presentation documents, and native writing are inapplicable or absent for this envelope.

  • Write: None. The codec has no encoder, replay path, or patch path.

See formats/asm.md and formats/asm-open-items.md.

Status terms

  • None: the repository lacks an implementation for the domain.
  • Inspect: cadmpeg identifies and reports the structure without transferring it into typed IR.
  • Partial: cadmpeg transfers a typed subset and reports or preserves the remainder.
  • Complete: the domain satisfies the proof criteria for its scored level.

byte_exact, derived, inferred, and unknown describe how cadmpeg obtained one IR value.

FreeCAD .FCStd

Model: ZIP-packaged application object/property graph with exact-shape and presentation side entries

Primary envelope: SchemaVersion=4, FileVersion=1, including core App, Part, PartDesign, Sketcher, Spreadsheet, Assembly, TechDraw, GUI records, text and binary B-rep entries, and identity-preserving extension objects. GUI state, thumbnails, persistent element maps, and string-hasher tables are independently optional.

Ladder: L5.

Dialect Read Write
fcstd:schema-2 detected preserved
fcstd:schema-3 detected preserved
fcstd:schema-4 L5 verified
fcstd:unknown unclassified-recovered none

The cumulative gate stops at L5; L9 write assertions pass individually and show as extras. Schema 4 / file 1 is the one synthesis target. Schema 2 and schema 3 are preservation-only input dialects. Each schema's own read and write disposition is the row above.

  • Read profile: Partial for the primary envelope relative to the cumulative L5 gate. Text and binary exact shapes, connected topology, sketches, constraints, core design operations, product links, TechDraw, semantic annotations, Mesh, Points, embedded assets, and inert extension data are implemented. See the generated coverage profile for the current cumulative result.
  • Native write: Partial for the declared write envelope; individual write assertions pass as extras above L5. Schema 4/file 1 retained documents regenerate deterministically while preserving every unedited XML record and named side entry. Checked leaf property edits and side-entry replacements are supported. Recursive typed application graphs can be generated without a source archive. Writing uses the FCStd native document graph on CadIr (ir.native["fcstd"]); Encoder::plan ignores SourceFidelity and returns NotConsumed. Unsupported schema/file targets, cross-band transcoding, and edits lacking a typed nested-value serializer are explicitly refused.
  • Round trip: Every manifested public fixture writes deterministically, decodes to the same semantic fingerprint, accepts a typed property edit, and retains every named entry by identity and digest. Optional FreeCAD 1.1.1 acceptance is environment-driven interop via tools/validate_fcstd_interop.py and is not recorded in the checked-in profile.

See formats/freecad_fcstd.md, formats/freecad_fcstd-open-items.md, and formats/freecad_fcstd-coverage.md.

IGES

Model: IGES ASCII entity graph

Ladder: L9.

Dialect Read Write
iges:1.0-fixed-ascii unclassified-recovered preserved
iges:ansi-y14.26m-1981-fixed-ascii unclassified-recovered preserved
iges:2.0-fixed-ascii unclassified-recovered preserved
iges:3.0-fixed-ascii unclassified-recovered preserved
iges:asme-ansi-y14.26m-1987-fixed-ascii unclassified-recovered preserved
iges:4.0-fixed-ascii detected emitted
iges:asme-y14.26m-1989-fixed-ascii unclassified-recovered preserved
iges:5.0-fixed-ascii detected emitted
iges:5.1-fixed-ascii detected emitted
iges:5.2-fixed-ascii detected emitted
iges:5.3-fixed-ascii L9 verified
iges:4.0-compressed-ascii detected preserved
iges:5.0-compressed-ascii detected preserved
iges:5.1-compressed-ascii detected preserved
iges:5.2-compressed-ascii detected preserved
iges:5.3-compressed-ascii L1 preserved
iges:4.0-binary detected preserved
iges:5.0-binary detected preserved
iges:5.1-binary detected preserved
iges:5.2-binary detected preserved
iges:5.3-binary detected preserved
iges:unknown unclassified-recovered preserved

Semantic decode is resource-bounded, valid-IR output is admitted atomically, every non-null Directory Entry has retained identity and transfer accounting, and semantic output has target-version and independent-application gates. Binary, other ASCII versions, and extensions are separate envelopes. Binary is a read-only physical representation; its normalized entity semantics use the same version profile and do not change the writer ladder.

Envelopes

  • IGES 4.0, 5.0, 5.1, 5.2, and 5.3 Fixed ASCII mechanical/document. The 80-column representation containing Start, Global, Directory Entry, Parameter Data, and Terminate sections; the declared geometry, topology, product, presentation, annotation, drawing, associativity, property, and Macro entity matrix; and implementor-defined Type 406 property forms retained as opaque native records. Unchanged documents replay their retained source image. Semantic regeneration is bounded to the documented writer profile and refuses unsupported model or native content.
  • Other Fixed ASCII versions. Version-specific legacy or later envelope. Detection and exact version reporting establish identity. Semantic decode retains the declared version, uses the nearest implemented recovery profile, and reports iges/source.dialect-unverified; strict mode refuses that loss.
  • Compressed ASCII. The supported read representation expands inherited Directory fields and variable-length Parameter Data into the fixed-card parser model. Unchanged documents replay the original Compressed ASCII source image; semantic regeneration writes Fixed ASCII.
  • Binary. Deprecated Binary Flag, section, control-byte, and null-padding envelope. The reader validates the bounded Binary structure and normalizes its Start, Global, Directory, Parameter, and Terminate sections into the shared Fixed ASCII entity pipeline. The original Binary bytes remain the source image; semantic admission still follows the declared version profile, and no Binary writer is provided.
  • Extensions. Named extension envelopes only. An unregistered entity type or form remains inspectable. Its presence holds the Fixed ASCII mechanical/document score at the last level that admits it as opaque.
  • Finite-element analysis. Types 134, 136, 138, 146, 148, and 418 are admitted in their standard forms and retained as typed records in native.iges.fem_entities. The codec has no neutral finite-element IR or FEM writer; these records remain native-only and report the standard retained-unprojected disposition.
  • Electrical, artwork, and schematic. Type 125 is admitted as a geometry location carrier, with its flash shape retained in native.iges.flashes. Type 402 Forms 8, 10, and 11 remain in the adjacent electrical-presentation envelope. Types 132, 320, and 420 remain in the mechanical/document profile for typed network definition, connection identity, and occurrence structure.
  • Macro and extension definitions. Type 306 Form 0 and Macro Instance Entity types 600 through 699 and 10000 through 99999 are admitted as native-only records. The macro language is framed and retained, but not evaluated; unregistered extension types remain in the adjacent extension envelope.

Ladder applicability

  • L0 preview/tessellation is inapplicable. The envelope has no thumbnail or display-mesh record. Detection, fixed-card framing, document kind, and Global metadata satisfy the applicable L0 semantics. Derived tessellation is an optional recovery product.
  • L3 connected-model semantics split by source topology. Explicit manifold B-rep records must produce a connected body-to-vertex graph with source sharing and orientation. Trimmed and bounded surfaces carry face-local boundary identity; they must produce valid sheet regions without invented adjacency. This is connected recovery of the topology represented by each source object.
  • L4 is inapplicable. The envelope contains geometry, topology, presentation, associativity, and application records. It has no ordered feature-operation history or replayable sketch history.
  • L6 is inapplicable. The envelope contains dimensions and associativity as document semantics. It has no parametric design system with constraints, expressions, configurations, and re-derivable feature history.
  • L7 mates are inapplicable. Product definitions, occurrences, groups, placements, external references, and persistent source identities are required. The envelope has no assembly-mate constraint model.

Read profile

  • Container and versions: Band-wide. Bounded detection, inspection, and decode cover IGES 4.0, 5.0, 5.1, 5.2, and 5.3 Fixed and Compressed ASCII cards, Binary section envelopes, section order and counts, Global delimiters and metadata, Directory pairs, Parameter records, Macro statement framing, reference findings, entity/form census, physical line endings, and post-Terminate bytes. The Binary representation is structurally validated and normalized before the shared reader runs. Other ASCII versions decode with the declared version flag recorded verbatim, the effective version reported, and the iges/source.dialect-unverified loss charged. Every decode either returns a valid semantic document or a structured classified refusal under the active resource policy.
  • Geometry: Partial with closed admission. Admitted point, vector, analytic curve and surface, conic, composite, copious-data, parametric-spline, rational B-spline, ruled, revolved, tabulated, offset, bounded, trimmed, face-local boundary, CSG primitive, sweep, and Boolean carriers decode into exact neutral geometry or typed native construction records. Units and nested definition, occurrence, entity, and reflected transformations are applied once. Unprojected or unsupported carriers remain native records with stable losses; an invalid projected carrier refuses semantic decode.
  • Topology: Partial with closed admission. Type 141/142/143/144 face-local boundaries and Type 186/502/504/508/510/514 records have typed projection paths for shared vertex, edge, coedge, loop, face, shell, region, and body graphs, including seams, voids, open shells, and explicit non-manifold radial rings. Edge domains, endpoints, pcurves, ownership, and complete boundary projection are validated before a topology candidate is committed; a failed candidate remains retained with an attributed loss.
  • Design intent: Inapplicable. L4 and L6 semantics are absent from the declared format model.
  • Product structure: Partial with closed retention. Typed native records preserve subfigure and network definitions, occurrences, array occurrences, solid assemblies and instances, groups, connect points, external references without implicit opening, attributes, units, associativities, persistent Directory identity, and separate placements. Unsupported or omitted branches have stable losses, source provenance, retained records, and transfer-ledger entries.
  • Presentation and metadata: Partial with closed retention. Global metadata, standard and definition colors, line fonts, text fonts and templates, views, visibility, drawings, notes, leaders, dimensions, symbols, witness geometry, sectioned areas, drawing properties, and admitted Type 406 property forms retain typed identity and links. Neutral appearance transfers where the common IR defines it; unresolved display and document semantics remain native with explicit losses and source identity.
  • Recovery and retention: Complete. native.iges retains physical cards, generic entity records, typed domain arenas including macro definitions and instances, raw token values and spans, links, and source identities. The decoder retains the complete source image in SourceFidelity and records its document-local digest. The decode transfer_ledger records every non-null Directory entity and every quarantined record, and verifies its closure against the decoded model.

Write and round trip

  • Native write: Semantic. An unchanged decoded document with an intact source baseline replays byte for byte. Source-less documents and edited documents can write standalone points, finite lines, circles, ellipse/parabola/hyperbola conic arcs, NURBS curves, planes, and NURBS support surfaces, one-face trimmed sheet bodies with Type 141/144 boundaries and NURBS parameter curves, and bounded Type 186/502/504/508/510/514 manifold B-rep solids and multi-face sheet bodies, including vertex-only pole loops and non-manifold sheet radial rings. Circular cylinder, circular cone, sphere, and torus carriers are writable only when they support B-rep topology; other uses are refused because neutral IR supplies no finite domain for an equivalent Type 128 patch. Default-parameterization Revolution constructions with bounded directly evaluable generatrices emit their exact axis, generatrix, and Type 120 records for IGES 4.0, 5.0, and 5.1–5.3 targets; this includes analytic hyperbolas and does not use procedural_reduced. Bounded directly evaluable Extrusion constructions emit their exact directrix and Type 122 record for IGES 4.0, 5.0, and 5.1–5.3 targets; this includes analytic hyperbolas and piecewise-linear carriers and does not use procedural_reduced. Other exact solved carriers for ruled, revolved, tabulated, offset, and composite constructions are regenerated as writable neutral geometry with procedural_reduced information. Exact piecewise-linear carriers are encoded as degree-one NURBS. Analytic output uses Type 190 Form 1 for planes and pointer-defined Type 192, 194, 196, and 198 records for the other analytic families, with physically dependent Type 116 and Type 123 support entities. Parameter domains, knot vectors, weights, orthonormal frames, finite coordinates, topology ownership, radial incidence, and card widths are validated before output. The default target is IGES 5.3 Fixed ASCII; targets 4.0, 5.0, 5.1, and 5.2 are also emitted. Unsupported model arenas, native arenas, and native entity types are explicitly refused. Native direction, display, and occurrence-expansion records that are not regenerated produce passthrough_record_omitted warnings; --reject-lossy can refuse the plan before writing.

  • Round trip: Verified. Generated output is decoded and validated by the IGES codec for the writable geometry, single-face trimmed-sheet profile, and bounded B-rep profile, including shared and non-manifold sheet edges, vertex-only pole loops, void shells, and multi-face sheet shells. The target-version matrix covers IGES 5.1, 5.2, and 5.3. Unchanged source documents preserve every source byte through replay. The independent FreeCAD workflow checks exact topology and measures for the geometry profile, then imports every successful writer golden and one edited neutral document at each target version; the broad pass allows presentation-only imports to be empty but rejects null or invalid shapes. GitHub Actions run 31923613047 passed the exact manifest with 11 of 11 files and the broad manifest with 37 of 37 valid shape imports, including edited points at (11, 22, 33) for all three targets. Artifact iges-freecad-report-31923613047 retains the reports. See scripts/prepare-iges-freecad-golden.py, scripts/prepare-iges-freecad-edited.py, and scripts/verify-iges-freecad.py. Edited documents containing unsupported structures are refused rather than reduced silently.

  • Independent producer read: Verified. An Autodesk Inventor 2019 sample and a FreeCAD 1.1.1/Open CASCADE 7.8 export decode and validate under the service profile. Their source identities, digests, entity counts, and the retained Type 402 projection warning are recorded in formats/iges-fixture-charter.md. The producer files are evidence inputs only and are not repository fixtures.

Rhino .3dm

Model: 3DM object graph

Ladder: L1.

Dialect Read Write
rhino:archive-1 detected none
rhino:archive-2 detected none
rhino:archive-3 L1 none
rhino:archive-4 L1 none
rhino:archive-5 detected none
rhino:archive-50 L1 emitted
rhino:archive-60 L1 emitted
rhino:archive-70 L1 emitted
rhino:archive-80 L1 emitted
rhino:archive-90 detected none
rhino:unknown unclassified-recovered none

Partial typed geometry, topology, presentation, and bounded source-less native writing show as extras above the scored rows. V1 decodes through the legacy flat-record path. Archive 5 uses the four-byte chunk scan and is admitted as rhino:archive-5.

Read profile

  • Container and versions: Partial. Archive 2, 3, 4, 50, 60, 70, 80, and 90 use bounded chunk, checksum, table, object-record, class, attribute, userdata, properties, settings, layer, and EOF framing. V1 uses its flat legacy-record decoder. Archive 5 has bounded header inspection.
  • Geometry: Partial. Points, point clouds, lines, arcs, polylines, polycurves, curves on surfaces, persistent polyedge references, NURBS curves and surfaces, cages, morph controls, plane and procedural surfaces, hatches, detail boundaries, meshes, extrusions, SubD control cages, and supported Breps transfer into typed IR. The independent openNURBS witness records the exact per-version transfer floors. Unsupported classes, invalid topology, and payload variants remain named retained records.
  • Topology: Partial. Valid supported Breps transfer atomically into connected body, region, shell, face, loop, coedge, edge, vertex, 3D-curve, surface, and pcurve graphs. Invalid or unsupported Breps retain the source record without committing partial topology. The openNURBS witness does not establish complete Brep coverage.
  • Tessellation: Partial for archive 50/60/70/80. Mesh vertices, normals, faces, texture coordinates, colors, surface parameters, and ngons transfer where their channel invariants pass. Unsupported cache and channel metadata remains retained.
  • Design intent: Partial. Supported construction and history records transfer with persistent identities and typed operands. Unsupported history values, dependencies, and embedded geometry produce losses.
  • Product structure: Partial. Supported definitions, occurrences, placements, and external-file identities transfer. Unsupported instance and reference variants remain retained records. Assembly mates are inapplicable.
  • Presentation and metadata: Partial. Supported layers, attributes, materials, resources, views, settings, annotations, previews, notes, revisions, units, and URLs transfer. Unsupported records and userdata remain named retained records and produce losses.
  • Recovery and retention: Chunk boundaries isolate semantic failures. Complete unknown records are retained within per-record and per-document limits; larger records retain exact length and SHA-256 digest. Invalid Brep, extrusion, SubD, and instance candidates do not commit partial topology.

Write and round trip

  • Native write: Bounded source-less regeneration. Explicit archive 50, 60, 70, and 80 targets regenerate a narrowly writable IR. The writer does not consume SourceFidelity (NotConsumed). Writable families are point objects, grouped point clouds as free-vertex bodies, circles, native-canonical rational and non-rational NURBS curves, planes, native-canonical rational and non-rational NURBS surfaces, connected polygon sheet Breps with multiple faces, shared manifold edges, disjoint outer and inner loops, line or full-domain nonperiodic rational and non-rational NURBS edges, closed manifold planar solid Breps, bounded nonperiodic rational and non-rational NURBS faces, and standalone triangle meshes. Generated archives declare millimetre units and contain the canonical table sequence, a persistent default layer, and object attributes bound to that layer. Multiple independently owned Breps, free-vertex groups, and standalone geometry coexist in one object table; each Brep is preflighted and serialized from its isolated ownership graph. Every generated object receives a deterministic native UUID derived from its IR identity. Every NURBS-face coedge carries an explicit line or full-domain nonperiodic NURBS pcurve. The pcurve remains inside the surface parameter domain and maps through the surface onto the directed C3 edge within the declared face, edge, and pcurve tolerances. Planar NURBS edges retain their C3 carrier and generate an exact projected NURBS C2 for each directed face use. Explicit line and full-domain nonperiodic NURBS pcurves are written when they exactly equal that directed projection; their parameter range and fit tolerance are retained. Pcurves with incompatible geometry, ownership, wrapper state, native tail state, parameter domain, or surface/edge agreement are rejected. Writable Breps retain edge parameter domains, directed coedge rings, radial edge incidence, sheet or solid body classification, and vertex and edge tolerances. Solid output requires two opposite directed uses of every edge, a connected shell, and nondegenerate face loops. Free-vertex bodies and writable Breps retain object names, RGBA colors, and visibility through deterministic object attributes. Mesh normals, UV values, colors, surface parameters, and curvature channels retain their native scalar encodings. Archive 60, 70, and 80 use the double-vertex mesh extension; archive 50 uses float vertices and reports quantization. Unsupported arenas, retained non-writer namespaces, cross-object topology carriers, periodic surface topology, non-manifold topology, other display state, native records, shared free-vertex points, strip topology, unknown mesh channels, and noncanonical NURBS contracts are rejected before output.
  • Round trip: Bounded. Generated archives decode through the codec for every supported target. Exact geometry and grouping are retained for the writable families except explicitly reported archive-50 mesh quantization. The independent openNURBS comparison also writes one point with RhinoEncoder for each target and requires its reader to enumerate that point before the codec decodes it as one transferred object. This checks object-record interoperability, not acceptance by a vendor UI. A decoded archive produced by this writer can be edited and semantically regenerated when its native namespace contains only the writer's accounting records, default layer, default object presentation, and supported object records. Any additional retained Rhino arena or nondefault native presentation state is refused.

See formats/rhino_3dm.md, formats/rhino_3dm-open-items.md, and the openNURBS comparison.

SolidWorks .sldprt

Kernel: Parasolid

Role: reference format for full semantic support

Ladder: L1.

Dialect Read Write
sldprt:sw-version-pre-12000 detected preserved
sldprt:sw-version-12000-plus detected preserved
sldprt:unknown unclassified-recovered emitted

Unknown geometry carriers and topology cases block L5. Incomplete sketch constraints and feature families block L6.

Read profile

  • Container and versions: Partial. The codec validates CRC-framed blocks, enumerates cache cells and the tail directory, groups related Parasolid partition and deltas body streams by site (excluding ghost and ResolvedFeatures sections), selects the active configuration's source partition when identified, merges alternate sites as configuration-specific bodies, and preserves the source image. When multiple sites have no active selector, every site's model identities remain site-qualified and active geometry identity is unresolved. Coverage across historical schemas remains incomplete.
  • Geometry: Partial. Analytic and NURBS surfaces and curves transfer into typed carriers, including compact count-in-tag control and knot arrays. Swept and spun surfaces convert to NURBS when their profile is a NURBS, circle, or ellipse curve. Circle and ellipse profiles use exact rational quadratic forms. Recursive offset surfaces transfer as typed procedural surfaces over analytic, NURBS, or nested offset supports. Constant-radius rolling-ball blends transfer as typed procedural surfaces when both supports resolve. Variable-radius blend result faces transfer through their solved NURBS carriers. Validated surface-intersection curves transfer as derived degree-one NURBS. Other unsupported families remain opaque or produce unknown carriers.
  • Topology: Partial. The codec builds body, region, shell, face, loop, coedge, edge, and vertex ownership for supported layouts, including multiple regions and shells per body. Region and shell ownership follows the stored REGION and SHELL links when one unique chain closes bidirectionally: the BODY region head resolves through the direct or predecessor-sentinel form, each REGION previous/next pair agrees, and each SHELL reaches its region through the shell next-chain. A stored body-kind byte selects solid, sheet, wire, or general, and a stored region byte selects solid or void. A body whose links do not close gets one derived region and shell, and the decode report states the derived grouping. In both routes each shell divides into edge-connected face components, so interleaved faces separate by stored coedge and edge adjacency. The Parasolid schema token selects no traversal; the decoder reads it as an attribute only. Partition face membership excludes superseded deltas geometry; deltas update referenced points and complete missing subordinate records. Periodic cylinder seams follow the stored two-loop convention, and face orientation follows bridge-anchored coedge parity. Analytic, exact NURBS isoparametric, ruled-surface, complete width-4 intersection-cache, and inverse analytic or positive-weight NURBS intersection pcurves transfer when their surface, complete-segment tolerance, and endpoint invariants pass. Older body layouts remain open.
  • Tessellation: Partial. Display-list geometry transfers into tessellation arenas and can be regenerated. Stable face-to-triangle ownership remains open.
  • Design intent: Partial. Configurations transfer as neutral records with material and property overrides. SourceIndex binds each configuration to its configuration-specific solid partition independently of element order and resolved-feature slot identity. Source-less body membership remains unresolved and is reported. Active configuration names resolve uniquely and take precedence over the active geometry partition; unresolved active identity is reported. Geometry partitions without native configuration definitions produce explicitly reported inferred states. Keywords history retains feature element tags, exact containment including id-less nodes, order, names, suppression, dimensions, expressions, and attributes. Arithmetic parameter expressions evaluate across unambiguous dependency references with dimensional type checking. Semantic PMI dimensions enrich uniquely owner-qualified parameters; unbound records and native dimension subtypes are reported. Explicit feature output scopes resolve to model bodies; unresolved non-empty scopes are reported. Unknown operation families retain their kind, dimensions, and non-parameter attributes in the neutral native-operation definition. Reference planes, axes, points, and coordinate systems retain complete model-space placement. Planar profile B-reps nested in feature-input lanes transfer as placed sketches with solved lines, circles, arcs, ellipses, and rational or non-rational NURBS, plus oriented profile loops. Boss and cut extrusions retain blind, symmetric, two-sided, through-all, and native-face termination, explicit direction, draft, profile, and Boolean operation. Explicit-axis revolutions retain one-sided, symmetric, and two-sided angular extents, profile, axis placement, and Boolean operation. Projected split lines retain their planar sketch tool, generated target faces, and complete regeneration dependencies. Profile sweeps, lofts including boundary boss and cut forms, ribs, bending, twisting, tapering, and stretching flexes, drafts with selected faces and neutral planes, direct body Boolean combines, body deletion and isolation, body scaling about an explicit center, face deletion and replacement, face offset/translation/rotation, spherical and elliptical domes, linear patterns, circular patterns with a resolved axis, mirrors, constant and variable-radius fillets with selected edges, dimensional chamfers with selected edges, shells with removed faces, face thickening in either direction or both directions, and simple, counterbore, and countersink holes with explicit face, position, direction, and blind or through-all termination project to neutral operations and write edits through retained native records. A circular pattern with an unresolved axis retains its seed and native count and angle but reports the unresolved axis. An extrusion whose end-condition token is outside the defined set or whose blind depth scalar is absent or not a positive length, and a draft without a resolvable angle or outward flag, keep their remaining typed semantics and report the unresolved operand. The equation container projects as a typed feature-tree node, and its dimensions remain document-global. Decode reports parameters without evaluated scalars, expressions with unresolved quoted parameter references, history records with ambiguous identities or unresolved structural references, native sketch relation records omitted before constraint projection, native-only sketch geometry and constraints, native-only feature definitions, every typed feature retaining unresolved required operation semantics, and body delete/keep features whose retention mode is unresolved. Sketch constraints and other operation families remain open.
  • Product structure: None. .sldprt support covers parts only.
  • Presentation and metadata: Partial. Parasolid face colors transfer. DisplayLists body defaults, VisualStates feature appearances, and face-local appearances transfer with body → feature → face precedence. Feature ownership requires agreeing framed persistent-surface references. Definition counts, table order, geometry proximity, and opaque ATOM values do not assign appearances. Part, configuration, and display-state ownership remains open. Previews, SolidWorks XML metadata, units, and selected attributes transfer.

Write and round trip

  • Native write: Partial. Unchanged IR with a retained source image writes byte for byte. Supported geometry edits can patch the native Parasolid partition when the entity graph and provenance remain stable. Retained writing can synchronize supported feature, sketch, parameter, configuration, active-configuration XML, and PMI edits and rejects structural edits it cannot safely rewrite. Modified or source-less supported IR regenerates native blocks, DisplayLists, Keywords history, ResolvedFeatures lanes, and a section directory.
  • Semantic write limits: at most five regions per body and six shells per solid region; sheet regions require one shell. Ellipses whose declared major radius is smaller than the minor radius, elliptical or non-acute cones, signed sphere or torus parameterizations, explicit face names, stored edge parameter ranges, periodic NURBS carriers, NURBS surface degrees outside 1–8 or shapes that do not re-infer identically, and unbounded appearance data are not encoded.
  • Round trip: Partial. Byte-exact unchanged-file and semantic regeneration paths have generated-fixture tests. The public version and feature matrix remains to be built.

See formats/sldprt.md and formats/sldprt-open-items.md.

Fusion 360 .f3d

Kernel: ASM, derived from ACIS

Ladder: L4.

Dialect Read Write
f3d:manifest-3-2-0-0 L4 verified
f3d:f3z-multi-document detected none
f3d:unknown unclassified-recovered none

Undefined geometry-carrier payloads block L5. Tolerant coedge, edge, and vertex records decode across their release-gated layouts and round-trip through retained and source-less native writing. Native writing shows as extras.

Read profile

  • Container and versions: Partial. The codec joins the top-level manifest's asset-folder UUID to the matching per-asset manifest, scopes B-rep selection to that design folder, and composes every .smb and .smbh geometry blob referenced by the Design body map. Each body-map selector first matches an equal nonnegative ASM body key and otherwise selects the zero-based body-record ordinal. Selected body-connected components retain blob-qualified identities before merging. History and header streams are selected independently from geometry blobs by the ASM header flag, not by extension. Linked Protein and Design records decode. MetaStream primary indexes frame ACT records, and optional version contexts parse to their exact boundary. A .f3z multi-document archive decodes its root .f3d member and merges recursively resolved XREF targets with occurrence-local placements. A drawing-root archive decodes its sole derived .f3d model and reports the omitted F2D drawing document. Default desktop decoding accepts archives through 4 GiB, individual expands through 2 GiB, and at most 8 GiB total decompressed content. Nested Protein archives are capped separately at 256 MiB total inflated content and 128 MiB per nested entry. Entry declarations above these limits are rejected before payload allocation. A readable top-level manifest that declares a version other than 3-2-0-0 is classified as f3d:unknown, admitted with the f3d:manifest-3-2-0-0 strategy, and charged source.dialect-unverified. A manifest whose bytes do not fit that layout is rejected as structurally malformed.
  • Geometry: Partial. Analytic surfaces and curves, cached NURBS carriers, construction-backed cache-less translational-extrusion, straight-path law-sweep, constant-radius circular rolling-ball, one-radius circular and zero-corner rounded-chamfer variable-blend, and surface-helix carriers, cache-less exact helix-curve carriers, parameterizations, signed radii, point-degenerate curves, exact, compound, ruled, sum, revolution, offset, rolling-ball, pipe, taper-family, loft, and G2-blend spline surfaces, exact-cache curve, compound/deformable curves, helix, vector-offset, surface-offset, spring, subset, projection, silhouette/taper-silhouette, two- and three-surface intersection, two-sided offset, context-first blend/surface/parametric/skin constructions, and cache-first blend constructions with null, analytic, referenced, or inline NURBS surface/UV supports transfer under modern and legacy subtype names. Other law-dependent net/skin/sweep forms, variable/vertex blends, and related families remain incomplete when no solved cache resolves. A design that declares no body and no B-rep stream and whose content is sketch geometry transfers completely as a sketch-only design; a declared body whose B-rep stream is absent stays a reported geometry loss, and the report names which of the two conditions holds. The B-rep text encoding (.sat, .smt) decodes through the shared ASM decoders: a document whose geometry is in that form transfers its topology and geometry like a binary carrier, with lengths converted through the stream unit; a text carrier whose decode produces no geometry stays a reported loss that names the carrier. A variable-blend cache whose approximation-current field is zero does not become face geometry. The construction graph becomes the carrier and the stale cache tolerance is not an active fit contract. Variable-blend two_ends, functional, and interp radius laws evaluate in the shared slice parameter. Radius-function coordinates use document length units. Reference-image timeline objects transfer their embedded raster, plane placement, bounds, opacity, visibility, and independent u and v mirroring states. A Design document that declares no body or B-rep stream and contains a reference-image timeline object requires no B-rep carrier and reports no missing geometry or topology.
  • Topology: Partial. Shell-reachable solid, sheet, wire, and mixed-dimensional general bodies transfer with shells, faces, loops, coedges, edge-ring wires, point wires, edges, and vertices. Tolerant coedges transfer their local 3D NURBS use curves and loop-ordered parameter intervals independently of the shared edge carrier. Closed edge incidence classifies solid bodies, open face incidence classifies sheet bodies, face-less wire membership classifies wire bodies, and bodies containing both faces and wire edges classify as general. Unsupported surface records retain topology with unknown geometry; some procedural edges remain unresolved.
  • Tessellation: Partial. Mesh-body .paramesh containers transfer into the IR tessellation arena with source triangle tuple order and the affine placement their Design mesh-body record stores, including reflected, sheared, and rotated placements and repeated component instances. A reflected placement reverses model-space geometric winding without reordering triangle corners or their attribute selectors. Vertex coordinates are stored at f32 precision, which the decode report states. Settled code-2, code-4, and code-5 channels transfer with their registry roles, element codes, value tables, addressing domains, and corner selectors; this includes authored per-corner colours and texture coordinates. Role-0 code-5 values also decode through their octahedral mapping into one unit normal per triangle corner. The placement cofactor transforms those normals and preserves their orientation under reflection and nonuniform scale. Registry field 7 transfers its unique source-classified topology pairs as neutral feature edges. Role-0 code-7 values transfer as the complete source face-group partition. An authored role-1 tid channel resolves its one-based values through the owning Design texture table and transfers disjoint per-resource triangle assignments; zero remains untextured. The version-2 descriptor grammar is closed over its six byte, terminal-delta, f32-vector, and packed-direction forms. The complete typed Design graph retains each tessellation's ordered mesh-feature/body ownership, reciprocal wrapper, shared Body owner, Scene records, Design join identity, and container-local version-4 mesh UUID. A mesh tessellation has no neutral B-rep body ID because its source body is triangle geometry. Texture-resource maps resolve by GUID to embedded image assets independently of map order. Display meshes of B-rep bodies remain outside the arena.
  • Design intent: Partial. Document user parameters, sketch dimensions, and construction inputs transfer with source expressions, canonical evaluated values, dependency identities, local order, and full-fidelity native references. Coincident, midpoint, reflection-symmetry, curvature-continuity, orientation-preserving multi-pair offset, parameter-backed two-locus distance, parameter-backed angle-to-sketch-axis, single-locus radius and diameter, and parameter-driven rectangular-pattern relations transfer with typed operands. Rectangular patterns retain two unit directions, adjacent-instance spacing and count parameters, count including the seed, and complete instances whose fixed entity order and grid indices are proved by exact solved translations. Typed planar sketch curves form ordered closed profile loops when endpoint incidence is unambiguous, including bounded faces in branched line graphs. Nonplanar sketch lines, circles, arcs, and nonperiodic NURBS transfer into separate model-space spatial-sketch arenas with their owning Design placement applied. Planar and spatial Sketch nodes transfer the direct display visibility of the typed sketch container when that field is present. Extrude profile references distinguish an entire sketch, exact solved loop indices, exact bounded regions with immediate hole loops, and an unresolved native selection within a known sketch. Paired, repeated counted-, and other null-locus dimension frames retain their ordered sketch operands and role codes. Recipe-backed sketch dimensions transfer as native constraints with their complete ordered recipe-record operands. Every dimension without a typed locus or recipe frame transfers as a parameter-backed native constraint retaining its empty or payload-bearing companion. Indexed parameter scopes retain their family-local ordinal, serialized current and any serialized preceding ASM delta-state identities, ordered record-reference tables, state-linked cross-family feature dependencies, and exact authored feature-timeline position, including suppressed and state-null scopes. They transfer as neutral Sketch nodes and typed blind, two-sided, to-face, and target-shape Extrude nodes with profile-history dependencies, signed normal direction, independent first- and opposite-side draft angles, profile-plane, signed offset-profile-plane, or selected-face starts, signed termination-face offsets, and join, cut, intersect, or new-body result operation. Native scopes also retain their one-sided distance, one-sided to-face, and two-sided distance discriminators, typed body/profile/face/target-shape operand groups with ordered start and termination face roles, face operands resolved to exact face-recipe envelopes, counted i32 recipe nodes, and active B-rep candidate sets; neutral selected-face operands are disambiguated by membership in the scope's preceding history state. Ordered counted construction-operand groups, nested operand-identity chains and fixed persistent identities, ordered counted selection members resolved against persistent sketch geometry when possible, and typed edge Fillet, full-round Fillet, and Chamfer nodes with dimensional forms, center/side face semantics, and counted groups of ordered edge-recipe operands and complete i32 recipe programs also transfer. Fillet nodes retain each ordered edge group as a separate neutral radius assignment with its tangency weight. ASM history states, snapshot revision-reference runs, snapshot record revision identities, complete guarded per-state entity-version maps, fully normalized per-state RecordTables, re-derived stable topology and carrier graphs, and typed inserted/deleted/updated state transitions transfer. Unambiguous scope transitions trace changed topology and carrier slots through historical ownership to active body outputs. Design assignments, sketch-side records, construction recipes, body persistent-ID histories, variable-width face/edge design-reference tags, persistent references, MetaStream identities, and ACT change groups, table GUIDs, table references, channel registries, and document-root links transfer. Decode reports count native feature definitions, omitted feature scopes, retained native sketch constraints, omitted sketch relations, omitted dimensions, profile selections, face selections, edge-recipe selections, and lost edge selections independently for active and suppressed history. Unresolved dimension-companion operation semantics, recipe-to-B-rep identity, and unresolved Extrude selection identities remain open, so the Fusion feature history is not yet replayable. Configuration variants transfer with authored serialized order, active state, parameter and suppression overrides, material, and full native JSON. SurfaceTrim target faces, trimming paths, and selected removal-cell partitions transfer as typed operation semantics; the exact cell set remains explicit when it is not reducible to a canonical inside/outside region. Complete WorkPlane placement frames, including the referenced 362-byte and 373-byte forms, transfer as resolved datum-plane definitions; their construction-record references remain in the native scope. Surface extensions transfer their natural, tangent, and perpendicular boundary laws. SpirePrimitive scopes transfer as typed Coil nodes with exact driving dimensions, generated section, section placement, angular direction, taper, and result-body semantics. Compact CoilPrimitive scopes transfer as typed Coil nodes, including explicit origin, axis, and radial placement for the complete 432-byte or 442-byte eight-reference form; other placement forms retain their native construction. Ten-reference CoilPrimitive scopes transfer as typed Coil nodes with their Boolean or new-body operation and explicit matrix placement for the settled 572-byte matrix Boolean and 578-byte matrix new-body forms; the 450-byte Boolean form transfers its operation and retains the native construction when no matrix is serialized. Fixed-angle Revolve scopes transfer their operation, angle extent, axis, and sketch profile when the profile operand names a unique Sketch placement; unresolved profile groups remain native. Modern and legacy Scale scopes transfer as typed uniform body-scale nodes. Legacy five- and six-reference frames resolve their explicit point-data centers from centimetres to neutral millimetres, while modern fixed-center records remain native references. Body groups retain their exact construction identity when body-history resolution is incomplete. Single-edge sheet-metal EdgeFlange scopes, the class-keyed 591-byte full-edge multi-edge form, and the class-325/334 669-byte two-sided-per-edge form transfer as typed edge-flange nodes with resolved edge selections, distance or to-object height, angle, inside bend radius, inner-faces or outer-faces height datum, outside, inside, adjacent, or tangent-to-side bend position, and full-edge, symmetric, two-sided, or independent per-edge two-sided width. Multi-edge forms with other width-owner layouts remain native records. Single-edge sheet-metal Hem scopes transfer as typed hem nodes with their source edge selections, rule-derived bend radius, and the gap-length, rolled, or teardrop owner layout. Executed gap-length transitions project Flat or Open when their two bend carriers satisfy the settled radius invariant; otherwise the shared gap-length form remains explicit. Their direction projects from the signed carrier placement against the preceding source face, with ambiguous transitions unresolved. Surface-patch boundary components carry positional, tangency, or curvature continuity in source order. The neutral feature retains every known component condition and also exposes the uniform condition when all components agree. Fixed-path SurfacePatch boundary operands retain their alternate two-clause recipe structure. A unique shared-face boundary intersection resolves each operand to a preceding-state edge, and a complete ordered group resolves to one historical path with the scope selection retained as its native identity. Form scopes transfer their committed T-spline control cages into typed Form features through the serializer identity join or the validated compact one-cage envelope; T-spline topology, crease edges, grip coordinates, correspondence symmetry maps, symmetry plane frames, radial controls, and selector-preserving radial map pairs transfer into the subdivision arena. Radial map operands remain native until their namespace is resolved. Neutral-plane and parting-line Draft scopes transfer as typed draft nodes with their exact signed angle. Neutral drafts retain drafted-face and neutral-plane selections; parting-line drafts retain drafted-face and parting-tool selections, the WorkPlane pull direction, and the WorkPlane feature dependency. The pull direction composes the signed-angle sign with the oriented neutral carrier, and the neutral outward value is true for a negative signed angle. Any face recipe that does not resolve to active B-rep faces retains its native selection and the feature is reported incomplete. SplitFace scopes transfer typed face targets with either a Sketch path or one or more ordered WorkPlane tools. Extrusions driven by prior solid faces retain exact state-qualified profile faces when every counted selection member corroborates one owner face. Work-point records retain typed vertex, circle-center, two-edge, three-plane, edge-plane, and path-fraction construction rules with their exact source input arity. These rules project as neutral datum-point constructions while retaining the solved position. Edge-valued inputs retain their complete recipe operands and history context. Vertex-valued inputs resolve their persistent face references to an exact state-qualified historical vertex. Plane-valued inputs resolve to exact WorkPlane scopes and neutral feature dependencies through persistent identities. Other rule codes and counted inputs remain lossless native values.
  • Product structure: Partial. Body transforms and root-component records transfer. .f3z archives merge multi-document XREF placements into the root document. Intra-document multi-component structure and constraints remain open.
  • Presentation and metadata: Partial. Linked source attributes, Protein appearance assets, material properties, body bindings, and per-body display visibility transfer. Appearance assets transfer from every document, including a document that serializes no B-rep stream. A document-local catalog that no body or face assignment names is a complete transfer; a serialized assignment that resolves to no topology is an appearance loss carrying the decoded asset count. Body appearance bindings resolve through an exactly framed named or bare typed owner, a browser-node GUID, or a browser-node reference, so a body carries its assigned colour in both Design segment generations. Face appearance bindings resolve through the B-rep face material attribute in both Design segment generations. External material-library display names and some schema fields remain unresolved. Canvas timeline objects with a structurally complete image-plane binding transfer as neutral reference-image features carrying their image asset, plane frame, opacity, and plane-local bounds; objects without a resolved binding remain identity-preserving native records and report an attribute loss. Decals transfer as presentation timeline objects. Neither counts as an incomplete shape-history operation.

Write and round trip

  • Native write: Partial. An unchanged retained source archive writes byte for byte. The writer patches model points, common analytic and NURBS B-rep curves and surfaces, rational/non-rational pcurves, procedural caches, sketch geometry, constraints, history fields, design records, supported ACT GUID, channel, registry, and root fields, and supported appearance properties in their original records. Source-less generation writes multi-body B-reps containing solid, sheet, wire, and mixed-dimensional general topology with analytic or rational/non-rational NURBS carriers; exact, compound, ruled, sum, revolution, offset, rolling-ball, taper, loft, G2-blend, and translational-extrusion surface constructions; exact-cache, compound, deformable, helix, vector-offset, and subset curve constructions; inline rational/non-rational NURBS pcurves; placements; document tolerance metadata; direct body/face color attributes; body/face/edge persistent-design tags; coedge-to-sketch provenance; typed ASM history; Design object and construction streams; sketch geometry and constraints; and Protein appearances with body bindings. Source-less ACT generation is rejected because it does not synthesize the required MetaStream record registry.
  • Write limits: General writing requires a retained source archive and the original entity and record layouts. Source-less generation supports multiple placed bodies, regions, and shells with plane, cylinder, cone, sphere, torus, or rational/non-rational NURBS faces; multiple loops; shared radial edges; line, circle, ellipse, point-degenerate, or rational/non-rational NURBS edge curves; inline rational/non-rational NURBS pcurves; cache-local tolerant-coedge NURBS use curves; face-less wire bodies with chained regions and shells; edge-ring and point wires; and mixed face-and-wire shells containing either wire form. Retained cache-local tolerant-coedge NURBS use curves support structure-preserving geometry edits. Edits outside the listed fields are rejected.
  • Procedural write invariant: One curve has at most one procedural construction. Exact-cache, compound, deformable, helix with or without a solved cache, vector-offset, surface-offset, spring (including conditional null-carrier ranges), subset, ranged and early-close projection, silhouette/taper-silhouette, two- and three-surface intersection, two-sided offset, and prefix-only blend/surface/parametric/skin definitions with paired analytic/NURBS surface and NURBS UV supports serialize with their native construction fields, child carriers, role fields, and solved caches. Scalar offset and blend-spine definitions remain rejected source-less until their external fields can be emitted without semantic loss.
  • Round trip: Partial. Generated byte fixtures cover byte-exact replay and each writable geometry, history, Design, sketch, ACT, and appearance family.

See formats/f3d.md, formats/f3d-open-items.md, and formats/protein.md.

Siemens NX .prt

Kernel: Parasolid in an SPLMSSTR container

Ladder: L1.

Dialect Read Write
nx:splmsstr detected none
nx:legacy-cfb detected none
nx:unknown refused none

Connected B-rep on single-body, RMFastLoad-selected, and terminal-feature-lineage-resolved body images shows as extras. Feature and history transfer above that subset shows as extras until L4 coverage gates close. Unresolved multi-partition history blocks L3.

Legacy CFB directory streams are catalogued at their declared logical byte spans, so the existing OM, structure, external-reference, and toggle extractors can inspect them through the same bounded entry interface as SPLMSSTR streams.

Read profile

  • Container and versions: Partial. The codec decodes the SPLMSSTR directory, extracts and classifies embedded Parasolid partition, deltas, and related streams, resolves short and extended segment wrappers from their encoded extension lengths, retains fixed-ID NX object-model entities at their external index boundaries, retains offset-only object-model column storage as distinct bounded blocks, and exposes strictly framed JPEG preview dimensions and asset identity.
  • Geometry: Partial. Points, analytic surfaces and curves, typed B-spline surfaces and curves, supported type-133 trimmed curves, and exact OFFSET_SURF and BLEND_SURF procedural carriers transfer into IR. A procedural carrier links bidirectionally to its typed construction. Nested OFFSET_SURF carriers evaluate recursively over analytic, NURBS, or evaluable procedural supports with cycle rejection. BLEND_SURF evaluation remains open where finite domains or branch selection are unresolved.
  • Topology: Partial. Active body-image bands emit connected body, shell, face, loop, fin, edge, and vertex graphs with ownership, orientation, trimming, and incidence. A typed edge carrier remains attached when its serialized trim limits fail endpoint validation; the unvalidated parameter range is omitted. Validated intersection support-UV charts attach as coedge pcurves with their parameter ranges and fit tolerances. Missing and sentinel-bearing support lanes are reconstructed atomically by inverse parameterization only when every point forward-evaluates within the effective chart tolerance; nested procedural blend spines add their cache-fit tolerance and the dependent curve records the resulting bound. Carriers with exactly equal parameterization share a complete lane. Finite-tolerance EDGE records with a null curve pointer transfer as procedural tolerant-intersection carriers over their two adjacent face surfaces; the edge vertices bound the relation. Non-null shell BODY and REGION references supply ownership identity when either record is omitted; shell layouts use either a FACE chain or a face anchor with FACE back-references. Solid and sheet kinds derive from edge incidence. Inline Parasolid coordinates are in part-model space and bodies have identity placement. A validated partition shell defines a current topology image; paired deltas topology records remain revision history. Supported non-topology replacements and tombstones use the last event for each exact key, except that a surviving topology reference keeps its partition point, curve, or surface carrier when no later replacement exists. RMFastLoad selection intersects membership object IDs with topology node IDs and retains every body image whose complete nonempty FACE, EDGE, and VERTEX node-id set is a subset of the active object-id set. If no emitted body image has that complete-set relation, selection declines. When membership is incomplete, complete feature-history primary writers and later Boolean tool consumption select terminal bound partition images atomically. Feature-history composition remains unresolved when any emitted image lacks that complete lineage.
  • Tessellation: Partial. Embedded JT 9 shape-LOD segments decode lossless and uniformly quantized coordinates, lossless and Deering normals, lossless and RGB/HSV-quantized colors, up to eight lossless or uniformly quantized texture-coordinate channels, and binary vertex flags. Topological dual-mesh connectivity and corner attribute indices reconstruct exactly. Logical shape-node to late-loaded payload ownership resolves through the property table. Common group-derived and instance-node paths accumulate affine transform attributes; each distinct root-to-shape path emits a tessellation with ordered instance provenance. Nonnegative-group triangles transfer in document units with transformed seam-preserving normals and codec-owned RGBA, texture, and flag channels parallel to deindexed vertices. Body association remains unresolved.
  • Design intent: Partial. Feature-history record areas project ordered neutral features and retain exactly bounded operation records, byte-exact labels, and four object-index slots. DATUM_PLANE and DATUM_CSYS labels project as typed datum families with explicitly unresolved frames. Non-null header slots bind to uniquely addressed offset-only input blocks. Exact reuse of a resolved datum-plane or datum-coordinate-system construction block by a later operation input creates an ordered neutral feature dependency without assigning frame roles. Uniquely resolved parameter declarations appear as neutral parameter content on every consuming operation in serialized input order. Primary-body fields form ordered lineage dependencies and bind surviving segment body images as feature outputs; Boolean features also depend on the latest ordered tool-body writers. Unite, subtract, and intersect operations project as typed body-combine features with ordered native target/tool selections. SEW operations project as typed body-sew features; complete validated body operands supply the ordered body selection, while incomplete operands leave it unresolved. TRIM BODY operations project as typed body-trim features; one primary body and complete validated body operands supply the ordered target and tool selections, while incomplete operands leave both selections unresolved. The retained side remains unresolved. TRIMMED_SH and EXTEND_SHEET project as typed surface-trim and surface-extension operations with unresolved input selections and construction controls; output ownership does not identify their pre-operation operands. EXTRUDE operations project as typed extrusions; exactly one complete construction profile supplies its native profile identity, while absent or ambiguous profiles remain unresolved. A first-writer extrusion with one transferred solid or sheet output projects as new-body; later, wire, mixed-dimensional, multiple, and absent writer states remain Boolean-unresolved. Direction, termination, and draft remain unresolved. OFFSET operations project as typed surface-offset features; one output body with owned offset carriers at one exact carrier-normal distance supplies the support-surface selection. Each support resolves to a neutral face when ownership is unique and distinct; uniform face sense then supplies the face-normal-relative neutral distance with orientation-corrected sign. A single solid THICKEN_SHEET output body whose owned offset carriers have one exact finite nonzero signed distance projects one-sided thickness, while matched opposite equal-magnitude carrier sets over identical supports project twice that magnitude and a both-sided operation. The same support-face resolution rule applies; uniform agreement between a one-sided distance sign and resolved face senses projects the forward or reverse side. A single BLEND or FACE_BLEND output body whose owned blend carriers are circular projects with an exact common constant radius or a retained structural radius form. Complete bipartite support-surface graphs with unique face ownership project as resolved face blends. Other BLEND support graphs retain an unresolved edge selection as fillets; other FACE_BLEND support graphs retain unresolved face selections without changing family. BLOCK projects as a typed rectangular primitive; complete dimensions project in native order. With those dimensions, exactly one single-region, single-shell solid output body with a complete owned three-band orthogonal planar extent system supplies the derived right-handed rigid placement when exactly one dimension-to-band permutation matches. SIMPLE HOLE projects as a typed simple-hole operation; a Hole_GeneralHole_Simple_Through_* payload template projects through-all termination. A complete single construction group partitions through-hole operations by exact output-body ownership; each output is one connected solid region and shell, and equal-cardinality uniform owned bore cylinders supply one permutation-invariant diameter per body. Distinct output bodies may carry distinct diameters. The complete ungrouped operation set uses the same ownership rule. The complete HOLE PACKAGE operation set uses that ownership and bore-bijection rule without a simple-hole template. Every body partition with one hole operation and one bore supplies a canonical model-space axis position; common parallel axes supply direction independently of diameter correspondence. Complete output-body-owned pairs of coaxial conical boundary faces supply one common entry-and-exit chamfer diameter and included angle per body. Each neutral simple-hole feature owns its exact native template, redundantly witnessed scalar lane, and resolved construction-block references through source properties; entry-face ownership remains unresolved. HOLE PACKAGE retains unresolved form and entry-face fields. RIB and CHAMFER project as typed feature families with unresolved operands and dimensional fields. Pattern Feature and Pattern Geometry project as typed patterns with unresolved seed and transform fields. SKETCH operations project as ordered sketch history nodes with unresolved coordinate space and retain a typed sketch record joining the exact operation record to its resolved native input blocks in header-slot order. Named points bind through exact shared blocks or a unique same-store predecessor span; coordinate-pair records retain native sketch entities only when no stronger typed sketch entity graph exists, while solved sketch placement, remaining entity roles, profiles, and constraints remain unresolved. A separate named-point graph does not merge with coordinate-pair records without an explicit pair-to-entity relation. Segment tuples bind both serialized object-index aliases of each partition or plain cached-body image; either alias resolves feature selections and outputs to neutral body IDs when the image remains in the transferred model. Other named operations project as native features until their inputs are complete. Typed numeric expressions retain object identity, owning OM record, name, exact expression text, declared native unit, ordered exact-name parameter dependencies, and evaluated values for context-free and acyclic same-unit dependency arithmetic. Known millimeter, inch, and degree units normalize to canonical lengths or angles; other units remain native-only. Named arrangements retain ordered configuration names and default state. Exact agreement between the default arrangement and the part-level active-arrangement attribute assigns every selected current body to that active configuration; inactive configuration body states remain unresolved. Complete intermediate-body relations and other operation semantics remain open.
  • Product structure: Inspect. Every indexed EXTREFSTREAM record retains its exact boundary and digest. Handle-set records additionally retain their declared counts, four raw ID slots, normalized persistent handles, closing-duplicate form, opaque-tail lengths, and exact byte offsets. Their four ID slots resolve atomically through the same-stream string table; slot zero names the child .prt, slot two supplies its directory, and each complete handle-set record binds to those child records. Equal persistent handles create explicit cross-stream identity edges between EXTREFSTREAM records and bounded OM records. End-anchored child-part names and paths transfer as ordered typed native records and also appear in source dependency metadata. Assembly graph instances, placements, and constraints remain open.
  • Presentation and metadata: Partial. Every completely bounded Parasolid deltas transmit header, two- or four-null-reference stream trailer, full record, compact tombstone, BODY revision envelope with its bounded state tail, count-selected term_use numeric tail, maximal tagged-reference lane, four-reference state packet, reference-marker packet, and inline REGION schema declaration retains its stream, source bounds, identities, and decoded structural fields. Maximal inflated-stream spans outside those events retain exact bounds and digests. Length-bounded Parasolid attribute-class declarations retain stream-local class and field-record identities, exact printable class name, declared field count, typed primary storage, ordered catalog references, variant header words, and inflated-stream offset. Framed type-81 lists, type-82 integer lanes, type-83 finite binary64 lanes, and type-84 printable values retain exact identities, ordered reference slots, revision records, and byte spans. Every uniquely matched type-81 class discriminator resolves to its exact same-stream type-79 definition XMT independently of topology ownership. Topology records retain non-null attribute-list ownership. Unique topology-to-list and list-to-value chains transfer ordered integer, finite-double, and printable-string lanes to shell, face, loop, edge, coedge, and vertex source attributes with class-qualified family-and-ordinal names. Class-specific field assignment, BODY state-tail field roles, tagged-reference field roles, reference-state and reference-marker field roles, REGION schema field roles, colors, materials, and other presentation semantics remain unresolved.

Write and round trip

  • Native write: None.
  • Round trip: None.

Remaining geometry work includes unresolved procedural-intersection branches, freeform NURBS-offset blend spines, and other unsupported record families. Remaining structural work includes unmatched tombstones, multi-partition feature composition, assembly records, and NX object-model field serialization.

See the format specification, coverage contract, and open items.

CATIA V5 .CATPart

Kernel: CGM

Ladder: L1.

Dialect Read Write
catia:standard-nested L1 none
catia:fbb-only L1 none
catia:e5-stream L1 none
catia:zero-entity L1 none
catia:float-packed-inner-no-fbb L1 none
catia:inner-no-directory L1 none
catia:unknown unclassified-recovered none

Geometry on the standard-nested band shows as extras. L3 requires connected topology across admitted files. Current topology depends on resolved trim, support, and endpoint assignments.

Read profile

  • Container and versions: Partial. The codec decodes V5_CFV2 containers, enumerates named outer and inner directory streams with reconstructed extents, inventories every bounded outer FINJPL block by stored name/type/family, reads the saved-by CATIA version/release/service-pack/hot-fix tuple, enumerates CATIA document references, and distinguishes standard-nested, FBB-only, zero-entity, float-packed, E5, and inner-without-directory layouts.
  • Geometry: Partial. Standard-nested and FBB-only files transfer vertices, bridged planes, signed-axis analytic carriers, supported edge curves, consolidated NURBS carriers, uniquely domain-bound constant-offset constructions, exact two-support extrusion constructions, support-bound result/carrier/support surface closure, and fit-free rolling-ball surface jets. Standard binary32 cylinder, cone, sphere, and torus face carriers refine to complete consolidated binary64 frames when quantization selects one same-family record; repeated face carriers may share that exact source. Consolidated class-0x60 group openers retain their type code after enforcing the fixed framing opcode. Class-0x61 records retain their complete counted reference/tail form or long-form prefix, monotone member lane, five persistent references, and scalar. Consolidated cone-face records retain their complete reference-and-control program, angular scale, and half-angle. Their parameter-space point records retain all four prefix selectors and each exact finite scalar layout. Each chart binds its immediately following complete point run in serialized order; mixed class-0x18 runs remain unbound atomically. Consolidated revolution records retain their profile allocation identity, right-handed unit axis frame, full-turn angular chart, and profile interval. A profile interval selecting exactly one consolidated circle transfers a placed analytic directrix and neutral surface-of-revolution construction; absent and ambiguous matches remain native. E5 one-pcurve boundary supports lift analytic isoparametric lines and circles into exact 3D edge carriers and retain general nonplanar pcurves as exact parametric surface-curve constructions. Zero-entity streams transfer independently complete analytic and NURBS surface carriers and retain each carrier's complete face-local support tape, including exact inline UV endpoint pairs where stored. Freeform face aliases and unbridged planes remain unknown.
  • Topology: Partial. Standard-nested and FBB-only files emit a connected body, shell, face, loop, coedge, edge, and vertex graph when trim, support, and endpoint assignment resolve. Reference-closed E5 graphs emit the same connected common-IR topology. Zero-entity topology retains a complete framed-record identity inventory, positionally aligned face, loop, and surface-support rosters with ordered logical members, loop classes, and absolute coedge senses, exact edge-stride references, positional oriented-use pairs, and counted vertex incidences in separate native registries. Edge strides atomically bind both adjacent support records, and counted incidence records bind their adjacent vertex owners. Loop-to-oriented-use, oriented-use-to-incidence, physical endpoint, and body/shell binding remain unresolved. Incomplete endpoint quotients and owner graphs decline atomically to disconnected geometry.
  • Tessellation: None.
  • Design intent: Partial. A formula with LENGTH, ANGLE, Real/R, or Integer/I scalar types transfers each uniquely bound scalar input independently of its sibling bindings and result closure. A compound relation-program instance whose selected typed expression and source symbols completely bind every distinct declared input transfers each compatible named scalar or unset input independently without assigning an output. A legacy named scalar with a unique acyclic descriptor chain ending in one of the same admitted numeric types transfers independently; a unique zero-input legacy relation replaces its generated literal when typed evaluation agrees exactly. Evaluated string and signed-integer packets transfer independently from their intrinsic packet types when their exact evaluated-value name production is present and no type descriptor competes with that packet type. A closed formula graph, including a zero-input constant formula, also transfers its resolved outputs when its arithmetic expression parses completely, evaluates with valid dimensions, and agrees exactly with any stored result. Formula outputs retain their defining expression when consumed downstream, including typed results without a saved evaluation. The source formula text and first-occurrence dependency order remain exact; evaluated lengths use millimetres, angles use radians, real values are dimensionless, and integer values require an exact signed 64-bit integral scalar. Generated input literals are marked derived. Standalone design objects consisting entirely of one exact empty principal-plane declaration class transfer built-in top, right, or front reference-plane history nodes. Sketch identity, placement, profiles, geometry, and constraints remain unresolved. Cyclic formula components, ambiguous input bindings, evaluated typed string relation incidence, remaining feature families, configurations, unresolved outputs, and incomplete relation outputs remain native.
  • Product structure: None.
  • Presentation and metadata: Partial. The summary-information JPEG preview transfers byte-exactly with its dimensions. Framed visualization value blocks retain source-schema identity, ordered presentation values, and exact encoded fields. Neutral visualization bindings, persistent tags, attributes, materials, and appearance bindings remain outside the IR.

Write and round trip

  • Native write: None.
  • Round trip: None.

Remaining work includes endpoint incidence for additional variants, orientation signs, pcurve attachment, spline edge curves, remaining persistent edge/cache bindings, attributes, and the consolidated-stream tag resolver.

See the coverage contract, format specification, and open items.

Creo Parametric .prt

Kernel: Granite, serialized through PSB

Ladder: L1.

Dialect Read Write
creo:depdb L1 none
creo:nd L1 none
creo:legacy-ascii detected none
creo:unknown unclassified-recovered none

Incomplete model-space coverage across analytic and spline carrier families blocks L2. Exact plane components, selected cylinders, placed sketches, and native design records show as extras.

Read profile

  • Container and versions: Partial. The codec detects #UGC:2, enumerates sections, identifies ND and DEPDB layouts, decodes supported PSB compact integers and floats, expands Unix-compress payloads, and retains complete counted double_xar scalar dictionaries with literal values and unresolved reference slots.
  • Geometry: Partial. ActDatums and VisibGeom plane carriers transfer in model space. Finite MdlRefInfo lines and circular records transfer as model-space carriers; named conic records retain their endpoints, coefficients, parameters, and complete local-system slots without premature conic-family classification. Visible and nonvisible surface and curve namespaces remain separate and retain stable native identities, raw type bytes, feature ownership, topology links, exact parameter bodies, named prototype fields, and source offsets. Named surface prototypes, bounded curve parameter records, and tabulated-cylinder cubic curve replays retain typed named parameter wrappers, exact parameter and packed control-point bodies, and decoded two-coordinate control points where complete. Complete named ND plane and torus-family prototypes transfer their adjacent first positional instances from local frames and family parameters. Complementary five-coordinate hemisphere envelopes sharing a zero-major-radius prototype transfer as placed spheres. Other tagged positional torus/sphere radius overrides and complete terminal outline extents retain typed row-local fields until the same positional body establishes a complete model-space placement. Cylinder and cone prototype frames remain templates until a positional construction or feature placement establishes model space. Unbound straight geom_type = 2c rows transfer as planes and extrusion constructions. Replay-bound rows with a unique directrix-to-frame span assignment transfer as cubic NURBS curves, tensor-product extrusion surfaces, and extrusion constructions; other frame variants remain native. Topology-bound cylinders transfer when cap records establish their complete placement. Complete saved-section lines, arcs, and circles generate placed plane or cylinder carriers when the order and generated-entity tables bind them to a same-family surface owned by the linear sweep. Resolved linear sweeps also evaluate closed-profile vertex line carriers independently of extent trimming. A type-20127 zero-offset placement instruction resolves the blind class-917 circular section against its standard datum; the generated cap envelope aligns its saved circle with the model-space cylinder carrier. A class-913 slot fillet with two independent equal-gap parallel support pairs transfers its unique tangent cylinder. In a four-entry round table, a rowless third face inherits the complete cylinder equation of the following materialized cylinder under the schema-913 sibling invariant. A uniquely owned DEPDB section with one complete local-system frame uses its stored local z axis and origin as the section plane; this places its sketch against the stored perpendicular reference plane. Resolved rotational sweeps evaluate unbounded plane, cylinder, cone, sphere, torus, tensor-product NURBS, and non-axis profile-vertex circular orbit carriers independently of unresolved angular trimming. Explicit source-entity identifiers bind generated carriers to native surface rows. Feature-generated carriers are evaluated before native intersection curves and topology. Plane/plane intersections transfer as lines; unique plane/cylinder intersections transfer as circles, ellipses, or tangent lines; a two-generator plane/cylinder secant transfers when solved native endpoints select exactly one generator; internally or externally tangent parallel cylinders transfer their single common generator. Placed circular cones contribute perpendicular-plane section circles, tangent-plane generator lines, endpoint-selected two-generator apex sections, endpoint-selected coaxial-cone circles, endpoint-selected coaxial-cylinder circles, endpoint-selected coaxial-torus circles, and endpoint-selected coaxial-sphere tangent or secant circles. Placed spheres participate in plane-intersection and sphere-intersection circles; an equal-radius cylinder whose axis contains the sphere center contributes their single equatorial circle. Axis-normal planes contribute endpoint-selected tangent or secant torus circles. Coaxial cylinders, axis-centered spheres, and coaxial tori contribute endpoint-selected tangent or secant torus circles. Other secant cases with multiple components remain unresolved. Other analytic and spline families remain incomplete. Invariant-complete positional conic records additionally transfer as model-space ellipses. Strict-secant parallel cylinders transfer one common generator when solved native endpoints select exactly one of the two candidates. Analytic carrier pairs with one derived curve component transfer without solved endpoints; present endpoints must agree with that component. Multiple components require endpoints that select exactly one candidate. Every uniquely identified visible row without a solved carrier retains its native identity and containing geometry record as an explicit unknown carrier. Positive-ratio elliptical cones transfer tangent apex generators and endpoint-selected two-generator apex sections. Coaxial positive-ratio cones with proportional transverse quadratic forms transfer unique or endpoint-selected axis-normal elliptical sections, including reciprocal-ratio sections with exchanged principal frames. A cylinder through a sphere center transfers its equatorial tangent circle or one endpoint-selected secant circle. Third-plane intersections resolve vertices across every transferred multi-component analytic circle family when exactly one point remains. Planes containing a torus axis contribute the two exact meridian circles; paired solved endpoints select one component. Solved native edges on derived intersection lines use start-anchored unit carriers and [0, length] parameter intervals. Exact native line carriers retain their source parameterization and use projected endpoint intervals. Complete positional and uniquely face-bound labeled UV endpoint pairs transfer as straight pcurves when their face-surface images uniquely agree with the solved coedge traversal. Their mapped midpoints select minor, major, or full-turn parameter intervals on circular and elliptical native edges; adjacent face paths must agree. A periodic conic used only by one-edge closed native loops uses one full period from its seam vertex when no native pcurve candidate is present. Parabolic edges recover endpoint parameters from their focal frame. Hyperbolic edges recover endpoint parameters after paired vertices select exactly one of the two analytic branches. Degree-one nonperiodic NURBS edges algebraically invert positive-weight rational line spans and transfer any bounded interval whose solved vertices each have one global parameter. Higher-degree carriers use their full intrinsic knot domain when solved vertices uniquely match its endpoints. A positive-weight periodic NURBS used only by one-edge closed native loops uses its intrinsic domain when both bounds evaluate to the seam and no pcurve candidate exists. Exact line, conic, and NURBS edges on solved planar faces project into exact plane-chart pcurves when no native pcurve candidate is present, preserving the 3D carrier parameterization and edge interval. Coaxial constant-parameter circular edges on cylinders, spheres, and tori, plus circular or elliptical edges on matching cone parallels, project into exact affine surface-chart pcurves under the same absence rule, preserving their native angular parameter and edge interval across either cone nappe and signed torus ring branches. Exact sphere and torus meridian circles project to constant-azimuth affine pcurves, preserving their native angular parameter and edge interval through sphere poles. Exact generator lines on cylinders and positive-ratio cones project to constant-azimuth affine pcurves, preserving arbitrary nonzero native line scales and edge intervals. Positive-ratio elliptical cones participate in exact point containment, axis-normal and oblique ellipse, parabola, and hyperbola sections, and plane/plane/cone vertex solving; rotational-symmetry reductions remain restricted to circular cones.
  • Topology: Partial. Native half-edges and closed loops decode. Canonical curve adjacency rows retain their feature owner, orientation bytes, incident faces, next-edge links, and source offsets as native records. The first resolved linear section sweep evaluates into a connected body, region, shell, correctly oriented cap and side faces, loops, coedges, edges, and vertices with exact plane and cylinder pcurves. It supports one line/arc outer profile with pairwise-disjoint, unnested, oppositely oriented line/arc holes; analytic line/line, line/arc, and arc/arc predicates reject touching or intersecting boundaries. A one-circle profile evaluates into two planar caps and one cylindrical side face with closed circular edges, seam vertices, constant-offset side pcurves, and paired radial uses. A full-turn, one-profile line/arc revolution evaluates into a connected solid across planar, cylindrical, conical, spherical, ring-torus, and spindle-torus faces. Axis vertices collapse; off-axis vertices become closed circular edges with exact analytic pcurves and paired radial uses. Later sweeps remain withheld until their Boolean operation is resolved. Native components with uniquely solved plane/plane/plane, plane/plane/cylinder, plane/plane/cone, plane/plane/sphere, plane/sphere/sphere, plane/coaxial-cone/cone, plane/coaxial-cone/cylinder, plane/coaxial-cone/torus, plane/coaxial-cone/tangent-sphere, plane/equal-radius-coaxial-cylinder/sphere, plane/axis-centered-tangent-sphere/torus, plane/plane/axis-containing-torus, plane/tangent-coaxial-tori, plane/plane/tangent-torus, or plane/tangent-cylinder-pair vertex coordinates also transfer as connected topology. Planar multi-loop faces require one strict containment outer boundary and transfer that loop as outer with every contained loop marked inner. Single-loop native faces transfer their sole loop as outer. Native non-planar faces transfer only with one loop until their byte-backed multi-loop discriminator is decoded. Multiple analytic intersection roots remain unresolved, and unsolved carriers stay linked opaque geometry.
  • Tessellation: Partial. Complete named prim_tristripsetwithatt position arrays transfer as triangle strips with alternating winding. Primitive arrays without a complete position lane or persistent geometry binding remain native records.
  • Design intent: Partial. Ordered stored feature-operation states and their current-state projection, the configuration driver-table root pointer, dependencies, the implicit AllFeatur entity/reference graph and mixed generated-entity tables, order-validated visible-to-nonvisible surface replay associations, placed and unplaced section sketches and their ordered planar-sketch history nodes, source-offset-scoped repeated sketch snapshots, typed and opaque segtab entities including type-10 circles, ordered saved lines, arcs, circles, and splines, typed horizontal, vertical, coincidence, point-on-object, tangency, perpendicular, parallel, equal, axial and central symmetry, same-coordinate, and radius/diameter constraints, snapshot-owned dimensions including geometry-free dimension tables and radius/diameter display semantics, curve-equation programs with scalar operators and standard mathematical functions, and cylindrical native-axis helix semantics transfer as typed or native design records. A resolved base linear section sweep carries its resolved sketch profile, direction, blind, symmetric, or two-sided extent, new-body operation, solid construction state, and evaluated output body. A resolved circular section sweep carries its resolved sketch profile, direction, blind extent, Boolean effect, solid construction state, and evaluated output body. A uniquely placed DEPDB rotational section carries its profile, axis, Boolean effect, solid construction state, native definition reference, full-turn angular extent when its angle choice is present, and evaluated output body. Repeated identical full-turn sequences remain separate native regeneration-state records. A class-923 datum without an owned plane row uses its uniquely owned definition's unique complete local-system frame when its stored x and z axes define a valid datum chart; incomplete sibling frames do not compete. Solver-only section entity identifiers transfer as shared native construction entities, preserving complete incidence references without assigning an unsupported geometry family. Current feature display names preserve the stored id or ID form while excluding the separate one-byte state prefix. Named datum-plane, draft, fill, surface-merge, boundary-surface, protrusion, extrusion, subtractive cut, and revolution families retain their exact operation family when their construction inputs remain unresolved. A current recipe supplies the linear or rotational construction and Boolean effect independently of the display-name family. Row-only class-927 and class-946 features remain typed drafts and surface merges when their display names and operands are absent. Non-rotational class-916 and class-917 section sweeps remain typed subtractive and additive extrusions when placement or extent operands are incomplete. Sketch entities reference model-space curve carriers only when a unique section placement materializes that carrier; unplaced entities and isolated sketch points retain no fabricated curve reference. Boolean classification treats only actual body outputs and prior new-body sweeps as established material; consuming operations do not fabricate a body when their source history is partial. The final stored state for each feature supplies its active recipe, Boolean effect, schema parent, and source tag while every preceding state remains an ordered native regeneration record. A nonzero geometry-row generator identity with no operation, feature row, or datum definition transfers as stored geometry. Unique feature-owned class-200 materialized surfaces also declare feature-result face identities; hole placement, thicken, and knit selections use those generated identities only with the corresponding producer dependency.
  • Product structure: Partial. A unique native model-name header defines one part product and one root identity occurrence. The product owns every transferred body. Assembly component definitions, child occurrences, placements, and constraints remain open.
  • Presentation and metadata: Partial. Container attributes transfer as source metadata; decode-coverage counts transfer as the decode report's coverage census. Materials and display data remain open.

geometry_transferred is true when any complete model-space carrier transfers.

Write and round trip

  • Native write: None.
  • Round trip: None.

Remaining geometry work includes per-instance analytic parameter bindings, feature-generated carrier evaluation, dense curve and spline bodies, and complete face-instance placement.

See formats/creo_prt.md and formats/creo_prt-open-items.md.

STEP Part 21

Model: ISO 10303-21 clear-text exchange with AP203, AP214, or AP242 application data

Ladder: L9.

Dialect Read Write
step:ap203-e1 L9 verified
step:ap203-e2 detected emitted
step:ap214 L9 verified
step:ap242 L9 none
step:ap242-e1 detected emitted
step:ap242-e2 L9 verified
step:ap242-e3 detected verified
step:part28-xml refused none
step:ap242-bo-model-xml refused none
step:part26-hdf5 refused none
step:unknown unclassified-recovered none

Part 28 XML, Part 26 binary/HDF5, and AP242 BO-Model sidecars are outside the declared bands. ZIP packaging is an extra read profile for the ISO-10303.p21 root; subsidiary graph composition is outside the declared band. AP203/AP214 mark constructs their schemas cannot carry as inapplicable. Part 21 exchange documents have no originating feature replay histories, sketch-constraint systems, or assembly mates, so L4, L6, and the L7 mate requirement are inapplicable.

Read profile

  • Container and versions: Band-wide. The codec detects clear-text exchanges, parses headers and all DATA sections, parses edition-3 ANCHOR, REFERENCE, and SIGNATURE sections, reports schemas and external dependencies, and names every undecoded entity family.
  • ZIP packaging: Extra read profile. The codec recognizes a PKZIP 2.04g stored or Deflate archive with the exact ISO-10303.p21 root, reports every physical member, validates root-relative REFERENCE paths, and decodes the root exchange. It does not merge subsidiary exchange graphs.
  • Geometry: Band-wide. Millimeter-normalized points, placements, analytic curves and surfaces, polylines, rational and non-rational NURBS, parameter- and Cartesian-trimmed curves, composite and surface curves, 2D pcurve replicas, offsets, sweeps, revolutions, curve-bounded surfaces, and geometric sets transfer with their unit and orientation semantics.
  • Topology: Admitted construction set. Schema-valid fixtures cover manifold and faceted B-reps, void and sheet shells, face-based surface models, shell- and edge-based wireframe models, geometrically bounded surface sets, oriented shells and faces, seam edges, subedges, connected subsets, polygon loops, edge loops, and singular vertex loops. These constructions transfer through connected body, region, shell, face, loop, coedge, edge, vertex, and pcurve ownership. Records claimed only by a failed mandatory root remain named opaque, and downstream product bindings omit the uncommitted body. Other STEP topology families remain outside this admitted construction set.
  • Tessellation: Band-wide where carried. AP242 shared coordinate lists, local point-index tables, tessellated curve sets, normals, faces, strips, fans, shells, solids, product-linked tessellated shape representations, exact-body links, tessellated annotation descendants, and uniquely repositioned tessellation placements transfer without duplicating exact solids. Conflicting placements retain source coordinates with an explicit loss.
  • Design intent: Inapplicable. These application protocols exchange solved product shape and structure.
  • Product structure: Band-wide. Product identity, occurrences, mapped items, occurrence-specific mapped placements, relative placements, context-dependent transformations, and named external document/resource dependencies transfer. Mapped items directly owned by a drawing graph, or contained in its geometric or tessellated item sets, remain presentation mappings and do not alter product body placement. Repeated child uses resolve through their usage-owned shape representations; a source without that occurrence identity remains explicitly ambiguous.
  • Presentation and metadata: Band-wide. Layers, direct and overriding styles, colors and surface transparency on topology, exact geometry, tessellation, geometric sets, null styles, semantic dimensions/tolerances/datums/datum targets and datum-target bases, resolved geometric-item PMI targets, presentation annotations including explicit occurrence visibility and annotation-placeholder occurrences with leader lines, validation properties, limits-and-fits classes, and the core drawing graph (definitions, revisions, sheet revisions, views, sizes, draughting models, callouts, and placeholder associations) transfer. Drawing relationships transfer when a source has one neutral, named opaque, or source-native identity; a terminal source-typed target without a neutral identity receives an identity-only record in the STEP drawing_targets native arena. Multiple identities remain in the raw source parameter with drawing.relationship-target-ambiguous. Context-dependent style branches without a selected neutral presentation context retain source references with an explicit loss. Unmodeled application records and drawing graphics remain named opaque records with identity and references.
  • Byte accounting: Band-wide. Every input byte is structural, typed, or part of a named opaque record; unclassified bytes fail the accounting invariant.

Write and round trip

  • Native write: Semantic. The writer selects AP203 edition 1 or 2, AP214, or AP242 edition 1, 2, or 3 and declares the exact target schema. It emits source-less documents and typed edits for analytic and NURBS geometry, connected solid/sheet/wire topology, pcurves including 2D replicas, singular loops, rigid body placements, product occurrences, tessellation, visibility, layers, named colors, surface transparency, and semantic or presentation PMI where the selected application protocol carries them.
  • Drawing write boundary: Explicit. The reader transfers the core drawing graph, but the writer does not generate drawing pages or views. Planning emits the representable model and records the omitted drawing graph; --reject-lossy=export refuses the plan before writing.
  • Procedural geometry: Native where modeled. Trimmed and replica curves, spatial-offset curves, linear sweeps, axis revolutions, replica and parallel-offset surfaces, and degenerate tori emit as their native STEP entities. Other definitions emit their solved carrier with a machine-readable loss. Curve-bounded surfaces lack the boundary-curve surface association required for valid native regeneration and therefore reduce with a loss; --reject-lossy=export refuses the plan.
  • Fidelity policy: Explicit and atomic. Planning returns the representable subset and every unsupported semantic fact. --reject-lossy=export rejects a lossy plan before writing any byte. Retained opaque records and opaque presentation targets produce losses. AP-specific tessellation and PMI compatibility is checked against the selected target.
  • Round trip: Complete for generated outputs. Source-less, edited, schema-targeted, topology, geometry, product, tessellation, presentation, and PMI outputs re-decode to typed IR. The optional verify-step-occt.py and verify-step-gmsh.py scripts are environment-driven validators for provided Part 21 files; they are not an in-tree generated all-target acceptance matrix.

Maintaining these profiles

Per-format specifications in formats/ define byte semantics. Adjacent *-open-items.md files contain unresolved fields and structures. Every Partial domain names its remaining work here or in the linked open-items document.

The generated cells and the profile prose answer different questions. A cell is the row's disposition after fixture gating: detected means the codec classifies the dialect but no fixture in the repository backs a score for it, so it can state capability the prose describes and the cell still reads detected. A level named in profile prose names the ladder rung that capability text describes. Edit a cell only through crates/cadmpeg-registry/docs/dialect-support.toml; edit prose only outside a generated region.