fix(B07): 도각을 배경으로 굳혀 새 선이 잠금 도면층에 떨어지지 않게 한다
- state.setActiveLayerId(): 잠금 도면층(도각·원지반) 요청은 잠금 아닌 첫 층으로 돌린다. 브리지·자동백업 복구·JSON 가져오기·도면층 패널·리본이 모두 이 함수를 지나므로 가드를 한 곳에 뒀다. 잠금 아닌 층이 없으면 요청값 유지. - RibbonWidgets: 「현재 도면층」 목록에서 잠금층을 뺀다(현재 층이 잠금이면 유지). - Cover 엔진: 표지에 잠금 아닌 「주기」 도면층을 실어 덧그릴 자리를 만든다. 표지는 엔티티가 전부 도각(잠금)이라 가드만으로는 그릴 곳이 없었다. - state.resetUndoBaseline(): 도면 적재를 되돌리기 바닥으로 세운다. 첫 Ctrl+Z가 도면을 싣기 전 빈 상태로 되돌아가 화면이 백지가 되던 결함을 닫는다. - debug-hook: 검증용 snap() 창구 추가. state.test.ts 3건 신규. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -415,6 +415,12 @@ export const setLayers = (newLayers: Layer[], triggerReact = true) => {
|
||||
}
|
||||
};
|
||||
export const setActiveLayerId = (newActiveLayerId: string, triggerReact = true) => {
|
||||
// 잠금 도면층(도각·원지반 등 배경)은 현재 도면층이 될 수 없다 — 새 객체가 배경으로
|
||||
// 떨어지면 그린 즉시 집지도 지우지도 못한다. 호출부(브리지·복구·가져오기·도면층
|
||||
// 패널·리본)마다 거르지 않고 여기 한 곳에서 잠금 아닌 첫 층으로 돌린다.
|
||||
if (layersById.get(newActiveLayerId)?.isLocked) {
|
||||
newActiveLayerId = layers.find((layer) => !layer.isLocked)?.id ?? newActiveLayerId;
|
||||
}
|
||||
activeLayerId = newActiveLayerId;
|
||||
|
||||
if (triggerReact) {
|
||||
@@ -510,6 +516,15 @@ function updateStates(undoState: UndoState) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 지금 객체 목록을 되돌리기 스택의 바닥으로 삼는다. 서버 도면을 실은 직후에 부른다 —
|
||||
* 안 부르면 첫 Ctrl+Z가 도면을 싣기 전의 빈 상태로 되돌아가 화면이 백지가 된다.
|
||||
*/
|
||||
export function resetUndoBaseline() {
|
||||
undoStack.clear(StateVariable.entities);
|
||||
undoStack.push({ variable: StateVariable.entities, value: entities });
|
||||
}
|
||||
|
||||
export function undo() {
|
||||
const undoState = undoStack.undo();
|
||||
if (!undoState) return;
|
||||
|
||||
Reference in New Issue
Block a user