|
|
|
|
|
|
| library(jigsawR)
|
|
|
|
|
| output_dir <- "output"
|
| if (!dir.exists(output_dir)) {
|
| dir.create(output_dir)
|
| }
|
|
|
| cat("=== Hexagonal Puzzle Separation Examples ===\n\n")
|
|
|
|
|
| cat("1. Generating small 2-ring separated puzzle...\n")
|
| result1 <- generate_separated_hexagonal_svg(
|
| rings = 2,
|
| seed = 42,
|
| diameter = 180,
|
| offset = 10,
|
| arrangement = "rectangular",
|
| colors = c("#FF6B6B", "#4ECDC4", "#45B7D1"),
|
| stroke_width = 1.5,
|
| background = "none"
|
| )
|
|
|
| filename1 <- file.path(output_dir, "hex_separated_2rings_example.svg")
|
| writeLines(result1, filename1)
|
| cat(" Saved:", filename1, "\n")
|
| cat(" 7 pieces in 4x2 grid\n\n")
|
|
|
|
|
| cat("2. Generating medium 3-ring separated puzzle...\n")
|
| result2 <- generate_separated_hexagonal_svg(
|
| rings = 3,
|
| seed = 1234,
|
| diameter = 240,
|
| offset = 15,
|
| arrangement = "rectangular",
|
| colors = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A", "#98D8C8"),
|
| stroke_width = 1.5,
|
| background = "#f5f5f5"
|
| )
|
|
|
| filename2 <- file.path(output_dir, "hex_separated_3rings_example.svg")
|
| writeLines(result2, filename2)
|
| cat(" Saved:", filename2, "\n")
|
| cat(" 19 pieces in 5x4 grid\n\n")
|
|
|
|
|
| cat("3. Generating larger 4-ring separated puzzle...\n")
|
| result3 <- generate_separated_hexagonal_svg(
|
| rings = 4,
|
| seed = 5678,
|
| diameter = 300,
|
| offset = 20,
|
| arrangement = "rectangular",
|
| colors = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A", "#98D8C8", "#F7DC6F"),
|
| stroke_width = 2,
|
| background = "none"
|
| )
|
|
|
| filename3 <- file.path(output_dir, "hex_separated_4rings_example.svg")
|
| writeLines(result3, filename3)
|
| cat(" Saved:", filename3, "\n")
|
| cat(" 37 pieces in 7x6 grid\n\n")
|
|
|
|
|
| cat("=== Summary ===\n")
|
| cat("Generated 3 separated hexagonal puzzles\n")
|
| cat("All files saved to:", output_dir, "\n\n")
|
|
|
| cat("Key Features:\n")
|
| cat("- Pieces arranged in rectangular grid for efficient material use\n")
|
| cat("- Configurable separation offset for laser cutting\n")
|
| cat("- Color coding for visual distinction\n")
|
| cat("- Piece numbering for assembly reference\n\n")
|
|
|
| cat("Important Notes:\n")
|
| cat("- These use hexagonal PLACEHOLDERS, not actual puzzle pieces\n")
|
| cat("- Placeholders are regular hexagons with piece numbers\n")
|
| cat("- The separation/spacing is correct for laser cutting planning\n")
|
| cat("- For actual cutting, use the complete puzzle view\n\n")
|
|
|
| cat("Parameters Explained:\n")
|
| cat("- rings: Number of hexagonal rings (determines piece count)\n")
|
| cat("- seed: Random seed for reproducibility\n")
|
| cat("- diameter: Overall puzzle diameter in mm\n")
|
| cat("- offset: Separation distance between pieces in mm\n")
|
| cat("- arrangement: 'rectangular' (efficient) or 'hexagonal' (maintains structure)\n")
|
| cat("- colors: Vector of colors for pieces (cycles through list)\n")
|
| cat("- stroke_width: Line thickness in mm\n")
|
| cat("- background: 'none', a color, or gradient specification\n\n")
|
|
|
| cat("Laser Cutting Tips:\n")
|
| cat("- Use offset = 10-20mm depending on material thickness\n")
|
| cat("- Rectangular arrangement maximizes material efficiency\n")
|
| cat("- Export as SVG at full resolution\n")
|
| cat("- Test with small piece count first\n\n")
|
|
|
| cat("Future Enhancement:\n")
|
| cat("- Current version uses placeholder hexagons\n")
|
| cat("- Full puzzle piece shapes (with tabs/blanks) will be added later\n")
|
| cat("- Placeholder approach is sufficient for layout planning\n")
|
|
|