도머 undo redo 후 제거 하면 lengthText 남아 있는 현상 수정, 도머 이동 시 두번 계산되는 현상 수정
This commit is contained in:
parent
55e0528c26
commit
de5b9f1fb7
@ -1436,8 +1436,6 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
|
|||||||
|
|
||||||
const originObj = { ...obj }
|
const originObj = { ...obj }
|
||||||
const turfSurface = pointsToTurfPolygon(parentSurface.getCurrentPoints())
|
const turfSurface = pointsToTurfPolygon(parentSurface.getCurrentPoints())
|
||||||
const originLeft = obj.left
|
|
||||||
const originTop = obj.top
|
|
||||||
|
|
||||||
addCanvasMouseEventListener('mouse:up', (e) => {
|
addCanvasMouseEventListener('mouse:up', (e) => {
|
||||||
//개구, 그림자 타입일 경우 폴리곤 타입 변경
|
//개구, 그림자 타입일 경우 폴리곤 타입 변경
|
||||||
@ -1482,15 +1480,11 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) {
|
if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) {
|
||||||
const calcLeft = obj.left - originLeft
|
// getCurrentPoints() 는 calcTransformMatrix() 기반으로 이미 이동된 월드 좌표를 반환한다.
|
||||||
const calcTop = obj.top - originTop
|
// 과거 코드에서 (obj.left - originLeft) delta 를 다시 더해 2배 이동된 좌표로 검사 →
|
||||||
|
// 빠르게 이동 시 도머가 지붕 내부에 있어도 within=false 가 되어 alert 오발생.
|
||||||
const currentDormerPoints = obj.getCurrentPoints().map((item) => {
|
obj.setCoords()
|
||||||
return {
|
const currentDormerPoints = obj.getCurrentPoints()
|
||||||
x: item.x + calcLeft,
|
|
||||||
y: item.y + calcTop,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const turfObject = pointsToTurfPolygon(currentDormerPoints)
|
const turfObject = pointsToTurfPolygon(currentDormerPoints)
|
||||||
|
|
||||||
|
|||||||
@ -335,10 +335,26 @@ export function useUndoRedo() {
|
|||||||
poly.name !== POLYGON_TYPE.MODULE_SETUP_SURFACE &&
|
poly.name !== POLYGON_TYPE.MODULE_SETUP_SURFACE &&
|
||||||
poly.name !== POLYGON_TYPE.OBJECT_SURFACE
|
poly.name !== POLYGON_TYPE.OBJECT_SURFACE
|
||||||
|
|
||||||
|
// lengthText 인스턴스를 parentId 기준으로 한 번만 모아둔다 (texts 배열 복원에 재사용)
|
||||||
|
const lengthTextsByParent = new Map()
|
||||||
|
objects.forEach((obj) => {
|
||||||
|
if (obj.name === 'lengthText' && obj.parentId) {
|
||||||
|
const arr = lengthTextsByParent.get(obj.parentId) || []
|
||||||
|
arr.push(obj)
|
||||||
|
lengthTextsByParent.set(obj.parentId, arr)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const qPolygons = objects.filter(shouldRebuildText)
|
const qPolygons = objects.filter(shouldRebuildText)
|
||||||
qPolygons.forEach((polygon) => {
|
qPolygons.forEach((polygon) => {
|
||||||
try {
|
try {
|
||||||
polygon.initLines()
|
polygon.initLines()
|
||||||
|
// texts 배열 참조 복원 (재생성이 아닌 기존 lengthText 인스턴스 연결만)
|
||||||
|
// commonDeleteText 가 group._objects[i].texts / object.texts 를 통해 제거하므로,
|
||||||
|
// loadFromJSON 후 끊긴 참조를 다시 이어주지 않으면 삭제 시 lengthText 가 잔존한다.
|
||||||
|
if (polygon.id) {
|
||||||
|
polygon.texts = lengthTextsByParent.get(polygon.id) || []
|
||||||
|
}
|
||||||
} catch (e) { /* skip */ }
|
} catch (e) { /* skip */ }
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -351,6 +367,9 @@ export function useUndoRedo() {
|
|||||||
try {
|
try {
|
||||||
if (!child.canvas) child.canvas = canvas
|
if (!child.canvas) child.canvas = canvas
|
||||||
child.initLines?.()
|
child.initLines?.()
|
||||||
|
if (child.id) {
|
||||||
|
child.texts = lengthTextsByParent.get(child.id) || []
|
||||||
|
}
|
||||||
} catch (e) { /* skip */ }
|
} catch (e) { /* skip */ }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user