Compare commits

..

No commits in common. "2a8b41a0bf16e10c68ec551364d320d3c4ae9753" and "2ee27ad11de0e9bf3247f0d177fddc2338cad2e9" have entirely different histories.

2 changed files with 19 additions and 47 deletions

View File

@ -250,7 +250,7 @@ export function useRoofFn() {
const allRoofObject = canvas const allRoofObject = canvas
.getObjects() .getObjects()
.filter((obj) => obj !== roof && (obj.attributes?.roofId === roof.id || obj.parentId === roof.id || (wall && obj.parentId === wall.id))) .filter((obj) => obj !== roof && (obj.attributes?.roofId === roof.id || obj.parentId === roof.id || obj.parentId === wall.id))
/** 지붕이 움직인 만큼의 delta를 구한다. */ /** 지붕이 움직인 만큼의 delta를 구한다. */
const originalRoofLeft = roof.left const originalRoofLeft = roof.left
@ -276,33 +276,15 @@ export function useRoofFn() {
// Move all related objects by the delta // Move all related objects by the delta
allRoofObject.forEach((obj) => { allRoofObject.forEach((obj) => {
if (obj.points !== undefined) { if (obj.points !== undefined) {
if (obj.name === 'arrow') { obj.set({
// arrow 는 originX='left' 기본값이며 polygonMoved 가 left=pathOffset(중심) 으로 left: obj.left + deltaX,
// 리셋하면 origin 불일치로 위치가 밀리므로, 단순 점 이동만 수행. top: obj.top + deltaY,
obj.points = obj.points.map((p) => ({ x: p.x + deltaX, y: p.y + deltaY })) originX: 'center',
const dim = obj._calcDimensions({}) originY: 'center',
obj.set({ objectCaching: false,
left: dim.left + dim.width / 2, })
top: dim.top + dim.height / 2, obj.fire('polygonMoved')
width: dim.width, obj.fire('modified')
height: dim.height,
pathOffset: { x: dim.left + dim.width / 2, y: dim.top + dim.height / 2 },
originX: 'center',
originY: 'center',
objectCaching: false,
})
obj.setCoords()
} else {
obj.set({
left: obj.left + deltaX,
top: obj.top + deltaY,
originX: 'center',
originY: 'center',
objectCaching: false,
})
obj.fire('polygonMoved')
obj.fire('modified')
}
} else { } else {
obj.set({ obj.set({
left: obj.left + deltaX, left: obj.left + deltaX,

View File

@ -84,25 +84,15 @@ export function useImgLoader() {
const originalBg = canvas.backgroundColor const originalBg = canvas.backgroundColor
canvas.backgroundColor = '#ffffff' canvas.backgroundColor = '#ffffff'
// CORS 대응: 이미지 오브젝트에 crossOrigin 설정 (로드 완료 대기) // CORS 대응: 이미지 오브젝트에 crossOrigin 설정
const imageObjects = canvas.getObjects('image').filter((obj) => obj.getSrc) canvas.getObjects('image').forEach((obj) => {
await Promise.all( if (obj.getSrc) {
imageObjects.map( const img = new Image()
(obj) => img.crossOrigin = 'anonymous'
new Promise((resolve) => { img.src = obj.getSrc()
const img = new Image() obj.setElement(img)
img.crossOrigin = 'anonymous' }
img.onload = () => { })
obj.setElement(img)
resolve()
}
img.onerror = () => {
resolve()
}
img.src = obj.getSrc()
}),
),
)
canvas.renderAll() canvas.renderAll()