Compare commits
10 Commits
97d20321ed
...
cec871fb70
| Author | SHA1 | Date | |
|---|---|---|---|
| cec871fb70 | |||
| 46dc8123df | |||
| d4ae092ae5 | |||
|
|
70a4c85149 | ||
|
|
51acb561b8 | ||
|
|
e482538dec | ||
|
|
ec48350c05 | ||
|
|
69c48cecf8 | ||
|
|
46cc507e6d | ||
|
|
98f87553e6 |
@ -86,6 +86,26 @@ export default function PassivityCircuitAllocation(props) {
|
|||||||
.map((obj) => obj.circuitNumber),
|
.map((obj) => obj.circuitNumber),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const surfaceList = targetModules.map((module) => {
|
||||||
|
return canvas.getObjects().filter((obj) => obj.id === canvas.getObjects().filter((obj) => obj.id === module)[0].surfaceId)[0]
|
||||||
|
})
|
||||||
|
|
||||||
|
if (surfaceList.length > 1) {
|
||||||
|
let surfaceType = {}
|
||||||
|
|
||||||
|
surfaceList.forEach((surface) => {
|
||||||
|
surfaceType[`${surface.direction}-${surface.roofMaterial.pitch}`] = surface
|
||||||
|
})
|
||||||
|
if (Object.keys(surfaceType).length > 1) {
|
||||||
|
swalFire({
|
||||||
|
text: getMessage('module.circuit.fix.not.same.roof.error'),
|
||||||
|
type: 'alert',
|
||||||
|
icon: 'warning',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!circuitNumber || circuitNumber === 0) {
|
if (!circuitNumber || circuitNumber === 0) {
|
||||||
swalFire({
|
swalFire({
|
||||||
text: getMessage('module.circuit.minimun.error'),
|
text: getMessage('module.circuit.minimun.error'),
|
||||||
|
|||||||
@ -17,7 +17,7 @@ export default function GridCopy(props) {
|
|||||||
const currentObject = useRecoilValue(currentObjectState)
|
const currentObject = useRecoilValue(currentObjectState)
|
||||||
const { copy } = useGrid()
|
const { copy } = useGrid()
|
||||||
const handleApply = () => {
|
const handleApply = () => {
|
||||||
copy(currentObject, ['↑', '←'].includes(arrow) ? +length * -1 : +length)
|
copy(currentObject, ['↑', '←'].includes(arrow) ? (+length * -1) / 10 : +length / 10)
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<WithDraggable isShow={true} pos={pos} className="xm">
|
<WithDraggable isShow={true} pos={pos} className="xm">
|
||||||
|
|||||||
@ -54,15 +54,15 @@ export default function GridMove(props) {
|
|||||||
.forEach((grid) => {
|
.forEach((grid) => {
|
||||||
move(
|
move(
|
||||||
grid,
|
grid,
|
||||||
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
|
arrow2 === '←' ? (Number(horizonSize) * -1) / 10 : Number(horizonSize) / 10,
|
||||||
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
|
arrow1 === '↑' ? (Number(verticalSize) * -1) / 10 : Number(verticalSize) / 10,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
move(
|
move(
|
||||||
currentObject,
|
currentObject,
|
||||||
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
|
arrow2 === '←' ? (Number(horizonSize) * -1) / 10 : Number(horizonSize) / 10,
|
||||||
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
|
arrow1 === '↑' ? (Number(verticalSize) * -1) / 10 : Number(verticalSize) / 10,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
|
|||||||
@ -185,7 +185,7 @@ export default function SecondOption(props) {
|
|||||||
|
|
||||||
const onClickOption = async (item) => {
|
const onClickOption = async (item) => {
|
||||||
let option4Data = settingModalSecondOptions?.option4
|
let option4Data = settingModalSecondOptions?.option4
|
||||||
let adsorpPointData = adsorptionPointMode.adsorptionPoint
|
let adsorpPointData = adsorptionPointMode
|
||||||
|
|
||||||
//흡착범위 설정(단 건 선택)
|
//흡착범위 설정(단 건 선택)
|
||||||
if (
|
if (
|
||||||
@ -203,11 +203,9 @@ export default function SecondOption(props) {
|
|||||||
|
|
||||||
//흡착점 범위
|
//흡착점 범위
|
||||||
setAdsorptionRange(item.range)
|
setAdsorptionRange(item.range)
|
||||||
|
setAdsorptionPointMode(adsorpPointData)
|
||||||
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: adsorpPointData })
|
|
||||||
} else if (item === 'adsorpPoint') {
|
} else if (item === 'adsorpPoint') {
|
||||||
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: !adsorpPointData })
|
setAdsorptionPointMode(!adsorpPointData)
|
||||||
adsorpPointData = !adsorpPointData
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setSettingsData({ ...settingsData, option4: [...option4Data], adsorptionPoint: adsorpPointData })
|
setSettingsData({ ...settingsData, option4: [...option4Data], adsorptionPoint: adsorpPointData })
|
||||||
@ -257,7 +255,7 @@ export default function SecondOption(props) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{getMessage('modal.canvas.setting.font.plan.absorption.point')}</span>
|
<span>{getMessage('modal.canvas.setting.font.plan.absorption.point')}</span>
|
||||||
<i>{adsorptionPointMode.adsorptionPoint ? 'ON' : 'OFF'}</i>
|
<i>{adsorptionPointMode ? 'ON' : 'OFF'}</i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -609,7 +609,7 @@ export function useCanvasSetting(executeEffect = true) {
|
|||||||
const optionData5 = settingModalFirstOptions.dimensionDisplay.map((item) => ({ ...item }))
|
const optionData5 = settingModalFirstOptions.dimensionDisplay.map((item) => ({ ...item }))
|
||||||
|
|
||||||
/** 흡착점 ON/OFF */
|
/** 흡착점 ON/OFF */
|
||||||
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: res.adsorpPoint })
|
setAdsorptionPointMode(res.adsorpPoint)
|
||||||
|
|
||||||
/** 치수선 설정 */
|
/** 치수선 설정 */
|
||||||
setDimensionLineSettings({ ...dimensionLineSettings, pixel: res.originPixel, color: res.originColor })
|
setDimensionLineSettings({ ...dimensionLineSettings, pixel: res.originPixel, color: res.originColor })
|
||||||
@ -695,7 +695,7 @@ export function useCanvasSetting(executeEffect = true) {
|
|||||||
/** 조회된 글꼴 데이터가 없는 경우 (데이터 초기화) */
|
/** 조회된 글꼴 데이터가 없는 경우 (데이터 초기화) */
|
||||||
|
|
||||||
/** 흡착점 ON/OFF */
|
/** 흡착점 ON/OFF */
|
||||||
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: false })
|
setAdsorptionPointMode(false)
|
||||||
|
|
||||||
/** 치수선 설정 */
|
/** 치수선 설정 */
|
||||||
resetDimensionLineSettings()
|
resetDimensionLineSettings()
|
||||||
@ -775,7 +775,7 @@ export function useCanvasSetting(executeEffect = true) {
|
|||||||
adsorpRangeMedium: dataToSend.secondOption2[2].selected,
|
adsorpRangeMedium: dataToSend.secondOption2[2].selected,
|
||||||
adsorpRangeLarge: dataToSend.secondOption2[3].selected,
|
adsorpRangeLarge: dataToSend.secondOption2[3].selected,
|
||||||
/** 흡착점 ON/OFF */
|
/** 흡착점 ON/OFF */
|
||||||
adsorpPoint: adsorptionPointMode.adsorptionPoint,
|
adsorpPoint: adsorptionPointMode,
|
||||||
//??: adsorptionRange, 사용여부 확인 필요
|
//??: adsorptionRange, 사용여부 확인 필요
|
||||||
|
|
||||||
/** 문자 글꼴 설정 */
|
/** 문자 글꼴 설정 */
|
||||||
|
|||||||
@ -6,6 +6,8 @@ import { calculateDistance, calculateDistancePoint, calculateIntersection, dista
|
|||||||
import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint'
|
import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint'
|
||||||
import { useDotLineGrid } from '@/hooks/useDotLineGrid'
|
import { useDotLineGrid } from '@/hooks/useDotLineGrid'
|
||||||
import { useTempGrid } from '@/hooks/useTempGrid'
|
import { useTempGrid } from '@/hooks/useTempGrid'
|
||||||
|
import { gridColorState } from '@/store/gridAtom'
|
||||||
|
import { gridDisplaySelector } from '@/store/settingAtom'
|
||||||
|
|
||||||
export function useEvent() {
|
export function useEvent() {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
@ -13,10 +15,12 @@ export function useEvent() {
|
|||||||
const documentEventListeners = useRef([])
|
const documentEventListeners = useRef([])
|
||||||
const mouseEventListeners = useRef([])
|
const mouseEventListeners = useRef([])
|
||||||
const setCanvasZoom = useSetRecoilState(canvasZoomState)
|
const setCanvasZoom = useSetRecoilState(canvasZoomState)
|
||||||
|
const gridColor = useRecoilValue(gridColorState)
|
||||||
|
const isGridDisplay = useRecoilValue(gridDisplaySelector)
|
||||||
|
|
||||||
const { adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, getAdsorptionPoints, adsorptionPointAddModeStateEvent } = useAdsorptionPoint()
|
const { adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, getAdsorptionPoints, adsorptionPointAddModeStateEvent } = useAdsorptionPoint()
|
||||||
const { dotLineGridSetting, interval, getClosestLineGrid } = useDotLineGrid()
|
const { dotLineGridSetting, interval, getClosestLineGrid } = useDotLineGrid()
|
||||||
const { tempGridModeStateLeftClickEvent, tempGridMode, tempGridRightClickEvent } = useTempGrid()
|
const { tempGridModeStateLeftClickEvent, tempGridMode } = useTempGrid()
|
||||||
|
|
||||||
const textMode = useRecoilValue(textModeState)
|
const textMode = useRecoilValue(textModeState)
|
||||||
|
|
||||||
@ -104,24 +108,35 @@ export function useEvent() {
|
|||||||
if (dotLineGridSetting.LINE || canvas.getObjects().filter((obj) => ['lineGrid', 'tempGrid'].includes(obj.name)).length > 0) {
|
if (dotLineGridSetting.LINE || canvas.getObjects().filter((obj) => ['lineGrid', 'tempGrid'].includes(obj.name)).length > 0) {
|
||||||
const closestLine = getClosestLineGrid(pointer)
|
const closestLine = getClosestLineGrid(pointer)
|
||||||
|
|
||||||
const horizonLines = canvas.getObjects().filter((obj) => obj.name === 'lineGrid' && obj.direction === 'horizontal')
|
const horizonLines = canvas.getObjects().filter((obj) => ['lineGrid', 'tempGrid'].includes(obj.name) && obj.direction === 'horizontal')
|
||||||
const verticalLines = canvas.getObjects().filter((obj) => obj.name === 'lineGrid' && obj.direction === 'vertical')
|
const verticalLines = canvas.getObjects().filter((obj) => ['lineGrid', 'tempGrid'].includes(obj.name) && obj.direction === 'vertical')
|
||||||
|
|
||||||
if (!horizonLines || !verticalLines) {
|
if (!horizonLines || !verticalLines) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const closestHorizontalLine = horizonLines.reduce((prev, curr) => {
|
let closestHorizontalLine = null
|
||||||
const prevDistance = calculateDistance(pointer, prev)
|
let closestVerticalLine = null
|
||||||
const currDistance = calculateDistance(pointer, curr)
|
|
||||||
return prevDistance < currDistance ? prev : curr
|
|
||||||
})
|
|
||||||
|
|
||||||
const closestVerticalLine = verticalLines.reduce((prev, curr) => {
|
if (horizonLines && horizonLines.length > 0) {
|
||||||
const prevDistance = calculateDistance(pointer, prev)
|
closestHorizontalLine = horizonLines.reduce((prev, curr) => {
|
||||||
const currDistance = calculateDistance(pointer, curr)
|
const prevDistance = calculateDistance(pointer, prev)
|
||||||
return prevDistance < currDistance ? prev : curr
|
const currDistance = calculateDistance(pointer, curr)
|
||||||
})
|
return prevDistance < currDistance ? prev : curr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verticalLines && verticalLines.length > 0) {
|
||||||
|
closestVerticalLine = verticalLines.reduce((prev, curr) => {
|
||||||
|
const prevDistance = calculateDistance(pointer, prev)
|
||||||
|
const currDistance = calculateDistance(pointer, curr)
|
||||||
|
return prevDistance < currDistance ? prev : curr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!closestVerticalLine || !closestHorizontalLine) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const closestIntersectionPoint = calculateIntersection(closestHorizontalLine, closestVerticalLine)
|
const closestIntersectionPoint = calculateIntersection(closestHorizontalLine, closestVerticalLine)
|
||||||
|
|
||||||
@ -238,6 +253,34 @@ export function useEvent() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tempGridRightClickEvent = (e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
//임의 그리드 모드일 경우
|
||||||
|
let pointer = { x: e.offsetX, y: e.offsetY }
|
||||||
|
|
||||||
|
const tempGrid = new fabric.Line([-1500, pointer.y, 2500, pointer.y], {
|
||||||
|
stroke: gridColor,
|
||||||
|
strokeWidth: 1,
|
||||||
|
selectable: true,
|
||||||
|
lockMovementX: true,
|
||||||
|
lockMovementY: true,
|
||||||
|
lockRotation: true,
|
||||||
|
lockScalingX: true,
|
||||||
|
lockScalingY: true,
|
||||||
|
strokeDashArray: [5, 2],
|
||||||
|
opacity: 0.3,
|
||||||
|
padding: 5,
|
||||||
|
name: 'tempGrid',
|
||||||
|
visible: isGridDisplay,
|
||||||
|
direction: 'horizontal',
|
||||||
|
})
|
||||||
|
|
||||||
|
canvas.add(tempGrid)
|
||||||
|
|
||||||
|
canvas.renderAll()
|
||||||
|
}
|
||||||
|
|
||||||
const defaultKeyboardEvent = (e) => {
|
const defaultKeyboardEvent = (e) => {
|
||||||
if (e.key === 'Escape') {
|
if (e.key === 'Escape') {
|
||||||
console.log('defaultKeyboardEvent')
|
console.log('defaultKeyboardEvent')
|
||||||
|
|||||||
@ -7,8 +7,9 @@ const GRID_PADDING = 5
|
|||||||
export function useTempGrid() {
|
export function useTempGrid() {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
const gridColor = useRecoilValue(gridColorState)
|
const gridColor = useRecoilValue(gridColorState)
|
||||||
const [tempGridMode, setTempGridMode] = useRecoilState(tempGridModeState)
|
|
||||||
const isGridDisplay = useRecoilValue(gridDisplaySelector)
|
const isGridDisplay = useRecoilValue(gridDisplaySelector)
|
||||||
|
const [tempGridMode, setTempGridMode] = useRecoilState(tempGridModeState)
|
||||||
|
|
||||||
const tempGridModeStateLeftClickEvent = (e) => {
|
const tempGridModeStateLeftClickEvent = (e) => {
|
||||||
//임의 그리드 모드일 경우
|
//임의 그리드 모드일 경우
|
||||||
let pointer = canvas.getPointer(e.e)
|
let pointer = canvas.getPointer(e.e)
|
||||||
@ -35,37 +36,8 @@ export function useTempGrid() {
|
|||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
const tempGridRightClickEvent = (e) => {
|
|
||||||
e.preventDefault()
|
|
||||||
e.stopPropagation()
|
|
||||||
//임의 그리드 모드일 경우
|
|
||||||
let pointer = { x: e.offsetX, y: e.offsetY }
|
|
||||||
|
|
||||||
const tempGrid = new fabric.Line([-1500, pointer.y, 2500, pointer.y], {
|
|
||||||
stroke: gridColor,
|
|
||||||
strokeWidth: 1,
|
|
||||||
selectable: true,
|
|
||||||
lockMovementX: true,
|
|
||||||
lockMovementY: true,
|
|
||||||
lockRotation: true,
|
|
||||||
lockScalingX: true,
|
|
||||||
lockScalingY: true,
|
|
||||||
strokeDashArray: [5, 2],
|
|
||||||
opacity: 0.3,
|
|
||||||
padding: GRID_PADDING,
|
|
||||||
name: 'tempGrid',
|
|
||||||
visible: isGridDisplay,
|
|
||||||
direction: 'horizontal',
|
|
||||||
})
|
|
||||||
|
|
||||||
canvas.add(tempGrid)
|
|
||||||
|
|
||||||
canvas.renderAll()
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tempGridModeStateLeftClickEvent,
|
tempGridModeStateLeftClickEvent,
|
||||||
tempGridRightClickEvent,
|
|
||||||
tempGridMode,
|
tempGridMode,
|
||||||
setTempGridMode,
|
setTempGridMode,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,8 +126,8 @@
|
|||||||
"modal.module.basic.settting.module.error7": "下在ビーチを入力してください。\n(屋根材: {0})",
|
"modal.module.basic.settting.module.error7": "下在ビーチを入力してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error8": "モジュール配置領域の値を入力してください。\n(屋根材: {0})",
|
"modal.module.basic.settting.module.error8": "モジュール配置領域の値を入力してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error9": "軒側の配置領域の値を{0} mm以上に変更してください。\n(屋根材: {1})",
|
"modal.module.basic.settting.module.error9": "軒側の配置領域の値を{0} mm以上に変更してください。\n(屋根材: {1})",
|
||||||
"modal.module.basic.settting.module.error10": "棟側の配置領域の値を{0} mm上に変更してください。\n(屋根材: {1})",
|
"modal.module.basic.settting.module.error10": "棟側の配置領域の値を{0} mm以上に変更してください。\n(屋根材: {1})",
|
||||||
"modal.module.basic.settting.module.error11": "ケラバ側の配置領域の値を{0} mm上に変更してください。\n(屋根材: {1})",
|
"modal.module.basic.settting.module.error11": "ケラバ側の配置領域の値を{0} mm以上に変更してください。\n(屋根材: {1})",
|
||||||
"modal.module.basic.settting.module.error12": "施工方法を選択してください。\n(屋根材: {0})",
|
"modal.module.basic.settting.module.error12": "施工方法を選択してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.setting.module.placement": "モジュールの配置",
|
"modal.module.basic.setting.module.placement": "モジュールの配置",
|
||||||
"modal.module.basic.setting.module.placement.select.fitting.type": "設置形態を選択してください。",
|
"modal.module.basic.setting.module.placement.select.fitting.type": "設置形態を選択してください。",
|
||||||
@ -346,9 +346,9 @@
|
|||||||
"modal.actual.size.setting.not.exist.size": "実際の寸法の長さを入力してください",
|
"modal.actual.size.setting.not.exist.size": "実際の寸法の長さを入力してください",
|
||||||
"modal.actual.size.setting.plane.size.length": "廊下寸法の長さ",
|
"modal.actual.size.setting.plane.size.length": "廊下寸法の長さ",
|
||||||
"modal.actual.size.setting.actual.size.length": "実寸長",
|
"modal.actual.size.setting.actual.size.length": "実寸長",
|
||||||
"plan.message.confirm.save": "プラン保存しますか?",
|
"plan.message.confirm.save": "プラン保存しますか??",
|
||||||
"plan.message.confirm.copy": "プランコピーしますか?",
|
"plan.message.confirm.copy": "プランコピーしますか??",
|
||||||
"plan.message.confirm.delete": "プラン削除しますか?",
|
"plan.message.confirm.delete": "プラン削除しますか??",
|
||||||
"plan.message.save": "保存されました。",
|
"plan.message.save": "保存されました。",
|
||||||
"plan.message.delete": "削除されました。",
|
"plan.message.delete": "削除されました。",
|
||||||
"plan.message.leave": "物件状況(リスト)に移動しますか? [はい]を選択した場合は保存して移動します。",
|
"plan.message.leave": "物件状況(リスト)に移動しますか? [はい]を選択した場合は保存して移動します。",
|
||||||
|
|||||||
@ -1052,6 +1052,7 @@
|
|||||||
"module.not.found": "모듈을 선택하세요.",
|
"module.not.found": "모듈을 선택하세요.",
|
||||||
"module.circuit.minimun.error": "회로번호는 1 이상입력해주세요.",
|
"module.circuit.minimun.error": "회로번호는 1 이상입력해주세요.",
|
||||||
"module.already.exist.error": "회로번호가 같은 다른 파워 컨디셔너 모듈이 있습니다. 다른 회로번호를 설정하십시오.",
|
"module.already.exist.error": "회로번호가 같은 다른 파워 컨디셔너 모듈이 있습니다. 다른 회로번호를 설정하십시오.",
|
||||||
|
"module.circuit.fix.not.same.roof.error": "다른 지붕면의 모듈이 선택되어 있습니다. 모듈 선택을 다시 하세요.",
|
||||||
"construction.length.difference": "지붕면 공법을 모두 선택하십시오.",
|
"construction.length.difference": "지붕면 공법을 모두 선택하십시오.",
|
||||||
"menu.validation.canvas.roof": "패널을 배치하려면 지붕면을 입력해야 합니다.",
|
"menu.validation.canvas.roof": "패널을 배치하려면 지붕면을 입력해야 합니다.",
|
||||||
"batch.object.outside.roof": "오브젝트는 지붕내에 설치해야 합니다.",
|
"batch.object.outside.roof": "오브젝트는 지붕내에 설치해야 합니다.",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user