diff --git a/app/api/canvas/local-edit/route.ts b/app/api/canvas/local-edit/route.ts
index 0eb22276e..8b7be22ad 100644
--- a/app/api/canvas/local-edit/route.ts
+++ b/app/api/canvas/local-edit/route.ts
@@ -1178,7 +1178,9 @@ function formatScaleAdjustWashColor(
function buildScaleAdjustSourceFootprintWashSvg(params: {
boxes: Array<{
background?: { b: number; g: number; r: number } | null;
+ innerOpacity?: number;
left: number;
+ opacity?: number;
top: number;
width: number;
height: number;
@@ -1220,11 +1222,19 @@ function buildScaleAdjustSourceFootprintWashSvg(params: {
const innerRight = Math.min(width, box.left + box.width - pad);
const innerBottom = Math.min(height, box.top + box.height - pad);
const fill = formatScaleAdjustWashColor(box.background);
+ const opacity =
+ typeof box.opacity === "number"
+ ? clamp(box.opacity, 0, 1)
+ : SCALE_ADJUST_LAYOUT_GUIDE_WASH_OPACITY;
+ const innerOpacity =
+ typeof box.innerOpacity === "number"
+ ? clamp(box.innerOpacity, 0, 1)
+ : 0.18;
const inner =
innerRight > innerLeft + 4 && innerBottom > innerTop + 4
- ? ``
+ ? ``
: "";
- return `${inner}`;
+ return `${inner}`;
})
.join("");
@@ -2602,7 +2612,9 @@ async function buildScaleAdjustVisualLayoutGuideBuffer(params: {
: null;
const sourceFootprintBoxes: Array<{
background?: { b: number; g: number; r: number } | null;
+ innerOpacity?: number;
left: number;
+ opacity?: number;
top: number;
width: number;
height: number;
@@ -2657,6 +2669,18 @@ async function buildScaleAdjustVisualLayoutGuideBuffer(params: {
if (structureLockAppliedRef) {
structureLockAppliedRef.value = true;
}
+ sourceFootprintBoxes.push({
+ ...placement.sourceFootprintBox,
+ background: sourceRaw
+ ? estimateScaleAdjustBoxBackground({
+ box: placement.sourceFootprintBox,
+ raw: sourceRaw,
+ width: sourceWidth,
+ })
+ : null,
+ innerOpacity: 0.36,
+ opacity: 0.72,
+ });
subjectWashComposites.push(structureLockedComposite.wash);
composites.push(structureLockedComposite.overlay);
continue;