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);
        }
Beispiel #2
0
        public static MaterialSetOLD Interpolate(MaterialSetOLD a, MaterialSetOLD b, double p)
        {
            var materials = new List <Material>();
            var mc        = a.Materials.Count.Smallest(b.Materials.Count);

            if (mc < 1)
            {
                throw new Exception("materialset no materials to interpolate");
            }

            for (var x = 0; x < mc; x++)
            {
                var materialA  = a.Materials[x];
                var materialB  = b.Materials[x];
                var colorMixed = Interpolate(materialA.Color, materialB.Color, p);
                if (materialA.Luminosity == null)
                {
                    throw new Exception("luminosity must not be null");
                }
                if (!Equals(materialA.Luminosity, materialB.Luminosity))
                {
                    throw new Exception("luminosity must be the same.");
                }
                materials.Add(new Material(colorMixed.Color, materialA.Luminosity, "interpolated"));
            }

            return(new MaterialSetOLD(materials.ToArray()));
        }
		public override Material GetMaterial(MaterialSetOLD materialSet)
		{
			return materialSet.GetMaterial(Luminosity).WithOpacity(Opacity);
		}
		public AlternatingMaterialProvider(MaterialSetOLD materialSet1, MaterialSetOLD materialSet2)
		{
			MaterialSet1 = materialSet1;
			MaterialSet2 = materialSet2;
		}
 public override Material GetMaterial(MaterialSetOLD materialSet)
 {
     return(materialSet.GetMaterial(Luminosity).WithOpacity(Opacity));
 }
		public abstract Material GetMaterial(MaterialSetOLD materialSet);
		public override Material GetMaterial(MaterialSetOLD materialSet) => LiteralMaterial.WithOpacity(Opacity);
Beispiel #8
0
 public override Material GetMaterial(MaterialSetOLD materialSet) => LiteralMaterial.WithOpacity(Opacity);
Beispiel #9
0
 public GradientMaterialStop(MaterialSetOLD materialSet, double offset = 1)
 {
     MaterialSet = materialSet;
     Offset      = offset;
 }
 public abstract Material GetMaterial(MaterialSetOLD materialSet);
Beispiel #11
0
 public AlternatingMaterialProvider(MaterialSetOLD materialSet1, MaterialSetOLD materialSet2)
 {
     MaterialSet1 = materialSet1;
     MaterialSet2 = materialSet2;
 }