public void MergeGlbFiles() { var testPath = "../../../models/MergeGlTF/Ours.glb"; var ours = Interface.LoadModel(testPath); var buffers = ours.Buffers.ToList(); var buffViews = ours.BufferViews.ToList(); var accessors = ours.Accessors.ToList(); var meshes = ours.Meshes.ToList(); var materials = ours.Materials.ToList(); var images = ours.Images != null?ours.Images.ToList() : new List <Image>(); var textures = ours.Textures != null?ours.Textures.ToList() : new List <Texture>(); var samplers = ours.Samplers != null?ours.Samplers.ToList() : new List <Sampler>(); using (var testStream = GltfExtensions.GetGlbStreamFromPath(testPath)) { var bufferByteArrays = ours.GetAllBufferByteArrays(testStream); using (var avocadoStream = GltfExtensions.GetGlbStreamFromPath("../../../models/MergeGlTF/Avocado.glb")) { GltfMergingUtils.AddAllMeshesFromFromGlb(avocadoStream, buffers, bufferByteArrays, buffViews, accessors, meshes, materials, textures, images, samplers, true ); } ours.Buffers = buffers.ToArray(); ours.BufferViews = buffViews.ToArray(); ours.Accessors = accessors.ToArray(); ours.Meshes = meshes.ToArray(); ours.Materials = materials.ToArray(); ours.Images = images.ToArray(); ours.Textures = textures.ToArray(); if (samplers.Count > 0) { ours.Samplers = samplers.ToArray(); } var nodeList = ours.Nodes.ToList(); var transform = new Transform(new Vector3(1, 1, 0), Vector3.XAxis, Vector3.YAxis.Negate()).Scaled(20); NodeUtilities.CreateNodeForMesh(ours.Meshes.Length - 1, nodeList, transform); ours.Nodes = nodeList.ToArray(); var savepath = "../../../GltfTestResult.gltf"; ours.SaveBuffersAndAddUris(savepath, bufferByteArrays); ours.SaveModel(savepath); var mergedBuffer = ours.CombineBufferAndFixRefs(bufferByteArrays.ToArray()); ours.SaveBinaryModel(mergedBuffer, "../../../GltfTestMerged.glb"); } }
/// <summary> /// Reads the JSON representation of the object. /// </summary> /// <param name="reader">The Newtonsoft.Json.JsonReader to read from.</param> /// <param name="objectType">Type of the object.</param> /// <param name="existingValue">The existing value of object being read.</param> /// <param name="serializer">The calling serializer.</param> /// <returns>The object value.</returns> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Dictionary <string, JRaw> dictionary = serializer.Deserialize <Dictionary <string, JRaw> >(reader); if (dictionary == null) { return(null); } GltfExtensions extensions = new GltfExtensions(); extensions.SetConverterDictionary(dictionary); return(extensions); }
/// <summary> /// Writes the JSON representation of the object. /// </summary> /// <param name="writer">The Newtonsoft.Json.JsonWriter to write to.</param> /// <param name="value">The value.</param> /// <param name="serializer">The calling serializer.</param> public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) { return; } GltfExtensions extensions = value as GltfExtensions; Dictionary <string, JRaw> dictionary = extensions.GetConverterDictionary(); if (dictionary == null) { return; } serializer.Serialize(writer, dictionary); }
public void CSG() { var profile = _profileFactory.GetProfileByType(WideFlangeProfileType.W10x100); var line = new Line(new Vector3(0, 0, 0), new Vector3(10, 0, 5)); var beam = new Beam(line, profile, BuiltInMaterials.Steel); for (var i = 0.0; i <= 1.0; i += 1.0 / (double)Samples) { var t = line.TransformAt(i); var lt = new Transform(t.Origin, t.ZAxis, t.XAxis.Negate()); lt.Move(lt.ZAxis * -0.5); var hole = new Extrude(Polygon.Rectangle(0.1, 0.1), 1.0, Vector3.ZAxis, true) { LocalTransform = lt }; beam.Representation.SolidOperations.Add(hole); } var model = new Model(); model.AddElement(beam); GltfExtensions.InitializeGlTF(model, out var buffers, false); }
public void ThinObjectsGenerateCorrectly() { var json = File.ReadAllText("../../../models/Geometry/Single-Panel.json"); var panel = JsonConvert.DeserializeObject <Panel>(json); var model = new Model(); model.AddElement(panel); var modelsDir = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "models"); var gltfPath = Path.Combine(modelsDir, "Single-Panel.gltf"); model.ToGlTF(gltfPath, false); var gltfJson = File.ReadAllText(gltfPath); using (var glbStream = GltfExtensions.GetGlbStreamFromPath(gltfPath)) { var loadingStream = new MemoryStream(); glbStream.Position = 0; glbStream.CopyTo(loadingStream); loadingStream.Position = 0; var loaded = Interface.LoadModel(loadingStream); var vertexCount = loaded.Accessors.First(a => a.Type == Accessor.TypeEnum.VEC3).Count; Assert.True(vertexCount == 12, $"The stored mesh should contain 12 vertices, instead it contains {vertexCount}"); } }