diff --git a/src/app/api/html2canvas/route.js b/src/app/api/html2canvas/route.js
deleted file mode 100644
index 21f93c82..00000000
--- a/src/app/api/html2canvas/route.js
+++ /dev/null
@@ -1,22 +0,0 @@
-'use server'
-
-import fs from 'fs/promises'
-
-import { NextResponse } from 'next/server'
-import { writeImage, writeImageBuffer } from '@/lib/fileAction'
-
-export async function GET(req) {
- const path = 'public/plan-map-images'
- const q = req.nextUrl.searchParams.get('q')
- const fileNm = req.nextUrl.searchParams.get('fileNm')
- const zoom = req.nextUrl.searchParams.get('zoom')
- const targetUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${q}&zoom=${zoom}&maptype=satellite&size=640x640&scale=1&key=AIzaSyDO7nVR1N_D2tKy60hgGFavpLaXkHpiHpc`
- const decodeUrl = decodeURIComponent(targetUrl)
-
- const response = await fetch(decodeUrl)
- const data = await response.arrayBuffer()
- const buffer = Buffer.from(data)
- await writeImage(fileNm, buffer)
-
- return NextResponse.json({ fileNm: `${fileNm}.png` })
-}
diff --git a/src/app/api/image-upload/route.js b/src/app/api/image-upload/route.js
deleted file mode 100644
index 219544fe..00000000
--- a/src/app/api/image-upload/route.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use server'
-
-import { NextResponse } from 'next/server'
-import { writeImage } from '@/lib/fileAction'
-
-export async function POST(req) {
- const formData = await req.formData()
- const file = formData.get('file')
- const fileName = formData.get('fileName')
- const arrayBuffer = await file.arrayBuffer()
- const buffer = Buffer.from(arrayBuffer)
- await writeImage(fileName, buffer)
-
- return NextResponse.json({ fileNm: `${fileName}.png` })
-}
diff --git a/src/app/api/swr-tutorial/route.js b/src/app/api/swr-tutorial/route.js
deleted file mode 100644
index 99ebaf15..00000000
--- a/src/app/api/swr-tutorial/route.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { NextResponse } from 'next/server'
-
-const defaultData = [
- {
- id: 1,
- name: 'John Doe',
- email: 'john.doe@example.com',
- },
- {
- id: 2,
- name: 'Jane Lee',
- email: 'jane.lee@example.com',
- },
-]
-
-export async function GET(req, res) {
- return NextResponse.json(defaultData)
-}
-
-export const POST = async (req, res) => {
- const { id, name, email } = await req.json()
- const newData = { id, name, email }
- console.log('๐ ~ POST ~ newData:', newData)
- return NextResponse.json([...defaultData, newData])
-}
diff --git a/src/app/playground/page.jsx b/src/app/playground/page.jsx
deleted file mode 100644
index 3a3ad1d1..00000000
--- a/src/app/playground/page.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import Playground from '@/components/Playground'
-
-export default async function PlaygroundPage() {
- return (
- <>
-
- >
- )
-}
diff --git a/src/app/roof/page.jsx b/src/app/roof/page.jsx
deleted file mode 100644
index 960ffa89..00000000
--- a/src/app/roof/page.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import Hero from '@/components/Hero'
-import Roof from '@/components/Roof'
-
-export default async function RoofPage() {
- return (
- <>
-
-
Loading...
- // }
-
- // if (error) {
- // return Error...
- // }
-
- // const [moduleSelectionDataPlanListStore, setModuleSelectionDataPlanListStore] = useRecoilState(moduleSelectionDataPlanListState)
- // useEffect(() => {
- // console.log('๐ ~ Playground ~ moduleSelectionDataPlanListStore:', moduleSelectionDataPlanListStore)
- // }, [moduleSelectionDataPlanListStore])
- // const { trigger: canvasPopupStatusTrigger } = useCanvasPopupStatusController({ objectNo: 'R201T01241120001', planNo: 2, popupType: 2 })
-
- return (
- <>
-
-
์ด ์์ญ์ ํ
์คํธ์
๋๋ค.
-
- {' '}
- {' '}
- {' '}
- {' '}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{testVar}
-
-
-
Sass ํ
์คํธ์
๋๋ค.
-
-
test']) }}>
-
-
React ColorPicker
-
-
{color}
-
-
-
์บ๋ ํ์ผ ์ด๋ฏธ์ง ์ฌ์ฉ
-
-
-
-
-
-
-
๊ตฌ๊ธ ๋งต ์ด๋ฏธ์ง ์ฌ์ฉ
-
-
-
-
- {useGoogleMapFile && (
- <>
-
-
Zoom Controller : {zoom}
-
} className="mx-2" onClick={() => handleZoom('up')}>
-
} className="mx-2" onClick={() => handleZoom('down')}>
-
-
-
-
- >
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
{managementStateLoaded?.objectNo}
-
*/}
-
-
-
- {/*
- {tutoData &&
- tutoData.map((item) => (
-
- {item.name} / {item.email}
-
- ))}
-
-
-
-
-
-
-
*/}
-
-
-
-
-
-
-
- >
- )
-}
diff --git a/src/components/Roof.jsx b/src/components/Roof.jsx
deleted file mode 100644
index 51ba639e..00000000
--- a/src/components/Roof.jsx
+++ /dev/null
@@ -1,351 +0,0 @@
-'use client'
-
-import { useEffect } from 'react'
-import { addDistanceTextToPolygon, getDistance } from '@/util/canvas-util'
-import { useCanvas } from '@/hooks/useCanvas'
-import { fabric } from 'fabric'
-import { v4 as uuidv4 } from 'uuid'
-
-export default function Roof() {
- const {
- canvas,
- addShape,
- handleUndo,
- handleRedo,
- handleClear,
- handleCopy,
- handleDelete,
- handleSave,
- handlePaste,
- handleRotate,
- attachCustomControlOnPolygon,
- saveImage,
- handleFlip,
- } = useCanvas('canvas')
-
- useEffect(() => {
- let circle = new fabric.Circle({
- radius: 40,
- fill: 'rgba(200, 0, 0, 0.3)',
- originX: 'center',
- originY: 'center',
- })
-
- let text = new fabric.Textbox('AJLoveChina', {
- originX: 'center',
- originY: 'center',
- textAlign: 'center',
- fontSize: 12,
- })
-
- let group = new fabric.Group([circle, text], {
- left: 100,
- top: 100,
- originX: 'center',
- originY: 'center',
- })
-
- group.on('mousedblclick', () => {
- // textForEditing is temporary obj,
- // and will be removed after editing
- console.log(text.type)
- let textForEditing = new fabric.Textbox(text.text, {
- originX: 'center',
- originY: 'center',
- textAlign: text.textAlign,
- fontSize: text.fontSize,
-
- left: group.left,
- top: group.top,
- })
-
- // hide group inside text
- text.visible = false
- // note important, text cannot be hidden without this
- group.addWithUpdate()
-
- textForEditing.visible = true
- // do not give controls, do not allow move/resize/rotation on this
- textForEditing.hasConstrols = false
-
- // now add this temporary obj to canvas
- canvas.add(textForEditing)
- canvas.setActiveObject(textForEditing)
- // make the cursor showing
- textForEditing.enterEditing()
- textForEditing.selectAll()
-
- // editing:exited means you click outside of the textForEditing
- textForEditing.on('editing:exited', () => {
- let newVal = textForEditing.text
- let oldVal = text.text
-
- // then we check if text is changed
- if (newVal !== oldVal) {
- text.set({
- text: newVal,
- visible: true,
- })
-
- // comment before, you must call this
- group.addWithUpdate()
-
- // we do not need textForEditing anymore
- textForEditing.visible = false
- canvas?.remove(textForEditing)
-
- // optional, buf for better user experience
- canvas?.setActiveObject(group)
- }
- })
- })
-
- canvas?.add(group)
- }, [canvas])
-
- const addRect = () => {
- const rect = new fabric.Rect({
- height: 200,
- width: 200,
- top: 10,
- left: 10,
- opacity: 0.4,
- fill: randomColor(),
- stroke: 'red',
- name: uuidv4(),
- })
-
- addShape(rect)
- }
-
- const addHorizontalLine = () => {
- const { x1, y1, x2, y2 } = { x1: 20, y1: 100, x2: 220, y2: 100 }
- /**
- * ์์X,์์Y,๋์ฐฉX,๋์ฐฉY ์ขํ
- */
- const horizontalLine = new fabric.Line([x1, y1, x2, y2], {
- name: uuidv4(),
- stroke: 'red',
- strokeWidth: 3,
- selectable: true,
- })
-
- const text = new fabric.Text(getDistance(x1, y1, x2, y2).toString(), {
- fontSize: 20,
- left: (x2 - x1) / 2,
- top: y1 - 20,
- })
-
- const group = new fabric.Group([horizontalLine, text], {
- left: 20,
- top: 20,
- })
-
- // addShape(horizontalLine)
- addShape(group)
- console.log(JSON.stringify(canvas))
- }
-
- const addVerticalLine = () => {
- const verticalLine = new fabric.Line([10, 10, 10, 100], {
- name: uuidv4(),
- stroke: 'red',
- strokeWidth: 3,
- selectable: true,
- })
-
- addShape(verticalLine)
- }
-
- const addTriangle = () => {
- const triangle = new fabric.Triangle({
- name: uuidv4(),
- top: 50,
- left: 50,
- width: 100,
- stroke: randomColor(),
- strokeWidth: 3,
- })
-
- addShape(triangle)
- }
-
- const addTrapezoid = () => {
- const trapezoid = new fabric.Polygon(
- [
- { x: 100, y: 100 }, // ์ข์๋จ
- { x: 500, y: 100 }, // ์ฐ์๋จ
- { x: 750, y: 700 }, // ์ฐํ๋จ
- { x: 250, y: 400 }, // ์ขํ๋จ
- ],
- {
- name: uuidv4(),
- stroke: 'red',
- opacity: 0.4,
- strokeWidth: 3,
- selectable: true,
- objectCaching: false,
- },
- )
- attachCustomControlOnPolygon(trapezoid)
- const group = addDistanceTextToPolygon(trapezoid)
- addGroupClickEvent(group)
- canvas?.add(group)
- canvas?.renderAll()
- }
-
- // group์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ์ฌ ํด๋ฆญ ์ group์ ์ ๊ฑฐํ๊ณ object๋ค๋ง ๋จ๊ธฐ๋ ํจ์
- function addGroupClickEvent(group) {
- group.on('selected', (e) => {
- console.log(e)
- })
- group.on('mousedblclick', (e) => {
- // textForEditing is temporary obj,
- // and will be removed after editing
- const pointer = canvas?.getPointer(e.e) // ๋ง์ฐ์ค ํด๋ฆญ ์์น ๊ฐ์ ธ์ค๊ธฐ
- let minDistance = Infinity
- let closestTextbox = null
- const groupPoint = group.getCenterPoint()
- group.getObjects().forEach(function (object) {
- if (object.type === 'textbox') {
- // ๊ฐ์ฒด๊ฐ TextBox์ธ์ง ํ์ธ
-
- const objectCenter = object.getCenterPoint() // TextBox ๊ฐ์ฒด์ ์ค์ฌ์ ๊ฐ์ ธ์ค๊ธฐ
- const dx = objectCenter.x + groupPoint.x - pointer.x
- const dy = objectCenter.y + groupPoint.y - pointer.y
- const distance = Math.sqrt(dx * dx + dy * dy) // ๋ง์ฐ์ค ํด๋ฆญ ์์น์ TextBox ๊ฐ์ฒด ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
-
- if (distance < minDistance) {
- // ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง TextBox ๊ฐ์ฒด ์ฐพ๊ธฐ
- minDistance = distance
- closestTextbox = object
- }
- }
- })
-
- let textForEditing = new fabric.Textbox(closestTextbox.text, {
- originX: 'center',
- originY: 'center',
- textAlign: closestTextbox.textAlign,
- fontSize: closestTextbox.fontSize,
- left: closestTextbox.left + groupPoint.x,
- top: closestTextbox.top + groupPoint.y,
- })
-
- // hide group inside text
- closestTextbox.visible = false
- // note important, text cannot be hidden without this
- group.addWithUpdate()
-
- textForEditing.visible = true
- // do not give controls, do not allow move/resize/rotation on this
- textForEditing.hasConstrols = false
-
- // now add this temporary obj to canvas
- canvas?.add(textForEditing)
- canvas?.setActiveObject(textForEditing)
- // make the cursor showing
- textForEditing?.enterEditing()
- textForEditing?.selectAll()
-
- // editing:exited means you click outside of the textForEditing
- textForEditing?.on('editing:exited', () => {
- let newVal = textForEditing.text
-
- // then we check if text is changed
- closestTextbox.set({
- text: newVal,
- visible: true,
- })
-
- // comment before, you must call this
- group.addWithUpdate()
-
- // we do not need textForEditing anymore
- textForEditing.visible = false
- canvas?.remove(textForEditing)
-
- // optional, buf for better user experience
- canvas?.setActiveObject(group)
- })
- })
- }
-
- // IText๋ฅผ ์์ ํ ๋ ํด๋น ๊ฐ์ ๊ธธ์ด๋ก ๊ฐ๋ ๋ค๋ฅธ polygon์ ์์ฑํ๊ณ ๋ค์ ๊ทธ๋ฃนํํ๋ ํจ์
- function addTextModifiedEvent(text, polygon, index) {
- text.on('editing:exited', function () {})
- }
-
- const randomColor = () => {
- return '#' + Math.round(Math.random() * 0xffffff).toString(16)
- }
-
- return (
- <>
-