From dcf25e3576abbf069e77884f2277ae5014ce0500 Mon Sep 17 00:00:00 2001 From: fwcd Date: Fri, 31 Jan 2025 03:46:33 +0100 Subject: [PATCH 1/2] Interpret subfixture windows as relative coordinates --- src/shared/dmxUtil.ts | 4 ++-- src/shared/window.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/shared/dmxUtil.ts b/src/shared/dmxUtil.ts index ef00951e..c4cfc920 100644 --- a/src/shared/dmxUtil.ts +++ b/src/shared/dmxUtil.ts @@ -1,4 +1,4 @@ -import { Window, Window2D_t } from '../shared/window' +import { Window, Window2D_t, window2DToParentCoords } from '../shared/window' import { DmxValue, DMX_MAX_VALUE, @@ -291,7 +291,7 @@ export function flatten_fixture( let flattened: FlattenedFixture[] = fixture_type.subFixtures.map((sub) => { return { intensity: sub.intensity ?? fixture_type.intensity, - window: sub.relative_window ?? fixture.window, + window: sub.relative_window ? window2DToParentCoords(sub.relative_window, fixture.window) : fixture.window, channels: sub.channels.map((ch_index) => { subfixture_ch_indexes.add(ch_index) return [base_channel + ch_index, fixture_type.channels[ch_index]] diff --git a/src/shared/window.ts b/src/shared/window.ts index 37fcfcec..0f151af9 100644 --- a/src/shared/window.ts +++ b/src/shared/window.ts @@ -9,3 +9,17 @@ export type Window2D_t = { x?: Window y?: Window } + +export function windowToParentCoords(relative: Window, parent: Window): Window { + return { + pos: parent.pos + relative.pos * parent.width, + width: relative.width * parent.width + } +} + +export function window2DToParentCoords(relative: Window2D_t, parent: Window2D_t): Window2D_t { + return { + x: relative.x && parent.x ? windowToParentCoords(relative.x, parent.x) : undefined, + y: relative.y && parent.y ? windowToParentCoords(relative.y, parent.y) : undefined + } +} From 9d672193b187f3420f2e11e70c880407dae807b4 Mon Sep 17 00:00:00 2001 From: fwcd Date: Fri, 31 Jan 2025 04:19:29 +0100 Subject: [PATCH 2/2] Fix window to parent conversion --- src/shared/window.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/window.ts b/src/shared/window.ts index 0f151af9..aa7d4a88 100644 --- a/src/shared/window.ts +++ b/src/shared/window.ts @@ -12,7 +12,7 @@ export type Window2D_t = { export function windowToParentCoords(relative: Window, parent: Window): Window { return { - pos: parent.pos + relative.pos * parent.width, + pos: parent.pos + (relative.pos - 0.5) * parent.width, width: relative.width * parent.width } }