jigsawR / inst /examples /hexagonal_puzzle_example.R
pjt222's picture
Upload folder using huggingface_hub
e232e39 verified
# Hexagonal Puzzle Generation Example
# Demonstrates the new hexagonal puzzle support with individual pieces and separation
library(jigsawR)
# Ensure output directory exists
output_dir <- "output"
if (!dir.exists(output_dir)) {
dir.create(output_dir)
}
cat("=== Hexagonal Puzzle Generation Examples ===\n\n")
# Example 1: Basic hexagonal puzzle
cat("1. Generating basic hexagonal puzzle (3 rings)...\n")
result1 <- generate_puzzle(
type = "hexagonal",
grid = c(3, 3), # First value is rings for hexagonal
size = c(240, 240), # First value is diameter for hexagonal
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")
# Example 2: Hexagonal puzzle with individual pieces
cat("2. Generating hexagonal puzzle with individual pieces...\n")
result2 <- generate_puzzle(
type = "hexagonal",
grid = c(4, 4), # 4 rings
size = c(300, 300), # 300mm diameter
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")
# Example 3: Circular puzzle (hexagonal with warping)
cat("3. Generating circular puzzle (hexagonal with circular warp)...\n")
# Note: This requires extending the generate_puzzle function to pass do_warp parameter
# For now, we'll use the direct function
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")
# Example 4: Hexagonal puzzle with separation (for laser cutting)
cat("4. Generating separated hexagonal puzzle for laser cutting...\n")
# Source separation functions
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")
# Example 5: Compare rectangular vs hexagonal
cat("5. Comparing rectangular and hexagonal puzzles...\n")
# Rectangular
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"
)
# Hexagonal
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")
# Summary
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")