File size: 4,065 Bytes
e232e39 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # 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") |