지붕모양 지그재그패턴 추가

This commit is contained in:
yjnoh 2024-07-22 16:17:35 +09:00
parent 88a3ee601c
commit e34f3c002a
2 changed files with 41 additions and 22 deletions

View File

@ -29,8 +29,19 @@ export default function Roof2() {
const [showControl, setShowControl] = useState(false) const [showControl, setShowControl] = useState(false)
const { mode, changeMode, handleClear, fillCellInPolygon, zoomIn, zoomOut, zoom, togglePolygonLine, handleOuterlinesTest2, applyTemplateB } = const {
useMode() mode,
changeMode,
handleClear,
fillCellInPolygon,
zoomIn,
zoomOut,
zoom,
togglePolygonLine,
handleOuterlinesTest2,
applyTemplateB,
makeRoofPatternPolygon,
} = useMode()
useEffect(() => { useEffect(() => {
if (!canvas) { if (!canvas) {
@ -240,6 +251,10 @@ export default function Roof2() {
setShowControl(!showControl) setShowControl(!showControl)
} }
const drawRoofPatterns = (roofStyle) => {
makeRoofPatternPolygon(roofStyle)
}
return ( return (
<> <>
{canvas && ( {canvas && (
@ -267,12 +282,11 @@ export default function Roof2() {
<Button className="m-1 p-2" color={`${mode === Mode.TEMPLATE ? 'primary' : 'default'}`} onClick={() => changeMode(canvas, Mode.PATTERNB)}> <Button className="m-1 p-2" color={`${mode === Mode.TEMPLATE ? 'primary' : 'default'}`} onClick={() => changeMode(canvas, Mode.PATTERNB)}>
템플릿(B 패턴) 템플릿(B 패턴)
</Button> </Button>
<Button <Button className="m-1 p-2" color={`${mode === Mode.TEMPLATE ? 'primary' : 'default'}`} onClick={() => drawRoofPatterns(1)}>
className="m-1 p-2" 지붕패턴1
color={`${mode === Mode.TEMPLATE ? 'primary' : 'default'}`} </Button>
onClick={() => changeMode(canvas, Mode.ROOF_PATTERN)} <Button className="m-1 p-2" color={`${mode === Mode.TEMPLATE ? 'primary' : 'default'}`} onClick={() => drawRoofPatterns(2)}>
> 지붕패턴2
지붕패턴
</Button> </Button>
<Button className="m-1 p-2" color={`${mode === Mode.TEXTBOX ? 'primary' : 'default'}`} onClick={() => changeMode(canvas, Mode.TEXTBOX)}> <Button className="m-1 p-2" color={`${mode === Mode.TEXTBOX ? 'primary' : 'default'}`} onClick={() => changeMode(canvas, Mode.TEXTBOX)}>
텍스트박스 모드 텍스트박스 모드

View File

@ -2140,7 +2140,7 @@ export function useMode() {
canvas.renderAll() canvas.renderAll()
} }
const makeRoofPatternPolygon = () => { const makeRoofPatternPolygon = (roofStyle) => {
if (Object.keys(roofPolygonPattern).length === 0 && roofPolygonPattern.constructor === Object) { if (Object.keys(roofPolygonPattern).length === 0 && roofPolygonPattern.constructor === Object) {
alert('객체가 비어있습니다.') alert('객체가 비어있습니다.')
return return
@ -2157,22 +2157,26 @@ export function useMode() {
// 패턴 소스를 위한 임시 캔버스 생성 // 패턴 소스를 위한 임시 캔버스 생성
const patternSourceCanvas = document.createElement('canvas') const patternSourceCanvas = document.createElement('canvas')
patternSourceCanvas.width = 20 * ratio patternSourceCanvas.width = 30 * ratio
patternSourceCanvas.height = 15 * ratio patternSourceCanvas.height = 30 * ratio
const ctx = patternSourceCanvas.getContext('2d') const ctx = patternSourceCanvas.getContext('2d')
// 벽돌 패턴 그리기 // 벽돌 패턴 그리기
ctx.scale(ratio, ratio) ctx.scale(ratio, ratio)
ctx.strokeStyle = 'green' ctx.strokeStyle = 'green'
ctx.lineWidth = 0.1 ctx.lineWidth = 0.2
// 첫 번째 행 벽돌 // 첫 번째 행 벽돌
ctx.strokeRect(0, 0, 20, 15) if (roofStyle === 2) {
// ctx.strokeRect(30, 20, 30, 20) //지그재그
// // 두 번째 행 벽돌
// // 두 번째 행 벽돌 ctx.strokeRect(0, 0, 30, 15)
// ctx.strokeRect(-30, 20, 60, 20) ctx.strokeRect(30, 15, 30, 15)
// ctx.strokeRect(0, 40, 60, 20) ctx.strokeRect(-15, 15, 30, 15)
ctx.strokeRect(0, 30, 30, 15)
} else {
ctx.strokeRect(0, 0, 30, 30) // 원패턴일때랑 지그재그일때랑은 다르게 들어가야함
}
// 패턴 생성 // 패턴 생성
const pattern = new fabric.Pattern({ const pattern = new fabric.Pattern({
@ -2190,14 +2194,14 @@ export function useMode() {
const middleRoof = new QPolygon(roofPolygonPattern.middleRoofPolygon, commonOption) const middleRoof = new QPolygon(roofPolygonPattern.middleRoofPolygon, commonOption)
const smallRoof = new QPolygon(roofPolygonPattern.smallRoofPolygon, commonOption) const smallRoof = new QPolygon(roofPolygonPattern.smallRoofPolygon, commonOption)
bigRoof.sendToBack() //객체를 가장 뒤로
middleRoof.sendToBack()
smallRoof.sendToBack()
bigRoof.setViewLengthText(false) //치수 필요없음 bigRoof.setViewLengthText(false) //치수 필요없음
middleRoof.setViewLengthText(false) middleRoof.setViewLengthText(false)
smallRoof.setViewLengthText(false) smallRoof.setViewLengthText(false)
bigRoof.sendToBack() //객체를 가장 뒤로
middleRoof.sendToBack()
smallRoof.sendToBack()
canvas.add(bigRoof) //캔버스 객체 추가 canvas.add(bigRoof) //캔버스 객체 추가
canvas.add(middleRoof) canvas.add(middleRoof)
canvas.add(smallRoof) canvas.add(smallRoof)
@ -2214,5 +2218,6 @@ export function useMode() {
zoom, zoom,
togglePolygonLine, togglePolygonLine,
handleOuterlinesTest2, handleOuterlinesTest2,
makeRoofPatternPolygon,
} }
} }