public MaterialSetOLD ProvideNext(ProviderContext context) { if (currentIndex > context.CycleLength) { currentIndex = 0; } var position = 1.0 / context.CycleLength * currentIndex; var gradientStepSpan = GradientStepData.Sum(step => step.Offset); var additivestepPercentage = 0d; MaterialSetOLD interpolatedMaterialSet = MaterialPalette.Sets.BrownBrushSet; if (position >= 1) { currentIndex++; return(GradientStepData.Last().MaterialSet); } for (var x = 0; x <= GradientStepData.Count - 2; x++) { var stepPercentage = GradientStepData[x].Offset / gradientStepSpan; var stepProgression = position - additivestepPercentage; var stepProgressionPercentage = stepProgression / stepPercentage; if (position >= additivestepPercentage && position < (additivestepPercentage + stepPercentage)) { interpolatedMaterialSet = MediaExtensions.Interpolate(GradientStepData[x].MaterialSet, GradientStepData[x + 1].MaterialSet, stepProgressionPercentage); break; } additivestepPercentage += stepPercentage; } currentIndex++; return(interpolatedMaterialSet); }
private MaterialSet GetMaterialSetAtProgression(double progression) { var totalGradientSpan = GradientStepData.Sum(t => t.Offset); if (progression <= 0) { return(GradientStepData.First().MaterialSet); } if (progression >= 1) { return(GradientStepData.Last().MaterialSet); } var currentOffset = 0d; for (var x = 0; x <= GradientStepData.Count - 2; x++) { var startGradientStep = GradientStepData[x]; var endGradientStep = GradientStepData[x + 1]; var stepSpanPercentage = startGradientStep.Offset / totalGradientSpan; var stepEndOffset = currentOffset + stepSpanPercentage; if (progression >= currentOffset && progression < stepEndOffset) { var progressionThroughStep = progression.Map(currentOffset, stepEndOffset, 0d, 1d); var materialSet = MediaExtensions.Interpolate(startGradientStep.MaterialSet, endGradientStep.MaterialSet, progressionThroughStep); return(materialSet); } currentOffset = stepEndOffset; } throw new ArgumentOutOfRangeException(); }