Example #1
0
 protected virtual CalculatedFractalPart CreateResult(
     ICalculationSpecification specification,
     Rectangle <int> rectangleToCalculate,
     Collection <FractalPath> points)
 {
     return(new CalculatedFractalPart(rectangleToCalculate, points));
 }
Example #2
0
        public CalculatedFractalPart CalculatePart(
            ICalculationSpecification specification,
            IFractalSettings settings,
            CancellationToken cancellationToken)
        {
            var rectangleToCalculate = ((PointBasedCalculationSpecification)specification).RectangleToCalculate;
            var algorithm            = (IPointBasedFractal)settings.Algorithm;
            var points = new Collection <FractalPath>();

            for (var x = rectangleToCalculate.Left; x <= rectangleToCalculate.Right; x++)
            {
                for (var y = rectangleToCalculate.Top; y <= rectangleToCalculate.Bottom; y++)
                {
                    var value = algorithm.CalculateSinglePoint(x, y, settings);
                    points.Add(new FractalPath(x - rectangleToCalculate.Left, y - rectangleToCalculate.Top, value));
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
            }

            return(this.CreateResult(specification, rectangleToCalculate, points));
        }
Example #3
0
        protected override CalculatedFractalPart CreateResult(
            ICalculationSpecification specification,
            Rectangle <int> rectangleToCalculate,
            Collection <FractalPath> points)
        {
            var destinationRect = ((ScaledPointBasedCalculationSpecification)specification).DesinationRectangle;

            return(new ScalableFractalPart(rectangleToCalculate, points, destinationRect));
        }
        public CalculatedFractalPart CalculatePart(
            ICalculationSpecification specification,
            IFractalSettings settings,
            CancellationToken cancellationToken)
        {
            var pathBasedSpec = ((PathBasedCalculationSpecification)specification);
            var algorithm     = (IPathBasedFractal)settings.Algorithm;

            var lines = algorithm.CalculatePaths(pathBasedSpec.InitialPath, settings, cancellationToken);

            lines = lines.Union(pathBasedSpec.AdditionalOutput);

            return(new CalculatedFractalPart(new Rectangle <int>(0, 0, settings.ScreenWidth - 1, settings.ScreenHeight - 1), lines));
        }
 public IEnumerable <ICalculationSpecification> SplitIntoPreviewParts(ICalculationSpecification specification)
 {
     return(new[] { specification });
 }
 public bool CanCalculatePart(ICalculationSpecification specification)
 {
     return(specification is PathBasedCalculationSpecification);
 }
Example #7
0
 public CalculatingRenderSpecification(ICalculationSpecification calculationSpecification, IFractalSettings settings, IShader shader)
     : base(settings, shader)
 {
     this.CalculationSpecification = calculationSpecification;
 }
Example #8
0
 public override IEnumerable <ICalculationSpecification> SplitIntoPreviewParts(ICalculationSpecification specification)
 {
     throw new ArgumentException(@"Provided specification is already the result of another split operation", nameof(specification));
 }
Example #9
0
 public override bool CanCalculatePart(ICalculationSpecification specification)
 {
     return(specification is ScaledPointBasedCalculationSpecification);
 }
 public IRenderSpecification CreateDefault(ICalculationSpecification calculationSpecification, IFractalSettings settings, IShader shader)
 {
     return(new CalculatingRenderSpecification(calculationSpecification, settings, shader));
 }
Example #11
0
 public abstract IEnumerable <ICalculationSpecification> SplitIntoPreviewParts(ICalculationSpecification specification);
Example #12
0
 public abstract bool CanCalculatePart(ICalculationSpecification specification);
        public override IEnumerable <ICalculationSpecification> SplitIntoPreviewParts(ICalculationSpecification specification)
        {
            var originalRectangle = ((PointBasedCalculationSpecification)specification).RectangleToCalculate;
            var order             = ColumnCalculationOrder.GetDefault(originalRectangle.Left, originalRectangle.Right).ToArray();
            var stages            = order.GroupBy((o => o.Level)).ToArray();

            var firstStageWithNoPreviewColumns = stages.FirstOrDefault(s => s.Any(c => c.Size < this.minimimSizeForPreview));

            foreach (var stage in stages)
            {
                if (stage == firstStageWithNoPreviewColumns)
                {
                    // columns in this stage are too small, hence ignore all further child stages (no more previews)
                    foreach (var column in stage)
                    {
                        var rect = new Rectangle <int>(column.Left, originalRectangle.Top, column.Right, originalRectangle.Bottom);
                        yield return(new PointBasedCalculationSpecification(rect, stage.Key));
                    }

                    yield break;
                }

                foreach (var column in stage)
                {
                    var calculationRect = new Rectangle <int>(column.X, originalRectangle.Top, column.X, originalRectangle.Bottom);
                    var targetRect      = new Rectangle <int>(column.Left, originalRectangle.Top, column.Right, originalRectangle.Bottom);
                    yield return(new ScaledPointBasedCalculationSpecification(calculationRect, stage.Key, targetRect));
                }
            }
        }