UNPKG

label-print-design

Version:

操作简单,组件丰富的一站式打印解决方案打印设计器

1 lines 10.9 kB
{"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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"}