joinSignsVertical function

String joinSignsVertical(
  1. List<String> fsws, {
  2. int spacing = 0,
})

Stacks signs vertically (top to bottom), with optional spacing between them.

Mirrors Python signwriting.utils.join_signs.join_signs_vertical.

Implementation

String joinSignsVertical(List<String> fsws, {int spacing = 0}) {
  final signs = _initJoin(fsws);
  final symbols = <SignSymbol>[];
  int accumulativeOffset = 0;

  for (final sign in signs) {
    final signMinY = _allAxis(sign, 'y').reduce(min);
    final signOffsetY = accumulativeOffset + spacing - signMinY;
    accumulativeOffset += (sign.box.position.item2 - signMinY) + spacing;

    for (final symbol in sign.symbols) {
      symbols.add(SignSymbol(
        symbol: symbol.symbol,
        position:
            Tuple2(symbol.position.item1, symbol.position.item2 + signOffsetY),
      ));
    }
  }

  if (symbols.isEmpty) return 'M500x500';
  return signToFsw(signFromSymbols(symbols, fixX: false));
}