ExtPrimitiveOutlineTests.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Linq;
  2. using System.Numerics;
  3. using NUnit.Framework;
  4. using SharpGLTF.Geometry;
  5. using SharpGLTF.Geometry.VertexTypes;
  6. using SharpGLTF.Materials;
  7. using SharpGLTF.Validation;
  8. using SharpGLTF.Scenes;
  9. namespace SharpGLTF.Schema2.Tiles3D
  10. {
  11. [Category("Cesium")]
  12. public partial class ExtPrimitiveOutlineTests
  13. {
  14. [SetUp]
  15. public void SetUp()
  16. {
  17. Tiles3DExtensions.RegisterExtensions();
  18. }
  19. [Test(Description = "Creates a simple triangle with Cesium outlining")]
  20. public void CreateCesiumOutlineTriangleScene()
  21. {
  22. TestContext.CurrentContext.AttachGltfValidatorLinks();
  23. var material = MaterialBuilder.CreateDefault();
  24. var mesh = new MeshBuilder<VertexPosition>("mesh");
  25. var prim = mesh.UsePrimitive(material);
  26. prim.AddTriangle(new VertexPosition(-10, 0, 0), new VertexPosition(10, 0, 0), new VertexPosition(0, 10, 0));
  27. var scene = new SceneBuilder();
  28. scene.AddRigidMesh(mesh, Matrix4x4.Identity);
  29. var model = scene.ToGltf2();
  30. var outlines = new uint[] { 0, 1, 1, 2, 2, 0};
  31. model.LogicalMeshes[0].Primitives[0].SetCesiumOutline(outlines);
  32. var cesiumOutlineExtension = (CesiumPrimitiveOutline)model.LogicalMeshes[0].Primitives[0].Extensions.FirstOrDefault();
  33. Assert.That(cesiumOutlineExtension.Indices, Is.Not.Null);
  34. Assert.That(outlines, Is.EqualTo(cesiumOutlineExtension.Indices.AsIndicesArray()));
  35. var ctx = new ValidationResult(model, ValidationMode.Strict, true);
  36. model.ValidateContent(ctx.GetContext());
  37. scene.AttachToCurrentTest("cesium_outline_triangle.glb");
  38. scene.AttachToCurrentTest("cesium_outline_triangle.gltf");
  39. scene.AttachToCurrentTest("cesium_outline_triangle.plotly");
  40. }
  41. }
  42. }