File size: 2,536 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 | #!/usr/bin/env Rscript
# Debug the offset_path_coords function
cat("=== Debugging offset_path_coords ===\n\n")
# The function from hexagonal_edge_generation_fixed.R
offset_path_coords <- function(path_segment, offset_x, offset_y) {
# Get the command type
cmd <- substr(trimws(path_segment), 1, 1)
cat("Input path_segment:", substr(path_segment, 1, 100), "...\n")
cat("Command:", cmd, "\n")
cat("Offset:", offset_x, offset_y, "\n")
if (cmd == "A") {
# Arc command handling...
return(path_segment)
} else {
# L or C commands - all values are coordinates
numbers <- as.numeric(unlist(strsplit(path_segment, "[CLM ]+")))
numbers <- numbers[!is.na(numbers)]
cat("Extracted numbers:", length(numbers), "\n")
cat("Numbers:", head(numbers, 12), "...\n")
# Offset x coordinates (odd indices) and y coordinates (even indices)
for (i in seq_along(numbers)) {
if (i %% 2 == 1) {
numbers[i] <- numbers[i] + offset_x # x coordinate
} else {
numbers[i] <- numbers[i] + offset_y # y coordinate
}
}
# Rebuild path segment
coords <- sprintf("%.2f", numbers)
result <- paste(cmd, paste(coords, collapse = " "))
cat("Result:", substr(result, 1, 100), "...\n\n")
return(result)
}
}
# Test with actual bezier edge
v1 <- c(0, 0)
v2 <- c(10, 0)
# Simulate a bezier path like: "C 2 1 5 -2 3 3 C 4 5 6 5 7 3 C 8 -1 9 0 10 0"
test_path <- "C 2.00 1.00 5.00 -2.00 3.00 3.00 C 4.00 5.00 6.00 5.00 7.00 3.00 C 8.00 -1.00 9.00 0.00 10.00 0.00"
cat("=== Test 1: Simple offset ===\n")
result <- offset_path_coords(test_path, 100, 50)
cat("\n=== Test 2: What the edge map generates ===\n")
# Source to get actual edge
source("R/hexagonal_bezier_generation.R")
edge <- generate_hex_bezier_edge(
v1 = c(0, 0),
v2 = c(16.67, 0),
seed = 42,
edge_id = 1,
tab_params = list(tabsize = 27, jitter = 5)
)
cat("Forward edge:\n", edge$forward, "\n\n")
cat("Applying offset (100, 50):\n")
result2 <- offset_path_coords(edge$forward, 100, 50)
# The issue: the edge$forward has multiple C commands but cmd = "C" only once
# Let's check what happens
cat("\n=== Problem Analysis ===\n")
cat("The path has MULTIPLE C commands, but we only add ONE 'C' prefix\n")
cat("This is the bug - need to handle multiple commands in sequence\n")
# Count C commands in the original
c_count <- length(gregexpr("C", test_path)[[1]])
cat("Number of C commands in test_path:", c_count, "\n")
|