@@ -132,8 +187,12 @@ export default function PlanRequestPop(props) {
@@ -223,13 +282,22 @@ export default function PlanRequestPop(props) {
{getMessage('stuff.planReqPopup.search.planStatName')} |
-
- |
diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js
index cb33f407..94a7e989 100644
--- a/src/hooks/roofcover/useAuxiliaryDrawing.js
+++ b/src/hooks/roofcover/useAuxiliaryDrawing.js
@@ -23,10 +23,11 @@ import {
outerLineLength2State,
outerLineTypeState,
} from '@/store/outerLineAtom'
-import { calculateDistance, calculateIntersection, distanceBetweenPoints, findClosestPoint } from '@/util/canvas-util'
+import { calculateDistance, calculateIntersection, distanceBetweenPoints, findClosestPoint, polygonToTurfPolygon } from '@/util/canvas-util'
import { fabric } from 'fabric'
import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint'
import { useSwal } from '@/hooks/useSwal'
+import { booleanPointInPolygon } from '@turf/turf'
// 보조선 작성
export function useAuxiliaryDrawing(setShowAuxiliaryModal) {
@@ -76,6 +77,8 @@ export function useAuxiliaryDrawing(setShowAuxiliaryModal) {
useEffect(() => {
typeRef.current = type
+ clear()
+ addDocumentEventListener('keydown', document, keydown[type])
}, [type])
useEffect(() => {
@@ -103,12 +106,8 @@ export function useAuxiliaryDrawing(setShowAuxiliaryModal) {
}
}, [])
- useEffect(() => {
- clear()
- addDocumentEventListener('keydown', document, keydown[type])
- }, [type])
-
const clear = () => {
+ addCanvasMouseEventListener('mouse:move', mouseMove)
setLength1(0)
setLength2(0)
@@ -459,8 +458,9 @@ export function useAuxiliaryDrawing(setShowAuxiliaryModal) {
}
const mouseDown = (e) => {
- addCanvasMouseEventListener('mouse:move', mouseMove)
+ canvas.renderAll()
const pointer = getIntersectMousePoint(e)
+ console.log(pointer)
mousePointerArr.current.push(pointer)
if (mousePointerArr.current.length === 2) {
@@ -621,10 +621,24 @@ export function useAuxiliaryDrawing(setShowAuxiliaryModal) {
return
}
- const roofBases = canvas.getObjects().find((obj) => obj.name === 'roofBase')
+ const roofBases = canvas.getObjects().filter((obj) => obj.name === 'roofBase')
const innerLines = [...lineHistory.current]
- roofBases.innerLines = [...innerLines]
+ roofBases.forEach((roofBase) => {
+ const roofInnerLines = innerLines.filter((line) => {
+ const turfPolygon = polygonToTurfPolygon(roofBase)
+
+ // innerLines의 두 점이 모두 polygon 안에 있는지 확인
+ const inPolygon1 = booleanPointInPolygon([line.x1, line.y1], turfPolygon)
+ const inPolygon2 = booleanPointInPolygon([line.x2, line.y2], turfPolygon)
+
+ if (inPolygon1 && inPolygon2) {
+ return true
+ }
+ })
+
+ roofBase.innerLines = [...roofInnerLines]
+ })
setShowAuxiliaryModal(false)
}
diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js
index 6533fe79..bc55c921 100644
--- a/src/hooks/roofcover/useRoofAllocationSetting.js
+++ b/src/hooks/roofcover/useRoofAllocationSetting.js
@@ -95,7 +95,11 @@ export function useRoofAllocationSetting(setShowRoofAllocationSettingModal) {
const roofBases = canvas.getObjects().filter((obj) => obj.name === 'roofBase')
const wallLines = canvas.getObjects().filter((obj) => obj.name === 'wallLine')
roofBases.forEach((roofBase) => {
- splitPolygonWithLines(roofBase)
+ try {
+ splitPolygonWithLines(roofBase)
+ } catch (e) {
+ return
+ }
roofBase.innerLines.forEach((line) => {
canvas.remove(line)
diff --git a/src/hooks/roofcover/useRoofShapePassivitySetting.js b/src/hooks/roofcover/useRoofShapePassivitySetting.js
index 217e71bc..83ecf7ed 100644
--- a/src/hooks/roofcover/useRoofShapePassivitySetting.js
+++ b/src/hooks/roofcover/useRoofShapePassivitySetting.js
@@ -33,6 +33,9 @@ export function useRoofShapePassivitySetting(setShowRoofShapePassivitySettingMod
const [type, setType] = useState(TYPES.EAVES)
+ const isFix = useRef(false)
+ const initLines = useRef([])
+
const buttons = [
{ id: 1, name: getMessage('eaves'), type: TYPES.EAVES },
{ id: 2, name: getMessage('gable'), type: TYPES.GABLE },
@@ -52,9 +55,11 @@ export function useRoofShapePassivitySetting(setShowRoofShapePassivitySettingMod
useEffect(() => {
addCanvasMouseEventListener('mouse:down', mouseDown)
const wallLines = canvas.getObjects().filter((obj) => obj.name === 'wallLine')
- canvas.remove(wallLines)
+
+ canvas?.remove(...wallLines)
const outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine')
+ initLines.current = outerLines.map((line) => ({ ...line }))
outerLines.forEach((outerLine, idx) => {
if (idx === 0) {
currentLineRef.current = outerLine
@@ -66,6 +71,7 @@ export function useRoofShapePassivitySetting(setShowRoofShapePassivitySettingMod
canvas?.renderAll()
return () => {
+ handleLineToPolygon()
canvas?.discardActiveObject()
initEvent()
}
@@ -166,6 +172,14 @@ export function useRoofShapePassivitySetting(setShowRoofShapePassivitySettingMod
}
const handleSave = () => {
+ isFix.current = true
+ handleLineToPolygon()
+
+ setShowRoofShapePassivitySettingModal(false)
+ }
+
+ const handleLineToPolygon = () => {
+ const roofBases = canvas.getObjects().filter((obj) => obj.name === 'roofBase')
const exceptObjs = canvas.getObjects().filter((obj) => obj.name !== 'outerLine' && obj.parent?.name !== 'outerLine')
const lines = canvas.getObjects().filter((obj) => obj.name === 'outerLine')
exceptObjs.forEach((obj) => {
@@ -176,13 +190,26 @@ export function useRoofShapePassivitySetting(setShowRoofShapePassivitySettingMod
hideLine(line)
})
- const wall = addPolygonByLines(lines, { name: 'wallLine', fill: 'transparent', stroke: 'black' })
+ let wall
+
+ if (isFix.current) {
+ wall = addPolygonByLines(lines, { name: 'wallLine', fill: 'transparent', stroke: 'black' })
+ } else {
+ // 그냥 닫을 경우 처리
+ wall = addPolygonByLines([...initLines.current], { name: 'wallLine', fill: 'transparent', stroke: 'black' })
+ lines.forEach((line, idx) => {
+ line.attributes = initLines.current[idx].attributes
+ })
+ }
wall.lines = [...lines]
-
+ // 기존 그려진 지붕이 없다면
+ if (roofBases.length === 0) {
+ return
+ }
const roof = drawRoofPolygon(wall)
canvas.renderAll()
- setShowRoofShapePassivitySettingModal(false)
}
+
return { handleSave, handleConfirm, buttons, type, setType, TYPES, offsetRef, pitchRef, handleRollback }
}
diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js
index 1722e287..016cd365 100644
--- a/src/hooks/roofcover/useRoofShapeSetting.js
+++ b/src/hooks/roofcover/useRoofShapeSetting.js
@@ -244,8 +244,13 @@ export function useRoofShapeSetting(setShowRoofShapeSettingModal) {
}
}
- // 기존 wallLine 제거
- canvas?.remove(canvas.getObjects().filter((obj) => obj.name === 'wallLine'))
+ // 기존 wallLine, roofBase 제거
+ canvas
+ .getObjects()
+ .filter((obj) => obj.name === 'wallLine' || obj.name === 'roofBase')
+ .forEach((line) => {
+ canvas.remove(line)
+ })
const polygon = addPolygonByLines(outerLines, { name: 'wallLine' })
polygon.lines = [...outerLines]
diff --git a/src/hooks/useEvent.js b/src/hooks/useEvent.js
index 639b61b3..d14fa7e5 100644
--- a/src/hooks/useEvent.js
+++ b/src/hooks/useEvent.js
@@ -43,7 +43,6 @@ export function useEvent() {
//default Event 추가
addCanvasMouseEventListener('mouse:move', defaultMouseMoveEvent)
addCanvasMouseEventListener('mouse:out', defaultMouseOutEvent)
- addDocumentEventListener('keydown', document, defaultKeyboardEvent)
addDocumentEventListener('contextmenu', document, defaultContextMenuEvent)
if (adsorptionPointAddMode) {
addCanvasMouseEventListener('mouse:down', adsorptionPointAddModeStateEvent)
diff --git a/src/locales/ja.json b/src/locales/ja.json
index 980d1400..0de634d4 100644
--- a/src/locales/ja.json
+++ b/src/locales/ja.json
@@ -511,6 +511,11 @@
"stuff.search.period": "期間検索",
"stuff.search.schDateTypeU": "更新日",
"stuff.search.schDateTypeR": "登録日",
+ "stuff.search.grid.title": "商品リスト",
+ "stuff.search.grid.all": "全体",
+ "stuff.search.grid.selected": "選択",
+ "stuff.search.grid.schSortTypeR": "最近の登録日",
+ "stuff.search.grid.schSortTypeU": "最近の更新日",
"stuff.windSelectPopup.title": "風速選択",
"stuff.windSelectPopup.table.selected": "選択",
"stuff.windSelectPopup.table.windspeed": "風速",
diff --git a/src/locales/ko.json b/src/locales/ko.json
index 21aca2be..5f557e27 100644
--- a/src/locales/ko.json
+++ b/src/locales/ko.json
@@ -516,6 +516,11 @@
"stuff.search.period": "기간검색",
"stuff.search.schDateTypeU": "갱신일",
"stuff.search.schDateTypeR": "등록일",
+ "stuff.search.grid.title": "물건목록",
+ "stuff.search.grid.all": "전체",
+ "stuff.search.grid.selected": "선택",
+ "stuff.search.grid.schSortTypeR": "최근 등록일",
+ "stuff.search.grid.schSortTypeU": "최근 갱신일",
"stuff.windSelectPopup.title": "풍속선택",
"stuff.windSelectPopup.table.selected": "선택",
"stuff.windSelectPopup.table.windspeed": "풍속",