|
@@ -57,8 +57,7 @@ const props = defineProps({
|
|
|
type: Object
|
|
|
},
|
|
|
jsonData: {
|
|
|
- type: String,
|
|
|
- default: ''
|
|
|
+ type: Array
|
|
|
}
|
|
|
})
|
|
|
const state = reactive({
|
|
@@ -183,21 +182,21 @@ const loadInit = () => {
|
|
|
|
|
|
// nice try!
|
|
|
// console.log(props.jsonData)
|
|
|
- if (props.jsonData && props.jsonData.length > 0) {
|
|
|
- // console.log('load')
|
|
|
- state.canvas.loadFromJSON(props.jsonData, () => {
|
|
|
- let objects = state.canvas.getObjects()
|
|
|
- // console.log(objects)
|
|
|
- objects[0].selectable = false
|
|
|
- for (let i = 1; i < objects.length; i++) {
|
|
|
- objects[i].selectable = true
|
|
|
- }
|
|
|
- state.canvas.renderAll()
|
|
|
- })
|
|
|
- // console.log(state.canvas)
|
|
|
- state.loading = false
|
|
|
- return
|
|
|
- }
|
|
|
+ // if (props.jsonData && props.jsonData.length > 0) {
|
|
|
+ // // console.log('load')
|
|
|
+ // state.canvas.loadFromJSON(props.jsonData, () => {
|
|
|
+ // let objects = state.canvas.getObjects()
|
|
|
+ // // console.log(objects)
|
|
|
+ // objects[0].selectable = false
|
|
|
+ // for (let i = 1; i < objects.length; i++) {
|
|
|
+ // objects[i].selectable = true
|
|
|
+ // }
|
|
|
+ // state.canvas.renderAll()
|
|
|
+ // })
|
|
|
+ // // console.log(state.canvas)
|
|
|
+ // state.loading = false
|
|
|
+ // return
|
|
|
+ // }
|
|
|
|
|
|
let imgElement = new Image()
|
|
|
imgElement.src = props.src
|
|
@@ -217,86 +216,92 @@ const loadInit = () => {
|
|
|
state.realPoint.x = Math.floor(props.width / 2)
|
|
|
state.realPoint.y = Math.floor(props.height / 2)
|
|
|
|
|
|
- if (!(props.jsonData && props.jsonData.length > 0)) {
|
|
|
- let imgInstance = new fabric.Image(imgElement, {
|
|
|
- selectable: false,
|
|
|
- width: imgElement.width,
|
|
|
- height: imgElement.height,
|
|
|
- scaleX: state.radio,
|
|
|
- scaleY: state.radio
|
|
|
- })
|
|
|
- state.canvas.add(imgInstance)
|
|
|
- drawImage()
|
|
|
+ let imgInstance = new fabric.Image(imgElement, {
|
|
|
+ selectable: false,
|
|
|
+ width: imgElement.width,
|
|
|
+ height: imgElement.height,
|
|
|
+ scaleX: state.radio,
|
|
|
+ scaleY: state.radio
|
|
|
+ })
|
|
|
+ state.canvas.add(imgInstance)
|
|
|
+ if (props.jsonData && props.jsonData.length > 0) {
|
|
|
+ for (let i = 0; i < props.jsonData.length; i++) {
|
|
|
+ let config = props.jsonData[i]
|
|
|
+ let obj = new fabric.Path(config.pathString, config)
|
|
|
+ state.canvas.add(obj)
|
|
|
+ }
|
|
|
state.canvas.renderAll()
|
|
|
}
|
|
|
state.radio = state.canvas.getZoom()
|
|
|
state.loading = false
|
|
|
+ // console.log(state.realRadioX)
|
|
|
+ // console.log(state.realRadioY)
|
|
|
}
|
|
|
}
|
|
|
-const drawImage = () => {
|
|
|
- if (props.area === '') {
|
|
|
- clearAll()
|
|
|
- return
|
|
|
- }
|
|
|
- // console.log(props.area)
|
|
|
- let points = props.area.split(',').map(item => {
|
|
|
- let areas = item.split(';')
|
|
|
- let data = areas.map((ars, index) => {
|
|
|
- let arp = 0
|
|
|
- let ar = Number(ars)
|
|
|
- if (index % 2 == 0) {
|
|
|
- let dx = Math.abs(state.realPoint.x > ar ? state.realPoint.x - ar : state.realPoint.x + ar) / state.realRadioX
|
|
|
- let rdx = Math.abs(state.imgPoint.x - dx)
|
|
|
- arp = rdx
|
|
|
- } else {
|
|
|
- let dy = Math.abs(state.realPoint.y > ar ? state.realPoint.y - ar : state.realPoint.y + ar) / state.realRadioY
|
|
|
- let rdy = Math.abs(state.imgPoint.y - dy)
|
|
|
- arp = rdy
|
|
|
- }
|
|
|
- return Number(arp) * state.radio
|
|
|
- })
|
|
|
- return data
|
|
|
- })
|
|
|
- points.forEach(point => {
|
|
|
- drawImageObj(point)
|
|
|
- })
|
|
|
-}
|
|
|
-const drawImageObj = data => {
|
|
|
- let path = 'M '
|
|
|
- // debugger
|
|
|
- let points = [] as any
|
|
|
- let len = data.length / 2
|
|
|
- for (let i = 0; i < len; i++) {
|
|
|
- let idx = i * 2
|
|
|
- points.push({ x: data[idx], y: data[idx + 1] })
|
|
|
- path += `${data[idx]} ${data[idx + 1]} L `
|
|
|
- }
|
|
|
- let canvasObject = null as any
|
|
|
- if (points[0]?.y === points[1]?.y && points[2]?.y === points[3]?.y && points[0]?.x === points[3]?.x && points[1]?.x - points[2]?.x) {
|
|
|
- path = path.replace(/L\s$/g, 'z')
|
|
|
- canvasObject = new fabric.Path(path, {
|
|
|
- left: data[0],
|
|
|
- top: data[1],
|
|
|
- stroke: state.color,
|
|
|
- selectable: false,
|
|
|
- strokeWidth: state.drawWidth,
|
|
|
- fill: 'rgba(255, 255, 255, 0)',
|
|
|
- hasControls: false
|
|
|
- })
|
|
|
- } else {
|
|
|
- canvasObject = new fabric.Polygon(points, {
|
|
|
- stroke: state.color,
|
|
|
- strokeWidth: state.drawWidth,
|
|
|
- fill: 'rgba(255, 255, 255, 0)',
|
|
|
- opacity: 1,
|
|
|
- hasBorders: false,
|
|
|
- hasControls: false,
|
|
|
- evented: false
|
|
|
- })
|
|
|
- }
|
|
|
- canvasObject['points'] = points
|
|
|
- state.canvas.add(canvasObject)
|
|
|
-}
|
|
|
+// const drawImage = () => {
|
|
|
+// if (props.area === '') {
|
|
|
+// clearAll()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// // console.log(props.area)
|
|
|
+// let points = props.area.split(',').map(item => {
|
|
|
+// let areas = item.split(';')
|
|
|
+// let data = areas.map((ars, index) => {
|
|
|
+// let arp = 0
|
|
|
+// let ar = Number(ars)
|
|
|
+// if (index % 2 == 0) {
|
|
|
+// let dx = Math.abs(state.realPoint.x > ar ? state.realPoint.x - ar : state.realPoint.x + ar) / state.realRadioX
|
|
|
+// let rdx = Math.abs(state.imgPoint.x - dx)
|
|
|
+// arp = rdx
|
|
|
+// } else {
|
|
|
+// let dy = Math.abs(state.realPoint.y > ar ? state.realPoint.y - ar : state.realPoint.y + ar) / state.realRadioY
|
|
|
+// let rdy = Math.abs(state.imgPoint.y - dy)
|
|
|
+// arp = rdy
|
|
|
+// }
|
|
|
+// return Number(arp) * state.radio
|
|
|
+// })
|
|
|
+// return data
|
|
|
+// })
|
|
|
+// points.forEach(point => {
|
|
|
+// drawImageObj(point)
|
|
|
+// })
|
|
|
+// }
|
|
|
+// const drawImageObj = data => {
|
|
|
+// let path = 'M '
|
|
|
+// // debugger
|
|
|
+// let points = [] as any
|
|
|
+// let len = data.length / 2
|
|
|
+// for (let i = 0; i < len; i++) {
|
|
|
+// let idx = i * 2
|
|
|
+// points.push({ x: data[idx], y: data[idx + 1] })
|
|
|
+// path += `${data[idx]} ${data[idx + 1]} L `
|
|
|
+// }
|
|
|
+// let canvasObject = null as any
|
|
|
+// if (points[0]?.y === points[1]?.y && points[2]?.y === points[3]?.y && points[0]?.x === points[3]?.x && points[1]?.x - points[2]?.x) {
|
|
|
+// path = path.replace(/L\s$/g, 'z')
|
|
|
+// canvasObject = new fabric.Path(path, {
|
|
|
+// left: data[0],
|
|
|
+// top: data[1],
|
|
|
+// stroke: state.color,
|
|
|
+// selectable: false,
|
|
|
+// strokeWidth: state.drawWidth,
|
|
|
+// fill: 'rgba(255, 255, 255, 0)',
|
|
|
+// hasControls: false
|
|
|
+// })
|
|
|
+// } else {
|
|
|
+// canvasObject = new fabric.Polygon(points, {
|
|
|
+// stroke: state.color,
|
|
|
+// strokeWidth: state.drawWidth,
|
|
|
+// fill: 'rgba(255, 255, 255, 0)',
|
|
|
+// opacity: 1,
|
|
|
+// hasBorders: false,
|
|
|
+// hasControls: false,
|
|
|
+// evented: false
|
|
|
+// })
|
|
|
+// }
|
|
|
+// canvasObject['points'] = points
|
|
|
+// state.canvas.add(canvasObject)
|
|
|
+// }
|
|
|
|
|
|
const selectLastObject = () => {
|
|
|
let objects = state.canvas.getObjects()
|
|
@@ -788,7 +793,14 @@ const getData = () => {
|
|
|
x: getPoint(aCoords[mark].x),
|
|
|
y: getPoint(aCoords[mark].y)
|
|
|
}
|
|
|
- point['nodes'].push(getRealPoint(poi))
|
|
|
+ // console.log(poi)
|
|
|
+ poi = getRealPoint(poi)
|
|
|
+ // console.log(poi)
|
|
|
+ poi.x = poi.x / state.realRadioX / 1920
|
|
|
+ poi.y = poi.y / state.realRadioY / 1080
|
|
|
+ // console.log(poi)
|
|
|
+ point['nodes'].push(poi)
|
|
|
+ // point['nodes'].push(getRealPoint(poi))
|
|
|
})
|
|
|
}
|
|
|
// if (item.points && item.points.length === 2) {
|