createHoneycomb static method

List<FreeHexagon> createHoneycomb({
  1. required Offset center,
  2. required double size,
  3. required int rings,
  4. double gap = 0.0,
  5. HexOrientation orientation = HexOrientation.flat,
})

创建蜂巢图案

center 中心位置 size 六边形大小 rings 环数 gap 间隙 orientation 方向

Implementation

static List<FreeHexagon> createHoneycomb({
  required Offset center,
  required double size,
  required int rings,
  double gap = 0.0,
  HexOrientation orientation = HexOrientation.flat,
}) {
  final hexagons = <FreeHexagon>[];

  // 中心六边形
  final centerHex = FreeHexagon(
    id: 'center',
    center: center,
    size: size,
    orientation: orientation,
  );
  hexagons.add(centerHex);

  // 添加环
  var currentRing = [centerHex];
  for (var r = 1; r <= rings; r++) {
    final newRing = <FreeHexagon>[];

    for (var hex in currentRing) {
      final ring = createRing(center: hex, ringSize: size, gap: gap);
      newRing.addAll(ring);
    }

    // 去重
    final uniqueRing = <String, FreeHexagon>{};
    for (var hex in newRing) {
      final key =
          '${hex.center.dx.toStringAsFixed(1)}_${hex.center.dy.toStringAsFixed(1)}';
      uniqueRing[key] = hex;
    }

    hexagons.addAll(uniqueRing.values);
    currentRing = uniqueRing.values.toList();
  }

  return hexagons;
}