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")