Explorar o código

Resolved problem when exporting to OBJ and the first texture was missing the extension.

Fixes #138
Vicente Penades %!s(int64=3) %!d(string=hai) anos
pai
achega
6c3a974380

+ 4 - 1
src/SharpGLTF.Toolkit/IO/WavefrontWriter.cs

@@ -103,7 +103,10 @@ namespace SharpGLTF.IO
 
 
             foreach (var img in images)
             foreach (var img in images)
             {
             {
-                var imgName = firstImg ? baseName : $"{baseName}_{files.Count}.{img.FileExtension}";
+                var imgName = firstImg
+                    ? $"{baseName}.{img.FileExtension}"
+                    : $"{baseName}_{files.Count}.{img.FileExtension}";
+
                 files[imgName] = new BYTES(img.Content.ToArray());
                 files[imgName] = new BYTES(img.Content.ToArray());
                 firstImg = false;
                 firstImg = false;
             }
             }

+ 2 - 2
tests/SharpGLTF.NUnit/NUnitGltfUtils.cs

@@ -40,7 +40,7 @@ namespace SharpGLTF
             TestContext.AddTestAttachment(fileName);
             TestContext.AddTestAttachment(fileName);
         }
         }
 
 
-        public static void AttachToCurrentTest<TvG, TvM, TvS>(this Geometry.MeshBuilder<TvG, TvM, TvS> mesh, string fileName)
+        public static string AttachToCurrentTest<TvG, TvM, TvS>(this Geometry.MeshBuilder<TvG, TvM, TvS> mesh, string fileName)
             where TvG : struct, Geometry.VertexTypes.IVertexGeometry
             where TvG : struct, Geometry.VertexTypes.IVertexGeometry
             where TvM : struct, Geometry.VertexTypes.IVertexMaterial
             where TvM : struct, Geometry.VertexTypes.IVertexMaterial
             where TvS : struct, Geometry.VertexTypes.IVertexSkinning
             where TvS : struct, Geometry.VertexTypes.IVertexSkinning
@@ -52,7 +52,7 @@ namespace SharpGLTF
             var node = gl2model.UseScene(0).CreateNode();
             var node = gl2model.UseScene(0).CreateNode();
             node.Mesh = gl2mesh;
             node.Mesh = gl2mesh;
 
 
-            gl2model.AttachToCurrentTest(fileName);
+            return gl2model.AttachToCurrentTest(fileName);
         }
         }
 
 
         public static string AttachToCurrentTest(this ModelRoot model, string fileName, WriteSettings settings = null)
         public static string AttachToCurrentTest(this ModelRoot model, string fileName, WriteSettings settings = null)

+ 34 - 0
tests/SharpGLTF.Toolkit.Tests/IO/WavefrontWriterTest.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using NUnit.Framework;
+
+using SharpGLTF.Scenes;
+using SharpGLTF.Geometry;
+using SharpGLTF.Geometry.Parametric;
+
+
+namespace SharpGLTF.IO
+{
+    internal class WavefrontWriterTest
+    {
+        [Test]
+        public void WriteWavefrontFileTest()
+        {
+            var material = Materials.MaterialBuilder.CreateDefault();
+            material.WithBaseColor(Memory.MemoryImage.DefaultPngImage);
+
+            var mesh = new MeshBuilder<Geometry.VertexTypes.VertexPositionNormal, Geometry.VertexTypes.VertexEmpty, Geometry.VertexTypes.VertexEmpty>("SphereMesh");
+            mesh.AddSphere(material, 50, System.Numerics.Matrix4x4.Identity);
+
+            var outPath = mesh.AttachToCurrentTest("result.obj");
+
+            var pngPath = System.IO.Path.ChangeExtension(outPath, ".png");
+
+            Assert.IsTrue(System.IO.File.Exists(pngPath));
+        }
+    }
+}