|
|
|
|
|
|
| library(jigsawR)
|
|
|
|
|
| output_dir <- "output"
|
| if (!dir.exists(output_dir)) {
|
| dir.create(output_dir)
|
| }
|
|
|
| cat("=== Hexagonal Puzzle Generation Examples ===\n\n")
|
|
|
|
|
| cat("1. Generating basic hexagonal puzzle (3 rings)...\n")
|
| result1 <- generate_puzzle(
|
| type = "hexagonal",
|
| grid = c(3, 3),
|
| size = c(240, 240),
|
| seed = 1234,
|
| tabsize = 27,
|
| jitter = 5,
|
| output = "complete",
|
| background = "white",
|
| save_files = TRUE,
|
| output_dir = output_dir,
|
| filename_prefix = "hex_basic"
|
| )
|
| cat(" Saved:", result1$files$complete_svg, "\n\n")
|
|
|
|
|
| cat("2. Generating hexagonal puzzle with individual pieces...\n")
|
| result2 <- generate_puzzle(
|
| type = "hexagonal",
|
| grid = c(4, 4),
|
| size = c(300, 300),
|
| seed = 5678,
|
| tabsize = 25,
|
| jitter = 4,
|
| output = "individual",
|
| colors = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A"),
|
| background = "none",
|
| save_files = TRUE,
|
| output_dir = output_dir,
|
| filename_prefix = "hex_individual"
|
| )
|
| cat(" Saved:", result2$files$individual_svg, "\n\n")
|
|
|
|
|
| cat("3. Generating circular puzzle (hexagonal with circular warp)...\n")
|
|
|
|
|
| source(system.file("R", "hexagonal_puzzle.R", package = "jigsawR"))
|
| init_hex_jigsaw(seed = 9999, rings = 3, diameter = 200,
|
| do_warp = TRUE, do_trunc = TRUE)
|
| hex_first()
|
| svg_content <- generate_hex_jigsaw_svg(
|
| rings = 3,
|
| diameter = 200,
|
| seed = 9999,
|
| tabsize = 30,
|
| jitter = 3,
|
| do_warp = TRUE,
|
| do_trunc = TRUE
|
| )
|
| filename <- file.path(output_dir, "circular_puzzle.svg")
|
| save_hex_jigsaw_svg(svg_content, filename)
|
| cat(" Saved:", filename, "\n\n")
|
|
|
|
|
| cat("4. Generating separated hexagonal puzzle for laser cutting...\n")
|
|
|
| source(system.file("R", "hexagonal_separation.R", package = "jigsawR"))
|
| separated_svg <- generate_separated_hexagonal_svg(
|
| rings = 2,
|
| seed = 2468,
|
| diameter = 180,
|
| offset = 10,
|
| arrangement = "hexagonal",
|
| tabsize = 28,
|
| jitter = 5,
|
| colors = NULL,
|
| stroke_width = 1,
|
| background = "none"
|
| )
|
| filename <- file.path(output_dir, "hex_separated.svg")
|
| writeLines(separated_svg, filename)
|
| cat(" Saved:", filename, "\n\n")
|
|
|
|
|
| cat("5. Comparing rectangular and hexagonal puzzles...\n")
|
|
|
|
|
| rect_result <- generate_puzzle(
|
| type = "rectangular",
|
| grid = c(3, 3),
|
| size = c(200, 200),
|
| seed = 1111,
|
| output = "complete",
|
| save_files = TRUE,
|
| output_dir = output_dir,
|
| filename_prefix = "compare_rect"
|
| )
|
|
|
|
|
| hex_result <- generate_puzzle(
|
| type = "hexagonal",
|
| grid = c(3, 3),
|
| size = c(200, 200),
|
| seed = 1111,
|
| output = "complete",
|
| save_files = TRUE,
|
| output_dir = output_dir,
|
| filename_prefix = "compare_hex"
|
| )
|
|
|
| cat(" Rectangular (3x3 = 9 pieces):", rect_result$files$complete_svg, "\n")
|
| cat(" Hexagonal (3 rings = 19 pieces):", hex_result$files$complete_svg, "\n\n")
|
|
|
|
|
| cat("=== Summary ===\n")
|
| cat("Hexagonal puzzle features now supported:\n")
|
| cat("- Basic hexagonal puzzle generation\n")
|
| cat("- Individual piece visualization\n")
|
| cat("- Circular puzzles (with warp and truncation)\n")
|
| cat("- Piece separation for laser cutting\n")
|
| cat("- Integration with Shiny app\n\n")
|
|
|
| cat("Note: Full individual piece extraction for hexagonal puzzles\n")
|
| cat(" (tracing each piece boundary) is planned for future development.\n")
|
| cat(" Current implementation shows the complete puzzle structure.\n") |