Skip to content

Commit 78edbbc

Browse files
authored
Add secondary fixed axis display (#252)
* Add fixed Y axis and reactive ticks * Add fixed X axis for non-compressed view * Implement fixed X axis for compressed view * Toggle fixed vs floating axes * Don't double-init axes layer * Add grid lines to axes layer * Refactor bounding box calculations * Show end time for final compressed segment * Redisplay grid lines on redraw * Maintain grid lines when switching between views * Extend horizontal grid lines all the way to ticks * Default to fixed axes * Subdivide ticks for compressed view * Fix horizontal grid line drift * Add text scaling and inherirance to axes layer * Stagger midpoint labels * Fix text display for x-axis labels
1 parent 151d07d commit 78edbbc

File tree

7 files changed

+679
-57
lines changed

7 files changed

+679
-57
lines changed

client/src/components/geoJS/LayerManager.vue

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import SpeciesLayer from "./layers/speciesLayer";
1919
import SpeciesSequenceLayer from "./layers/speciesSequenceLayer";
2020
import MeasureToolLayer from "./layers/measureToolLayer";
2121
import BoundingBoxLayer from "./layers/boundingBoxLayer";
22+
import AxesLayer from "./layers/axesLayer";
2223
import { cloneDeep } from "lodash";
2324
import useState from "@use/useState";
2425
export default defineComponent({
@@ -74,6 +75,7 @@ export default defineComponent({
7475
frequencyRulerY,
7576
drawingBoundingBox,
7677
boundingBoxError,
78+
fixedAxes,
7779
} = useState();
7880
const selectedAnnotationId: Ref<null | number> = ref(null);
7981
const hoveredAnnotationId: Ref<null | number> = ref(null);
@@ -86,6 +88,7 @@ export default defineComponent({
8688
let sequenceAnnotationLayer: SequenceLayer;
8789
let editAnnotationLayer: EditAnnotationLayer;
8890
let legendLayer: LegendLayer;
91+
let axesLayer: AxesLayer;
8992
let timeLayer: TimeLayer;
9093
let freqLayer: FreqLayer;
9194
let speciesLayer: SpeciesLayer;
@@ -358,12 +361,16 @@ export default defineComponent({
358361
sequenceAnnotationLayer.redraw();
359362
}
360363
if (!props.thumbnail) {
361-
if (layerVisibility.value.includes("grid")) {
362-
legendLayer.setGridEnabled(true);
363-
} else {
364-
legendLayer.setGridEnabled(false);
364+
if (legendLayer) {
365+
if (layerVisibility.value.includes("grid")) {
366+
legendLayer.setGridEnabled(true);
367+
axesLayer.setGridEnabled(true);
368+
} else {
369+
legendLayer.setGridEnabled(false);
370+
axesLayer.setGridEnabled(false);
371+
}
372+
legendLayer.redraw();
365373
}
366-
legendLayer.redraw();
367374
if (layerVisibility.value.includes("time") || layerVisibility.value.includes('duration')) {
368375
if (layerVisibility.value.includes("time")) {
369376
timeLayer.displayDuration = false;
@@ -470,6 +477,20 @@ export default defineComponent({
470477
speciesSequenceLayer.destroy();
471478
}
472479
});
480+
481+
function setAxes() {
482+
if (!legendLayer || !axesLayer) {
483+
return;
484+
}
485+
if (fixedAxes.value) {
486+
legendLayer.disable();
487+
axesLayer.enable();
488+
} else {
489+
axesLayer.disable();
490+
legendLayer.enable();
491+
}
492+
}
493+
473494
const initLayers = () => {
474495
if (props.spectroInfo) {
475496
if (!compressedOverlayLayer) {
@@ -511,6 +532,14 @@ export default defineComponent({
511532
legendLayer.calcGridLines();
512533
legendLayer.setScaledDimensions(props.scaledWidth, props.scaledHeight);
513534
legendLayer.onPan();
535+
if (!axesLayer) {
536+
axesLayer = new AxesLayer(props.geoViewerRef, event, props.spectroInfo);
537+
}
538+
axesLayer.setScaledDimensions(props.scaledWidth, props.scaledHeight);
539+
if (layerVisibility.value.includes('grid')) {
540+
legendLayer.setGridEnabled(true);
541+
axesLayer.setGridEnabled(true);
542+
}
514543
if (!timeLayer) {
515544
timeLayer = new TimeLayer(props.geoViewerRef, event, props.spectroInfo);
516545
}
@@ -570,7 +599,9 @@ export default defineComponent({
570599
speciesLayer.formatData(localAnnotations.value);
571600
speciesSequenceLayer.formatData(localSequenceAnnotations.value);
572601
573-
legendLayer.redraw();
602+
if (legendLayer) {
603+
legendLayer.redraw();
604+
}
574605
if (layerVisibility.value.includes('species')) {
575606
speciesLayer.redraw();
576607
speciesSequenceLayer.redraw();
@@ -585,7 +616,7 @@ export default defineComponent({
585616
viewCompressedOverlay.value = false;
586617
}
587618
}
588-
triggerUpdate();
619+
setAxes();
589620
};
590621
onMounted(() => {
591622
initLayers();
@@ -675,6 +706,7 @@ export default defineComponent({
675706
}
676707
// Triggers the Axis redraw when zoomed in and the axis is at the bottom/top
677708
legendLayer?.onPan();
709+
axesLayer?.setScaledDimensions(props.scaledWidth, props.scaledHeight);
678710
});
679711
watch(viewCompressedOverlay, () => {
680712
if (viewCompressedOverlay.value && compressedOverlayLayer && props.spectroInfo?.start_times && props.spectroInfo.end_times) {
@@ -748,6 +780,9 @@ export default defineComponent({
748780
749781
watch([backgroundColor, colorScheme], updateColorFilter);
750782
783+
784+
watch(fixedAxes, setAxes);
785+
751786
return {
752787
annotationState,
753788
localAnnotations,

client/src/components/geoJS/geoJSUtils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,18 +148,18 @@ const useGeoJS = () => {
148148
.draw();
149149
previousWidth += currentWidth;
150150
});
151+
const margin = 0.3;
151152
if (resetCam) {
152-
resetMapDimensions(width, height, 0.3, resetCam);
153+
resetMapDimensions(width, height, margin, resetCam);
153154
} else {
154155
const params = geo.util.pixelCoordinateParams(container.value, width, height);
155-
const margin = 0.3;
156156
const { right, bottom } = params.map.maxBounds;
157157
originalBounds = params.map.maxBounds;
158158
geoViewer.value.maxBounds({
159-
left: 0 - right * margin,
159+
left: 0 - right * (margin / 2),
160160
top: 0 - bottom * margin,
161161
right: right * (1 + margin),
162-
bottom: bottom * (1 + margin),
162+
bottom: bottom * (1 + margin / 2),
163163
});
164164
}
165165
};

0 commit comments

Comments
 (0)