Пример #1
0
        public Stack <ISymbol> Split(ExecutionContext context, Axis axis, Shape parentShape, float offset)
        {
            var absoluteSize = GetAbsoluteSize(context);
            var strategy     = SplitStrategyFactory.Create(parentShape.GetType());

            context.PushShape(strategy.Split(parentShape, axis, offset, absoluteSize));
            return(new Stack <ISymbol>(new[] { Successor }));
        }
Пример #2
0
        public Stack <ISymbol> Split(ExecutionContext context, Axis axis, Shape parentShape, float offset = 0)
        {
            var totalAbsoluteSize = GetAbsoluteSize(context);
            var absoluteSizesSum  = Steps.Sum(x => x.GetAbsoluteSize(context));
            var absoluteSizeLeft  = totalAbsoluteSize - absoluteSizesSum;
            var relativeStepsSum  = Steps.Sum(x => x.GetRelativeStep(context));

            foreach (var step in Steps)
            {
                step.ComputeAbsoluteSize(context, absoluteSizeLeft, relativeStepsSum);
            }
            var   splitStrategy = SplitStrategyFactory.Create(parentShape.GetType());
            var   localShape    = splitStrategy.Split(parentShape, axis, offset, totalAbsoluteSize);
            var   newSymbols    = new Stack <ISymbol>();
            float localOffset   = 0;

            foreach (var step in Steps)
            {
                newSymbols.SafePushAll(step.Split(context, axis, localShape, localOffset));
                localOffset += step.GetAbsoluteSize(context);
            }
            return(newSymbols);
        }