From f5f35ab6fdce0e0933b61b3c392b8472d7430a39 Mon Sep 17 00:00:00 2001 From: Martin Ashton Date: Thu, 23 Jan 2025 16:57:49 -0500 Subject: [PATCH 1/3] Convenience refactoring for EntityTableSet --- src/cs/vim/Vim.Format.Core/Serializer.cs | 27 +++++++++++++------ .../Vim.Format.Tests/EntityTable_v2_Tests.cs | 3 +-- .../Vim.Format/ObjectModel/EntityTableSet.cs | 27 +++++++++++++++++++ .../vim/Vim.Format/SceneBuilder/VimScene.cs | 1 - 4 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/cs/vim/Vim.Format/ObjectModel/EntityTableSet.cs diff --git a/src/cs/vim/Vim.Format.Core/Serializer.cs b/src/cs/vim/Vim.Format.Core/Serializer.cs index 06dce92e..7dab3d19 100644 --- a/src/cs/vim/Vim.Format.Core/Serializer.cs +++ b/src/cs/vim/Vim.Format.Core/Serializer.cs @@ -132,6 +132,24 @@ public static IEnumerable EnumerateEntityTables( } } + /// + /// Enumerates the SerializableEntityTables contained in the given readable and seekable stream representing the VIM file. + /// + public static IEnumerable EnumerateEntityTables( + this Stream seekableReadStream, + bool schemaOnly, + Func entityTableNameFilterFunc = null) + { + var entitiesBufferReader = seekableReadStream.GetBFastBufferReader(BufferNames.Entities); + if (entitiesBufferReader == null) + yield break; + + foreach (var entityTable in entitiesBufferReader.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc)) + { + yield return entityTable; + } + } + /// /// Enumerates the SerializableEntityTables contained in the given VIM file. /// @@ -142,14 +160,7 @@ public static IEnumerable EnumerateEntityTables( { using (var stream = vimFileInfo.OpenRead()) { - var entitiesBufferReader = stream.GetBFastBufferReader(BufferNames.Entities); - if (entitiesBufferReader == null) - yield break; - - foreach (var entityTable in entitiesBufferReader.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc)) - { - yield return entityTable; - } + return stream.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc); } } diff --git a/src/cs/vim/Vim.Format.Tests/EntityTable_v2_Tests.cs b/src/cs/vim/Vim.Format.Tests/EntityTable_v2_Tests.cs index f9d9c28a..560e5887 100644 --- a/src/cs/vim/Vim.Format.Tests/EntityTable_v2_Tests.cs +++ b/src/cs/vim/Vim.Format.Tests/EntityTable_v2_Tests.cs @@ -22,8 +22,7 @@ public static void TestEntityTable_v2_Parity() // EntityTable_v2 manual construction. var fileInfo = new FileInfo(vimFilePath); - var entityTables = fileInfo.EnumerateEntityTables(false).ToArray(); - var entityTableSet = new EntityTableSet(entityTables, stringBuffer); + var entityTableSet = new EntityTableSet(fileInfo, false, stringBuffer); var baseElementCount = dm.NumElement; var nextElementCount = entityTableSet.ElementTable.RowCount; diff --git a/src/cs/vim/Vim.Format/ObjectModel/EntityTableSet.cs b/src/cs/vim/Vim.Format/ObjectModel/EntityTableSet.cs new file mode 100644 index 00000000..94e45670 --- /dev/null +++ b/src/cs/vim/Vim.Format/ObjectModel/EntityTableSet.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; +using System.Linq; + +namespace Vim.Format.ObjectModel +{ + /// + /// Additional partial definitions of EntityTableSet. + /// + public partial class EntityTableSet + { + /// + /// Convenience constructor for seeking entity table information in a VIM file. + /// + public EntityTableSet( + FileInfo vimFileInfo, + bool schemaOnly, + string[] stringBuffer, + Func entityTableNameFilterFunc = null, + bool inParallel = true) + : this( + vimFileInfo.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc).ToArray(), + stringBuffer, + inParallel) + { } + } +} diff --git a/src/cs/vim/Vim.Format/SceneBuilder/VimScene.cs b/src/cs/vim/Vim.Format/SceneBuilder/VimScene.cs index 0d744a39..6c515a93 100644 --- a/src/cs/vim/Vim.Format/SceneBuilder/VimScene.cs +++ b/src/cs/vim/Vim.Format/SceneBuilder/VimScene.cs @@ -72,7 +72,6 @@ public VimScene(SerializableDocument doc, IVimSceneProgress progress = null, boo VimIndex = vimIndex; progress?.Report(($"Creating scene from {doc.FileName}", 0.0)); - var actions = GetInitStepsWithProgress(inParallel, progress); if (inParallel) From 9d69370133434dd1a39c6bdf68a4f3b04bc05956 Mon Sep 17 00:00:00 2001 From: Martin Ashton Date: Thu, 23 Jan 2025 20:30:37 -0500 Subject: [PATCH 2/3] bug fix --- src/cs/vim/Vim.Format.Core/Serializer.cs | 27 +++++++----------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/cs/vim/Vim.Format.Core/Serializer.cs b/src/cs/vim/Vim.Format.Core/Serializer.cs index 7dab3d19..06dce92e 100644 --- a/src/cs/vim/Vim.Format.Core/Serializer.cs +++ b/src/cs/vim/Vim.Format.Core/Serializer.cs @@ -132,24 +132,6 @@ public static IEnumerable EnumerateEntityTables( } } - /// - /// Enumerates the SerializableEntityTables contained in the given readable and seekable stream representing the VIM file. - /// - public static IEnumerable EnumerateEntityTables( - this Stream seekableReadStream, - bool schemaOnly, - Func entityTableNameFilterFunc = null) - { - var entitiesBufferReader = seekableReadStream.GetBFastBufferReader(BufferNames.Entities); - if (entitiesBufferReader == null) - yield break; - - foreach (var entityTable in entitiesBufferReader.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc)) - { - yield return entityTable; - } - } - /// /// Enumerates the SerializableEntityTables contained in the given VIM file. /// @@ -160,7 +142,14 @@ public static IEnumerable EnumerateEntityTables( { using (var stream = vimFileInfo.OpenRead()) { - return stream.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc); + var entitiesBufferReader = stream.GetBFastBufferReader(BufferNames.Entities); + if (entitiesBufferReader == null) + yield break; + + foreach (var entityTable in entitiesBufferReader.EnumerateEntityTables(schemaOnly, entityTableNameFilterFunc)) + { + yield return entityTable; + } } } From 43b2a83f0920f6521052695b77f57dcb9fdd87b5 Mon Sep 17 00:00:00 2001 From: Martin Ashton Date: Fri, 24 Jan 2025 10:19:25 -0500 Subject: [PATCH 3/3] Added invariant to Geometry table --- src/cs/vim/Vim.Format/ObjectModel/ObjectModel.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cs/vim/Vim.Format/ObjectModel/ObjectModel.cs b/src/cs/vim/Vim.Format/ObjectModel/ObjectModel.cs index 62485741..05378e2c 100644 --- a/src/cs/vim/Vim.Format/ObjectModel/ObjectModel.cs +++ b/src/cs/vim/Vim.Format/ObjectModel/ObjectModel.cs @@ -1222,6 +1222,7 @@ public partial class Node : EntityWithElement /// Represents a mesh in the G3D buffer of the VIM file. /// [TableName(TableNames.Geometry)] + [G3dAttributeReference("g3d:mesh:submeshoffset:0:int32:1", G3dAttributeReferenceMultiplicity.OneToOne)] public partial class Geometry : Entity { public float Box_Min_X;