Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
54c8947
Bug fix
Nov 4, 2025
65acd0b
(WIP) starting VIM.cs
Nov 4, 2025
5cbb806
(WIP) Refactoring to VIM.cs
Nov 4, 2025
4e5193a
Code comments
Nov 5, 2025
2c118eb
(WIP) working on serialization
Nov 5, 2025
4471bf4
(WIP) Refactored constants
Nov 5, 2025
23c1f33
Refactored to VimEntityTable instead of VimDataTable
Nov 5, 2025
36f12c0
Warning fix
Nov 5, 2025
f6ea41f
(WIP) Updating serialization
Nov 5, 2025
4c937f3
(WIP) Updating entity tables
Nov 5, 2025
cb50f9e
(WIP) Refactoring. Reworked VimEntityTableColumn* and ported VimEntit…
Nov 6, 2025
957d5a6
whitespace
Nov 6, 2025
ec90a8b
Renamed option for consistency
Nov 6, 2025
4fb305e
(WIP) code-generating new api
Appuls Nov 7, 2025
9fc160a
(WIP) Renamed to VimGeometryData
Appuls Nov 7, 2025
1a5d015
(WIP) Added VimElementGeometryMap and VimMeshData
Appuls Nov 8, 2025
a9a4fac
Ported VimElementHierarchyService + refactoring
Appuls Nov 9, 2025
7ad05f1
(WIP - DNC) porting VIM validation
Appuls Nov 9, 2025
6a3676a
Ported VIM validation
Appuls Nov 10, 2025
1a059a0
Ported ElementParameterInfo
Appuls Nov 10, 2025
37418e0
Removed unused functions. Fixed warnings.
Appuls Nov 15, 2025
f1dd356
Moved VimEntityTableParityTest to api_v2
Appuls Nov 15, 2025
c4bb457
Moved test to api_v2
Appuls Nov 15, 2025
876008f
Removed unused tests
Appuls Nov 15, 2025
0d7980f
Removed ignored test
Appuls Nov 15, 2025
f0c95e6
Moved ReferenceAppTests.cs to api_v2
Appuls Nov 15, 2025
c4515c0
Removed unused test
Appuls Nov 15, 2025
ae9a37a
(WIP - DNC) Ported RoomService + refactored VimElementGeometryInfo
Appuls Nov 17, 2025
214bb67
(WIP - DNC) porting mergeservice
Appuls Nov 19, 2025
cedaa21
(WIP - Untested) Ported RempapedEntityTableBuilder
Appuls Nov 24, 2025
d338d8a
Ported MergeService (untested)
Appuls Nov 26, 2025
6faa14c
TODO update
Appuls Nov 26, 2025
aa682ed
(WIP - Not all tests pass) porting merge service tests
Appuls Nov 27, 2025
28e3662
(WIP - chasing down a data column serialization bug)
Appuls Nov 27, 2025
01503a6
(WIP - discovered storage key problem; will fix next time)
Appuls Nov 27, 2025
fb58eec
Fixed parameter descriptor duplication issue during merge
Appuls Nov 30, 2025
1113c45
(WIP - DNC) Refactoring, added important TODO bug in VIM.cs, re-worki…
Appuls Nov 30, 2025
53f764b
(WIP - DNC) Generalizing VimEntityTableBuilderRemapped. Working on Vi…
Appuls Dec 1, 2025
95f090b
Ported merge fix
Appuls Dec 4, 2025
a7db0a3
(WIP - DNC) working on transform service
Appuls Dec 5, 2025
0db5df9
(WIP - DNC) Update
Appuls Dec 10, 2025
14492cc
(WIP) Refactored VimTransformService and dealt with node remapping (I…
Appuls Dec 10, 2025
ae1f57c
(WIP) Restoring VimTransformServiceTests
Appuls Jan 1, 2026
3c11354
Updated TODOs. Happy New Year :)
Appuls Jan 1, 2026
fc9ad86
(WIP) restoring VimTransformServiceTests
Appuls Jan 2, 2026
d477332
(WIP) Restoring VimTransformServiceTests
Appuls Jan 2, 2026
de9ab6f
(WIP) topology hash bug fix
Appuls Jan 2, 2026
ce9ba8d
Optimization
Appuls Jan 2, 2026
92347ba
Refactored GroupMeshViews
Appuls Jan 2, 2026
de71881
Added missing file
Appuls Jan 2, 2026
7689e31
Updated TODO
Appuls Jan 2, 2026
c48f74d
Restored GLTF converter
mavimaec Jan 3, 2026
61a3da2
Updated TODOs
mavimaec Jan 3, 2026
e1c9805
Updated TODO
mavimaec Jan 3, 2026
c503a2f
(WIP - DNC) Removing replaced code
mavimaec Jan 3, 2026
8f8cd27
Updated code gen
mavimaec Jan 4, 2026
9a851c2
Removed namespaces .api_v2 and .ObjectModel
mavimaec Jan 4, 2026
dff2c6b
Typo fix
mavimaec Jan 4, 2026
443e440
(WIP - DNC) Moved files from api_v2 folders. Removed unused geometry …
mavimaec Jan 4, 2026
be5d254
Vim.Format.Tests pass
mavimaec Jan 4, 2026
f5127a3
Cherry-picked latest EntityTableSet from develop
mavimaec Jan 5, 2026
66f396f
Solution builds and tests pass successfully
mavimaec Jan 5, 2026
213b15e
Deleted g3d and linqarray
mavimaec Jan 5, 2026
14da8bb
Updated C# solution to vim-format.slnx
mavimaec Jan 5, 2026
fd379bd
Docs update
mavimaec Jan 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
uses: ./.github/workflows/merge-and-run.yaml
with:
run-codegen: true
run: dotnet build ./src/cs/vim-format.sln -c Release
run: dotnet build ./src/cs/vim-format.slnx -c Release

