diff --git a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java index d2a5dd1cdf..bae5007f54 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java @@ -230,12 +230,19 @@ public class AprilTagFieldLayout { * @throws UncheckedIOException If the layout does not exist. */ public static AprilTagFieldLayout loadField(AprilTagFields field) { - try { - return loadFromResource(field.m_resourceFile); - } catch (IOException e) { - throw new UncheckedIOException( - "Could not load AprilTagFieldLayout from " + field.m_resourceFile, e); + if (field.m_fieldLayout == null) { + try { + field.m_fieldLayout = loadFromResource(field.m_resourceFile); + } catch (IOException e) { + throw new UncheckedIOException( + "Could not load AprilTagFieldLayout from " + field.m_resourceFile, e); + } } + // Copy layout because the layout's origin is mutable + return new AprilTagFieldLayout( + field.m_fieldLayout.getTags(), + field.m_fieldLayout.getFieldLength(), + field.m_fieldLayout.getFieldWidth()); } /** diff --git a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java index 776050c274..c569a9c55f 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java @@ -24,6 +24,8 @@ public enum AprilTagFields { /** Resource filename. */ public final String m_resourceFile; + AprilTagFieldLayout m_fieldLayout; + AprilTagFields(String resourceFile) { m_resourceFile = kBaseResourceDir + resourceFile; }