.FX File Format
A .fx file is Flux’s native save format for a single part. This document describes
exactly what the file contains, how each piece is encoded, and how to read it from
outside Flux.
Entry point: Core/Part/Part.cs — method Part.SaveFX(Stream stm, ESaveFX flags)
1. Container: ZIP Archive
A .fx file is a standard ZIP archive (PKZIP format). You can open it with any ZIP
tool (unzip, 7-Zip, Python zipfile, MATLAB unzip). The archive contains several
named entries:
| Entry name | Encoding | Content |
|---|---|---|
|
UTF-8 text |
Human-readable key/value summary of the part |
|
PNG image |
256 × 256 preview rendered at save time |
|
MMF format |
2D drawing (only written when |
|
Varies |
External files attached to the part |
|
AU object |
|
|
AU object |
|
|
AU object |
|
|
AU object |
Surface model (only if no 3D model, or in diagnostic mode) |
|
AU object |
|
|
AU object |
|
|
AU object |
|
|
AU object |
|
|
AU object |
|
|
AU object |
|
|
Raw bytes |
Custom data written by plugin hooks |
|
Raw bytes |
Source geometry for bevel cutting |
Not all entries are always present:
-
Data\Modelis absent if the part was imported as a flat DXF. -
Data\CutTechis absent if no laser tooling has been run. -
Thumbnailis absent whenESaveFX.NoThumbnailis set (e.g. in batch nesting). -
MMF2Dis only written whenESaveFX.MMFis explicitly requested.
2. The Summary Entry
Summary is a plain UTF-8 text file with INI-style sections. It is written by
Part.SaveSummary() (calling PartInfo.SaveSummary(), then each tech’s SaveSummary()).
2.1. [Basic] Section
Always present. Contains the human-readable part metadata:
[Basic]
Name=Bracket-Left
MatlName=1.0038
Thickness=1.5
Weight=0.42
Comments=optional free text
Guid=3f2a1b00-4c5d-6e7f-8a9b-0c1d2e3f4050
Bound2=(-50,-30)-(80,60)
Bound3=(-50,-30,-3)-(80,60,3)
Bound2 is the axis-aligned bounding box of the flat drawing in mm.
Bound3 is the bounding box of the 3D folded model.
Both are written only if the corresponding object exists.
2.2. [BendTech], [FoldTech], [CutTech] Sections
Written by the respective technology objects when present. Their content varies but
follows the same Key=Value style.
3. The Thumbnail Entry
Thumbnail is a raw PNG file (RFC 2083). You can write it directly to disk and open
it as any image. It is a 256 × 256 RGBA image rendered from the part’s flat drawing.
There is no extra header — the entry’s bytes are the PNG file directly (starting with
the PNG magic bytes 89 50 4E 47 0D 0A 1A 0A).
4. AU Object Entries (Data\*)
All Data\* entries use the AU object format — Flux’s binary serialization system.
The code lives in Base/IO/ByteStm.cs and Base/Gold/AuStream.cs.
4.1. Wrapper Header (written by AddObject)
File: Core/Extension.cs:356
Every AU entry starts with an 8-byte wrapper before the actual AU payload:
| Offset | Size | Value |
|---|---|---|
0 |
4 bytes |
Magic: |
4 |
4 bytes |
Payload length in bytes (little-endian |
8 |
N bytes |
AU payload (see below) |
// From Extension.cs — AddObject writes exactly:
stream.Write(OBJSTREAM); // 0x4BDE08A1 as int32 LE
stream.Write(bytes.Data.Length); // int32 LE
stream.Write(bytes.Data, 0, bytes.Data.Length);
4.2. AU Payload Header
File: Base/Gold/AuStream.cs:374
The AU payload starts with:
| Offset | Size | Value |
|---|---|---|
0 |
4 bytes |
AU signature: |
4 |
1 byte |
AU format version (currently |
5 |
… |
Type table + object graph (see below) |
mStm.WriteInt32(mSign); // 0x1A6F2D3D
mStm.WriteByte(AuVersion); // 5
WriteObj(mObj, null);
Write(EToken.Epilogue); // byte 11
mStm.WriteIntV(objCount);
mStm.WriteString("EOF");