{"version":3,"file":"svgUtil.mjs","sources":["../../../../src/utils/svgUtil.ts"],"sourcesContent":["import { MyElement, Line, Point } from '@myprint/design/types/entity'\nimport * as d3Selection from 'd3-selection'\n\n// import {unit2px} from \"../utils/devicePixelRatio\";\n\n// export function computeLineAngle(lineA: Line, lineB: Line) {\n//     // controlLineStart\n//     // 线段1的起点和终点坐标\n//     // var line1Start = {x: 0, y: 0};\n//     // var line1End = {x: 1, y: 1};\n//\n// // 线段2的起点和终点坐标\n// //     var line2Start = {x: 0, y: 0};\n// //     var line2End = {x: 1, y: -1};\n//     if (true) {\n//         return calculateAngleBetweenSegments(lineA.start.x, lineA.start.y,\n//             lineA.end.x, lineA.end.y,\n//             lineB.start.x, lineB.start.y,\n//             lineB.end.x, lineB.end.y\n//         )\n//     }\n//\n// // 计算线段1的方向向量\n//     var vec1 = {x: lineA.end.x! - lineA.start.x!, y: lineA.end.y! - lineA.start.y!};\n//\n// // 计算线段2的方向向量\n//     var vec2 = {x: lineB.end.x - lineB.start.x, y: lineB.end.y - lineB.start.y};\n//\n// // 计算向量的点积\n//     var dotProduct = vec1.x * vec2.x + vec1.y * vec2.y;\n//\n// // 计算向量的模长\n//     var length1 = Math.sqrt(vec1.x * vec1.x + vec1.y * vec1.y);\n//     var length2 = Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y);\n//\n// // 计算夹角的余弦值\n//     var cosine = dotProduct / (length1 * length2);\n//\n// // 将余弦值转换为角度值\n//     var rad = Math.acos(cosine);\n//     var angle = rad * (180 / Math.PI);\n//\n//     console.log(\"两条线段的夹角为：\" + angle + \"度\");\n//\n//     return rad\n// }\n\n// 计算两个线段之间的夹角（支持到360度）\nexport function computeLineAngle(lineA: Line, lineB: Line) {\n    var dx1 = lineA.end.x - lineA.start.x\n    var dy1 = lineA.end.y - lineA.start.y\n    var dx2 = lineB.end.x - lineB.start.x\n    var dy2 = lineB.end.y - lineB.start.y\n\n    var angle1 = Math.atan2(dy1, dx1)\n    var angle2 = Math.atan2(dy2, dx2)\n\n    var angle = angle2 - angle1\n    if (angle < 0) {\n        angle += 2 * Math.PI\n    }\n    return angle\n    // return angle * (180 / Math.PI);\n}\n\n// 弧度转角度\nexport function rad2Ang(angle: number) {\n    return angle * (180 / Math.PI)\n}\n\n\nexport function rotatePoint(centerX, centerY, x, y, angle) {\n    // console.log(centerX, centerY, x, y, angle)\n    return {\n        x: centerX + Math.cos(angle) * (x - centerX) - Math.sin(angle) * (y - centerY),\n        y: centerY + Math.sin(angle) * (x - centerX) + Math.cos(angle) * (y - centerY)\n    }\n}\n\nexport function dist(p, m) {\n    if (!m) {\n        return 0\n    }\n    return Math.sqrt((p[0] - m.x) ** 2 + (p[1] - m.y) ** 2)\n}\n\n\nexport function updateSvg(chart, svgOptions, draw) {\n    // console.log(draw())\n    const element = svgOptions.element as MyElement\n    const chartSvg = d3Selection.select(chart)\n    const path = draw(chartSvg)\n    if (path) {\n        chartSvg.select('.u-path')\n            // .style('stroke', 'white')\n            .style('stroke', element.option.color ? element.option.color : 'black')\n            // .style(\"stroke\", element.option.color ? element.option.color : \"white\")\n            .style('fill', element.option.background ? element.option.background : 'none')\n            // .attr(\"stroke-width\", 1.9)\n            .attr('opacity', element.option.opacity != undefined ? element.option.opacity : 1)\n            .attr('d', path)\n    }\n\n    // .attr(\"transform\", \"rotate(45,100,100)\")\n    // .call(drag)\n\n\n    // 辅助线/点\n    if (svgOptions.drawAuxiliary) {\n        if (svgOptions.allPoint) {\n            chartSvg\n                .selectAll('.u-point')\n                .style('stroke', 'var(--drag-h-color)')\n                .style('fill', 'var(--drag-h-color)')\n                .style('display', null)\n\n                .data(svgOptions.allPoint)\n                .join(enter =>\n                    enter\n                        .append('g')\n                        .classed('u-point', true)\n                        .style('fill', 'white')\n                        .call(g => {\n                            g.append('circle').attr('r', 3)\n\n                        })\n                )\n                .attr('transform', (d: Point) => `translate(${[d.x, d.y]})`)\n        }\n\n        if (svgOptions.virtualPoint) {\n            chartSvg\n                .selectAll('.uv-point')\n                .style('stroke', 'var(--dnb-highlight-color)')\n                .style('fill', 'var(--dnb-highlight-color)')\n                .style('display', null)\n\n                .data(svgOptions.virtualPoint)\n                .join(enter =>\n                    enter\n                        .append('g')\n                        .classed('uv-point', true)\n                        .style('fill', 'white')\n                        .call(g => {\n                            g.append('circle').attr('r', 3)\n                        })\n                )\n                .attr('transform', (d: Point) => `translate(${[d.x, d.y]})`)\n        }\n\n        if (svgOptions.controlLine) {\n            chartSvg\n                .selectAll('.u-line')\n                .style('stroke', '#aaa')\n                .style('display', null)\n                .style('stroke-dasharray', '2 2')\n                .data(svgOptions.controlLine)\n                .join('line')\n                .attr('x1', (d: Line) => d.start.x)\n                .attr('y1', (d: Line) => d.start.y)\n                .attr('x2', (d: Line) => d.end.x)\n                .attr('y2', (d: Line) => d.end.y)\n                .classed('u-line', true)\n        }\n\n    } else {\n        chartSvg\n            .selectAll('.u-point')\n            .style('display', 'none')\n        chartSvg.selectAll('.uv-point')\n            .style('display', 'none')\n        chartSvg.selectAll('.u-line')\n            .style('display', 'none')\n    }\n    // console.log(JSON.stringify(points))\n\n}\n"],"names":[],"mappings":"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"}