internal void SetMorphTargets(IPrimitiveMorphTargetReader other, IReadOnlyDictionary<int, int> vertexMap, Func<IVertexGeometry, VertexBuilder<TvG, TvM, VertexEmpty>> vertexFunc) { Guard.NotNull(vertexFunc, nameof(vertexFunc)); var indices = other.GetTargetIndices(); foreach (var srcVidx in indices) { var g = vertexFunc(other.GetVertex(srcVidx).GetGeometry()); var dstVidx = srcVidx; if (vertexMap != null) { if (!vertexMap.TryGetValue(srcVidx, out dstVidx)) dstVidx = -1; } if (dstVidx >= 0) this.SetVertex(dstVidx, g); } }
public static VertexBuilder <VertexGeometryDelta, VertexEmpty, VertexEmpty>[] GetMorphTargetVertices(this IPrimitiveMorphTargetReader morphTarget, int vertexCount) { var c = new VertexBuilder <VertexGeometryDelta, VertexEmpty, VertexEmpty> [vertexCount]; for (int i = 0; i < vertexCount; ++i) { var delta = morphTarget.GetVertexDelta(i); c[i] = new VertexBuilder <VertexGeometryDelta, VertexEmpty, VertexEmpty>(delta); } return(c); }