Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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());
                            }
                    }
        }