public void WriteObjectPropertiesTest() { var model = new ThreeMfModel(); var obj = new ThreeMfObject(); var baseMaterials = new ThreeMfBaseMaterials(); baseMaterials.Bases.Add(new ThreeMfBase("blue", new ThreeMfsRGBColor(0, 0, 255))); obj.PropertyResource = baseMaterials; obj.PropertyIndex = 0; model.Resources.Add(obj); // `baseMaterials` was never added to the model resources; ensure it is when writing VerifyModelXml(@" <model> <resources> <basematerials id=""1""> <base name=""blue"" displaycolor=""#0000FFFF"" /> </basematerials> <object id=""2"" type=""model"" pid=""1"" pindex=""0""> <mesh> <vertices /> <triangles /> </mesh> </object> </resources> <build /> </model> ", model); }
public void WriteComponentTest() { var model = new ThreeMfModel(); var first = new ThreeMfObject(); first.Name = "first"; model.Resources.Add(first); var second = new ThreeMfObject(); second.Name = "second"; second.Components.Add(new ThreeMfComponent(first, new ThreeMfMatrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0))); model.Resources.Add(second); VerifyModelXml(@" <model> <resources> <object id=""1"" type=""model"" name=""first""> <mesh> <vertices /> <triangles /> </mesh> </object> <object id=""2"" type=""model"" name=""second""> <mesh> <vertices /> <triangles /> </mesh> <components> <component objectid=""1"" transform=""1 2 3 4 5 6 7 8 9 10 11 12"" /> </components> </object> </resources> <build /> </model> ", model); }
public void WriteBuildItemWithTransformMatrixTest() { var model = new ThreeMfModel(); var obj = new ThreeMfObject(); model.Resources.Add(obj); model.Items.Add(new ThreeMfModelItem(obj) { Transform = new ThreeMfMatrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0) }); VerifyModelXml(@" <model> <resources> <object id=""1"" type=""model""> <mesh> <vertices /> <triangles /> </mesh> </object> </resources> <build> <item objectid=""1"" transform=""1 2 3 4 5 6 7 8 9 10 11 12"" /> </build> </model> ", model); }
public void WriteBuildItemTest() { var model = new ThreeMfModel(); var obj = new ThreeMfObject(); model.Resources.Add(obj); model.Items.Add(new ThreeMfModelItem(obj) { PartNumber = "part number" }); VerifyModelXml(@" <model> <resources> <object id=""1"" type=""model""> <mesh> <vertices /> <triangles /> </mesh> </object> </resources> <build> <item objectid=""1"" partnumber=""part number"" /> </build> </model> ", model); }
public void IncludeAllResourcesTest() { // ensure that improperly built models still write out all resources var model = new ThreeMfModel(); var obj = new ThreeMfObject() { Name = "build item" }; obj.Components.Add(new ThreeMfComponent(new ThreeMfObject() { Name = "component" }, ThreeMfMatrix.Identity)); model.Items.Add(new ThreeMfModelItem(obj)); // note that as of here, no objects have ever been added to `model.Resources` Assert.Equal(0, model.Resources.Count); // but calling `.ToXElement()` will force it to be populated appropriately VerifyModelXml(@" <model> <resources> <object id=""1"" type=""model"" name=""component""> <mesh> <vertices /> <triangles /> </mesh> </object> <object id=""2"" type=""model"" name=""build item""> <mesh> <vertices /> <triangles /> </mesh> <components> <component objectid=""1"" /> </components> </object> </resources> <build> <item objectid=""2"" /> </build> </model> ", model); }
public void WriteTriangleVertexPropertiesTest() { var model = new ThreeMfModel(); var obj = new ThreeMfObject(); var baseMaterials = new ThreeMfBaseMaterials(); baseMaterials.Bases.Add(new ThreeMfBase("blue", new ThreeMfsRGBColor(0, 0, 255))); var triangle = new ThreeMfTriangle(new ThreeMfVertex(0, 0, 0), new ThreeMfVertex(1, 1, 1), new ThreeMfVertex(2, 2, 2)); triangle.PropertyResource = baseMaterials; triangle.V1PropertyIndex = 0; triangle.V2PropertyIndex = null; triangle.V3PropertyIndex = null; obj.Mesh.Triangles.Add(triangle); model.Resources.Add(obj); // `baseMaterials` was never added to the model resources; ensure it is when writing VerifyModelXml(@" <model> <resources> <basematerials id=""1""> <base name=""blue"" displaycolor=""#0000FFFF"" /> </basematerials> <object id=""2"" type=""model""> <mesh> <vertices> <vertex x=""0"" y=""0"" z=""0"" /> <vertex x=""1"" y=""1"" z=""1"" /> <vertex x=""2"" y=""2"" z=""2"" /> </vertices> <triangles> <triangle v1=""0"" v2=""1"" v3=""2"" pid=""1"" p1=""0"" /> </triangles> </mesh> </object> </resources> <build /> </model> ", model); }
public void EnsureThumbnailsAreWrittenTest() { var file = new ThreeMfFile(); var obj = new ThreeMfObject(); var model = new ThreeMfModel(); model.Resources.Add(new ThreeMfObject() { ThumbnailData = StringToBytes("jpeg thumbnail"), ThumbnailContentType = ThreeMfImageContentType.Jpeg }); file.Models.Add(model); using (var archive = GetArchiveFromFile(file)) using (var modelStream = archive.GetEntry("3D/3dmodel.model").Open()) using (var reader = new StreamReader(modelStream)) { var modelXml = XDocument.Parse(reader.ReadToEnd()); var objectElement = modelXml.Root.Element(ThreeMfModel.ResourcesName).Element(ThreeMfResource.ObjectName); // get the path to the thumbnail var path = objectElement.Attribute("thumbnail").Value; // ensure it looks correct and isn't an empty guid Assert.NotEqual($"{ThreeMfObject.ThumbnailPathPrefix}{new Guid().ToString("N")}.jpg", path); Assert.StartsWith(ThreeMfObject.ThumbnailPathPrefix, path); Assert.EndsWith(".jpg", path); path = path.Substring(1); // ensure that the item is present using (var thumbnailStream = archive.GetEntry(path).Open()) using (var thumbnailReader = new StreamReader(thumbnailStream)) { // ensure that it's correct Assert.Equal("jpeg thumbnail", thumbnailReader.ReadToEnd()); } } }