private static HdMorph.VertexEdit ReadVertexEdit(BinaryReader reader, int levelIdx)
    {
        float x = reader.ReadSingle();

        ushort packedPathLow;
        ushort packedPathHigh;

        if (levelIdx < LongPathLevelThreshold)
        {
            packedPathLow  = 0;
            packedPathHigh = reader.ReadUInt16();
        }
        else
        {
            packedPathLow  = reader.ReadUInt16();
            packedPathHigh = reader.ReadUInt16();
        }
        uint packedPath = ((uint)packedPathHigh << 16) | (uint)packedPathLow;

        float y = reader.ReadSingle();
        float z = reader.ReadSingle();

        var delta      = new Vector3(x, y, z);
        var vertexEdit = new HdMorph.VertexEdit(packedPath, delta);

        if (vertexEdit.PathLength != levelIdx + 1)
        {
            throw new InvalidOperationException("path length mismatch");
        }

        return(vertexEdit);
    }
    public void TestPackPath()
    {
        int[] path       = { 0, 2, 1 };
        uint  packedPath = HdMorph.VertexEdit.PackPath(0, 2, 1);
        var   vertexEdit = new HdMorph.VertexEdit(packedPath, Vector3.Zero);

        Assert.AreEqual(path.Length, vertexEdit.PathLength);
        Assert.AreEqual(path[0], vertexEdit.GetPathElement(0));
        Assert.AreEqual(path[1], vertexEdit.GetPathElement(1));
        Assert.AreEqual(path[2], vertexEdit.GetPathElement(2));
    }
Exemple #3
0
    private void TestLevel1HdMorph()
    {
        var delta      = new Vector3(10, 20, 30);
        var vertexEdit = new HdMorph.VertexEdit(HdMorph.VertexEdit.PackPath(0, 2), delta);
        var faceEdit   = new HdMorph.FaceEdit(100, ImmutableArray.Create(vertexEdit));

        var     level1  = new HdMorph.Level(controlTopology.Faces.Length, 1, ImmutableArray.Create(faceEdit));
        var     levels  = ImmutableArray.Create(level1);
        HdMorph hdMorph = new HdMorph(levels);

        Vector3 expectedPosition = new Vector3(29.7680817f, 183.135971f, 13.2819338f);         //from Daz studio export

        TestHdMorph(hdMorph, 100 * 4, 2, expectedPosition);
    }
Exemple #4
0
    private void TestLevel2HdMorph()
    {
        var delta      = new Vector3(10, 20, 30);
        var vertexEdit = new HdMorph.VertexEdit(HdMorph.VertexEdit.PackPath(0, 2, 1), delta);
        var faceEdit   = new HdMorph.FaceEdit(200, ImmutableArray.Create(vertexEdit));

        var     level1  = new HdMorph.Level(controlTopology.Faces.Length, 1, ImmutableArray <HdMorph.FaceEdit> .Empty);
        var     level2  = new HdMorph.Level(controlTopology.Faces.Length, 2, ImmutableArray.Create(faceEdit));
        var     levels  = ImmutableArray.Create(level1, level2);
        HdMorph hdMorph = new HdMorph(levels);

        Vector3 expectedPosition = new Vector3(7.82922983f, 197.132507f, -15.0236731f);         //from Daz studio export

        TestHdMorph(hdMorph, ((200 * 4) + 0) * 4 + 2, 1, expectedPosition);
    }
    public void Run()
    {
        var delta      = new Vector3(10, 20, 30);
        var vertexEdit = new HdMorph.VertexEdit(HdMorph.VertexEdit.PackPath(0, 2, 1), delta);
        var faceEdit   = new HdMorph.FaceEdit(200, ImmutableArray.Create(vertexEdit));

        var     level1  = new HdMorph.Level(G3FControlFaceCount, 1, ImmutableArray <HdMorph.FaceEdit> .Empty);
        var     level2  = new HdMorph.Level(G3FControlFaceCount, 2, ImmutableArray.Create(faceEdit));
        var     levels  = ImmutableArray.Create(level1, level2);
        HdMorph hdMorph = new HdMorph(levels);

        var outFile = new FileInfo(@"C:\Users\Public\Documents\My DAZ 3D Library\data\DAZ 3D\Genesis 3\Female\Morphs\GregTest\FBM-GregHDTest.dhdm");

        HdMorphSerialization.SaveHdMorph(outFile, hdMorph);
    }
    private static void WriterVertexEdit(BinaryWriter writer, int levelIdx, HdMorph.VertexEdit vertexEdit)
    {
        writer.Write(vertexEdit.Delta.X);

        ushort packedPathLow  = (ushort)(vertexEdit.PackedPath & 0xffff);
        ushort packedPathHigh = (ushort)(vertexEdit.PackedPath >> 16);

        if (levelIdx < LongPathLevelThreshold)
        {
            writer.Write(packedPathHigh);
        }
        else
        {
            writer.Write(packedPathLow);
            writer.Write(packedPathHigh);
        }

        writer.Write(vertexEdit.Delta.Y);
        writer.Write(vertexEdit.Delta.Z);
    }