test_cs_merged:
if: ${{ success() }}
Expand All @@ -56,7 +56,7 @@ jobs:
with:
lfs: true
run-codegen: true
run: dotnet test ./src/cs/vim-format.sln
run: dotnet test ./src/cs/vim-format.slnx

##############
##### TS #####
Expand Down
3 changes: 3 additions & 0 deletions data/RoomTestModified.vim
Git LFS file not shown
135 changes: 0 additions & 135 deletions docs/g3d.md

This file was deleted.

65 changes: 0 additions & 65 deletions docs/linqarray.md

This file was deleted.

32 changes: 14 additions & 18 deletions docs/vim.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# VIM v1.0.0

The VIM format is a modern and efficient open 3D data interchange format designed for BIM and manufacturing data optimized for efficient loading and rendering on low-power devices.

Characteristics of the VIM format:
Expand All @@ -21,10 +22,12 @@ This is the specification for version 1.0.0 of the VIM data format. It is divide
5. FAQ

# 1. VIM Format Binary Specification

At the top level, a VIM document conforms to the [BFAST (Binary Format for Array Serialization and Transmission) binary data format](./bfast.md).
A BFAST is conceptually similar to a ZIP or TAR archive without compression, just an array of named data buffers. Physically it is laid out as a header, an array of range structures (each containing offsets to the beginning and end of a buffer), and then the data section. The following structures assume 64-bit or smaller alignment.

## Header

The first structure in the VIM file (or any BFAST) is a 32-byte header.

