{"version":3,"file":"svg-polygon-line.vue2.mjs","sources":["../../../../../../src/components/design/svg/svg-polygon-line.vue"],"sourcesContent":["<template>\n    <svg-base\n        :element=\"element\"\n        :svgOptions=\"svgOptions\"\n        :draw=\"draw\"\n        :dragStart=\"dragStart\"\n        :dragIng=\"dragIng\"\n        :dragEnd=\"dragEnd\"\n        :doubleClick=\"doubleClick\"\n    />\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive } from 'vue-demi';\nimport * as d3Path from 'd3-path';\nimport { Path } from 'd3-path';\nimport { Line, MyElement, PointLabel } from '@myprint/design/types/entity';\nimport { unit2px } from '@myprint/design/utils/devicePixelRatio';\nimport { computeLineAngle, rotatePoint } from '@myprint/design/utils/svgUtil';\nimport { computedShapeBound, getRecursionParentPanel } from '@myprint/design/utils/elementUtil';\nimport { moveableDragOffsetResize } from '@myprint/design/plugins/moveable/moveable';\nimport SvgBase from '@myprint/design/components/design/svg/svg-base.vue';\nimport { D3DragEvent } from '@myprint/design/types/d3Type';\nimport { stringify } from '@myprint/design/utils/utils';\nimport { arrayRemove } from '@myprint/design/utils/arrays';\n\nconst props = withDefaults(defineProps<{\n    element?: MyElement\n}>(), {\n    element: () => ({} as MyElement)\n});\nlet orgPoint;\n\nconst svgOptions = reactive({\n    width: 0,\n    height: 0,\n    // 辅助线\n    controlLine: [] as Array<Line>,\n    rotateLineStart: {} as PointLabel,\n    rotateLineEnd: {} as PointLabel,\n    rotateLineEndDragPoint: {} as PointLabel,\n    // svg 形状点\n    linePoints: [] as PointLabel[],\n    // svg 形状点(包括控制点)\n    allPoint: [] as Array<PointLabel>,\n    virtualPoint: [] as Array<PointLabel>\n});\n\nsvgOptions.width = unit2px(props.element.width, getRecursionParentPanel(props.element));\nsvgOptions.height = unit2px(props.element.height, getRecursionParentPanel(props.element));\n\ninitPoint();\n\nfunction initPoint() {\n    const data = JSON.parse(props.element.data);\n    svgOptions.linePoints = data.points;\n    svgOptions.rotateLineEndDragPoint = { ...svgOptions.rotateLineEnd };\n    \n    svgOptions.rotateLineStart = { x: svgOptions.width / 2, y: svgOptions.height / 2 } as PointLabel;\n    svgOptions.rotateLineEnd = { x: svgOptions.width / 2, y: -20, type: 'rotate' } as PointLabel;\n    svgOptions.allPoint = [...svgOptions.linePoints, svgOptions.rotateLineEnd];\n    svgOptions.controlLine = [{ start: svgOptions.rotateLineStart, end: svgOptions.rotateLineEnd }];\n}\n\nfunction dragStart(subject: PointLabel) {\n    if (subject.type == 'rotate') {\n        orgPoint = JSON.parse(JSON.stringify(svgOptions.allPoint));\n        svgOptions.rotateLineEndDragPoint = { ...svgOptions.rotateLineEnd };\n    }\n}\n\nfunction dragIng(subject: PointLabel, event: D3DragEvent, dx: number, dy: number) {\n    subject.x = event.x + dx;\n    subject.y = event.y + dy;\n    \n    if (subject.type == 'rotate') {\n        const angle = computeLineAngle({\n                start: svgOptions.rotateLineStart,\n                end: svgOptions.rotateLineEndDragPoint\n            },\n            { start: svgOptions.rotateLineStart, end: { x: subject.x, y: subject.y } });\n        const centerX = svgOptions.width / 2;\n        const centerY = svgOptions.height / 2;\n        for (let i = 0; i < svgOptions.allPoint.length; i++) {\n            let point = orgPoint[i];\n            const po = rotatePoint(centerX, centerY, point.x, point.y, angle);\n            svgOptions.allPoint[i].x = po.x;\n            svgOptions.allPoint[i].y = po.y;\n        }\n    }\n}\n\nfunction dragEnd() {\n    const rect = computedShapeBound(svgOptions.linePoints);\n    \n    moveableDragOffsetResize(rect.x, rect.y, rect.width, rect.height, props.element);\n    \n    svgOptions.width = rect.width;\n    svgOptions.height = rect.height;\n    // 偏移svg\n    for (let allPointElement of svgOptions.allPoint) {\n        allPointElement.x -= rect.x;\n        allPointElement.y -= rect.y;\n    }\n    svgOptions.rotateLineStart.x = rect.width / 2;\n    svgOptions.rotateLineStart.y = rect.height / 2;\n    svgOptions.rotateLineEnd.x = rect.width / 2;\n    svgOptions.rotateLineEnd.y = -20;\n    \n    props.element.data = stringify({ points: svgOptions.linePoints }, 'insertIndex');\n}\n\nfunction doubleClick(subject: PointLabel) {\n    arrayRemove(svgOptions.allPoint, subject);\n    arrayRemove(svgOptions.linePoints, subject);\n    dragEnd();\n}\n\nfunction draw() {\n    let path: Path = d3Path.path();\n    \n    path.moveTo(svgOptions.linePoints[0].x, svgOptions.linePoints[0].y);\n    for (let i = 1; i < svgOptions.linePoints.length; i++) {\n        path.lineTo(svgOptions.linePoints[i].x, svgOptions.linePoints[i].y);\n    }\n    path.closePath();\n    \n    svgOptions.virtualPoint.length = 0;\n    \n    if (svgOptions.linePoints.length > 1) {\n        for (let i = 0; i < svgOptions.linePoints.length - 1; i++) {\n            const start = svgOptions.linePoints[i];\n            const end = svgOptions.linePoints[i + 1];\n            svgOptions.virtualPoint.push(\n                {\n                    x: (start.x + end.x) / 2,\n                    y: (start.y + end.y) / 2,\n                    type: 'virtual',\n                    insertIndex: i + 1\n                }\n            );\n        }\n        \n        const start = svgOptions.linePoints[svgOptions.linePoints.length - 1];\n        const end = svgOptions.linePoints[0];\n        svgOptions.virtualPoint.push(\n            {\n                x: (start.x + end.x) / 2,\n                y: (start.y + end.y) / 2,\n                type: 'virtual',\n                insertIndex: svgOptions.linePoints.length\n            }\n        );\n    }\n    \n    return path;\n}\n\n</script>\n"],"names":["start","end"],"mappings":"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"}