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 })); }
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); }