```
Expand Down Expand Up @@ -63,9 +66,11 @@ The range structs are expected to satisfy the following criteria:
* There are no more than 64 bytes of padding between each buffer.

## Names Buffer

The first data buffer in a VIM file contains the names of the others buffers as NUL character delimited UTF-8 encoded strings. The number of strings should always be equal to the number of data buffers specified in the header minus one.

## VIM Data Buffers

There are five expected top-level buffers in the VIM file with the following names. Their order is not essential, and only the header is optional. Additional buffers are allowed for custom purposes but will not be parsed by most readers.
* `header`
* `assets`
Expand All @@ -74,6 +79,7 @@ There are five expected top-level buffers in the VIM file with the following nam
* `geometry`

## Header Buffer

The header section contains the VIM file version and additional meta data as a sequence of newline (`\n`) terminated sets of key/value pairs denoted by `<key>=<value>`.

The following is an example:
Expand All @@ -99,31 +105,21 @@ The `generator` field contains the name of the program used to generate or edit
The `schema` field contains the version of the VIM Object Model.

## Assets Buffer

The assets section of a BIM is also a BFAST container. It may contain any number of buffers with any names. Buffers prefixed with the name `texture/` are assumed to be texture files. By convention buffers prefixed with the name `render/` contain image files. The asset buffer `render/main.png` is used as the PNG thumbnail of the VIM file.

## Geometry Buffer
The geometry section of a VIM contains the merged geometry and basic scene graph information for an entire VIM document using the [G3D format](./g3d.md).

### About G3D
The [G3D format](./g3d.md) is a binary format for 3D geometry that encodes data in an array of attribute buffers.

G3D is based on the BFAST binary layout and uses a naming convention to identify the layout of each attribute buffer and how it is used.

Each attribute buffer is associated with a component of a geometry:
* vertex
* corner
* submesh
* mesh
* instance
* shape
The geometry section of a VIM contains the merged geometry and basic scene graph information for an entire VIM document.

G3D attributes have names to identify them (e.g., position or UV) and uses indices to distinguish when multiple attributes share the same name (e.g., uv:0 ... uv:8).
### About G3D

They can be of one of the following core data datatypes: float32, float64, int8, int16, int32, int64.
The G3D is a binary format for 3D geometry that encodes data in an array of attribute buffers.

More information on G3D is available on its [page](./g3d.md).
G3D is based on the BFAST binary layout and uses a naming convention to identify the layout of each attribute buffer and how it is used.

### VIM Geometry Attributes

The geometry in a VIM contains the following attributes:

* `g3d:vertex:position:0:float32:3`
Expand Down Expand Up @@ -254,8 +250,8 @@ rowCount(Vim.Shape) == itemCount(g3d:shape:color:0:float32:4)
rowCount(Vim.Shape) == itemCount(g3d:shape:width:0:float32:1)
```


## Strings Buffer

The strings buffer contains a sequence of strings of zero or more length, with no duplicates, delimited by the "NUL" character. There may or may not be a trailing "NUL" character. The zero-based index of each string is used by the string columns of entity tables.

# 2. VIM Version
Expand Down Expand Up @@ -290,4 +286,4 @@ Additional tables and columns can be added as desired, and all software supporti

# Copyright

This documentation is [Copyright 2023 VIMaec LLC.](https://www.vimaec.com/copyright).
This documentation is [Copyright 2026 VIMaec LLC.](https://www.vimaec.com/copyright).
22 changes: 0 additions & 22 deletions src/cs/bfast/Vim.BFast/BFastStructs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ Usage licensed under terms of MIT License
is required for transmitting data to/from disk, between processes, or over a network.
*/

using System.Linq;
using System.Runtime.InteropServices;

namespace Vim.BFast
Expand All @@ -25,15 +24,6 @@ public class BFastHeader
public BFastPreamble Preamble = new BFastPreamble();
public BFastRange[] Ranges;
public string[] Names;

public override bool Equals(object o)
=> o is BFastHeader other && Equals(other);

public bool Equals(BFastHeader other)
=> Preamble.Equals(other.Preamble) &&
Ranges.Length == other.Ranges.Length &&
Ranges.Zip(other.Ranges, (x, y) => x.Equals(y)).All(x => x) &&
Names.Zip(other.Names, (x, y) => x.Equals(y)).All(x => x);
}

/// <summary>
Expand Down Expand Up @@ -68,12 +58,6 @@ public struct BFastRange

public long Count => End - Begin;
public static long Size = 16;

public override bool Equals(object x)
=> x is BFastRange other && Equals(other);

public bool Equals(BFastRange other)
=> Begin == other.Begin && End == other.End;
}

/// <summary>
Expand Down Expand Up @@ -103,11 +87,5 @@ public struct BFastPreamble
/// Returns true if the producer of the BFast file has the same endianness as the current library
/// </summary>
public bool SameEndian => Magic == Constants.SameEndian;

public override bool Equals(object x)
=> x is BFastPreamble other && Equals(other);

public bool Equals(BFastPreamble other)
=> Magic == other.Magic && DataStart == other.DataStart && DataEnd == other.DataEnd && NumArrays == other.NumArrays;
};
}
Loading