[varLib.models] Add getMasterScalars

This commit is contained in:
Behdad Esfahbod 2023-12-07 12:17:25 -07:00
parent 3ecbc94dcf
commit 85883f09bc
2 changed files with 22 additions and 2 deletions

View File

@ -472,6 +472,22 @@ class VariationModel(object):
for support in self.supports for support in self.supports
] ]
def _getMasterScalarsRecurse(self, out, j, weights, scalar=1):
for i, weight in weights.items():
influence = -weight * scalar
out[i] += influence
self._getMasterScalarsRecurse(out, i, self.deltaWeights[i], influence)
def getMasterScalars(self, targetLocation):
out = []
for i, (weights, support) in enumerate(zip(self.deltaWeights, self.supports)):
scalar = supportScalar(targetLocation, support)
out.append(scalar)
self._getMasterScalarsRecurse(out, i, weights, scalar)
out = [out[self.mapping[i]] for i in range(len(out))]
return out
@staticmethod @staticmethod
def interpolateFromDeltasAndScalars(deltas, scalars): def interpolateFromDeltasAndScalars(deltas, scalars):
v = None v = None

View File

@ -397,7 +397,7 @@ class VariationModelTest(object):
) )
@pytest.mark.parametrize( @pytest.mark.parametrize(
"locations, axisOrder, masterValues, instanceLocation, expectedValue", "locations, axisOrder, masterValues, instanceLocation, expectedValue, masterScalars",
[ [
( (
[ [
@ -422,6 +422,7 @@ class VariationModelTest(object):
"axis_B": 0.5, "axis_B": 0.5,
}, },
37.5, 37.5,
[0.25, 0.0, 0.0, -0.25, 0.5, 0.5],
), ),
], ],
) )
@ -432,8 +433,11 @@ class VariationModelTest(object):
masterValues, masterValues,
instanceLocation, instanceLocation,
expectedValue, expectedValue,
masterScalars,
): ):
model = VariationModel(locations, axisOrder=axisOrder) model = VariationModel(locations, axisOrder=axisOrder)
interpolatedValue = model.interpolateFromMasters(instanceLocation, masterValues)
interpolatedValue = model.interpolateFromMasters(instanceLocation, masterValues)
assert interpolatedValue == expectedValue assert interpolatedValue == expectedValue
assert masterScalars == model.getMasterScalars(instanceLocation)