{"version":3,"file":"weave.cjs","sources":["../../../../../src/elements/oscilloscope/renderers/weave.js"],"sourcesContent":["import paper from '@chnak/paper';\n\n/**\n * 波形编织样式默认配置\n */\nexport const defaultConfig = {\n  weaveLayers: 5, // 编织层数\n  weaveLayerSpacing: 30, // 层间距\n  weaveSpeed: 0.5, // 编织动画速度\n  particleColors: [ // 颜色数组\n    '#ff0080', '#ff4080', '#ff8000', '#ffc000',\n    '#ffff00', '#80ff00', '#00ff80', '#00ffff',\n    '#0080ff', '#8000ff', '#ff00ff', '#ff0080',\n  ],\n};\n\n/**\n * 波形编织渲染器（多条波形交织在一起）\n * @param {Object} element - 元素实例\n * @param {Array} data - 波形数据\n * @param {number} x - X坐标\n * @param {number} y - Y坐标\n * @param {number} width - 宽度\n * @param {number} height - 高度\n * @param {number} time - 当前时间\n * @param {Object} config - 配置对象（合并了默认配置和用户配置）\n */\nexport default function renderWeave(element, data, x, y, width, height, time, config = {}) {\n  // 合并默认配置\n  const cfg = { ...defaultConfig, ...config };\n  \n  if (!data || data.length === 0) return;\n  \n  const centerY = y + height / 2;\n  const stepX = width / data.length;\n  const amplitude = (height / 2) * element.sensitivity;\n  \n  const layerCount = cfg.weaveLayers; // 层数\n  const layerSpacing = cfg.weaveLayerSpacing; // 层间距\n  \n  // 计算平均振幅\n  let avgAmplitude = 0;\n  for (let i = 0; i < data.length; i++) {\n    avgAmplitude += Math.abs(data[i]);\n  }\n  avgAmplitude = (avgAmplitude / data.length) * element.sensitivity;\n  \n  // 绘制多层波形\n  for (let layer = 0; layer < layerCount; layer++) {\n    const layerOffset = (layer - layerCount / 2) * layerSpacing;\n    const layerY = centerY + layerOffset;\n    \n    // 每层有轻微的相位偏移\n    const phaseOffset = (layer / layerCount) * Math.PI * 2;\n    const timeOffset = time * cfg.weaveSpeed + phaseOffset;\n    \n    // 选择颜色\n    let layerColor;\n    if (cfg.particleColors && cfg.particleColors.length > 0) {\n      const colorIndex = layer % cfg.particleColors.length;\n      layerColor = cfg.particleColors[colorIndex];\n    } else {\n      // 根据层数生成渐变色\n      const hue = (layer * 60) % 360;\n      layerColor = {\n        hue: hue,\n        saturation: 0.8,\n        brightness: 1\n      };\n    }\n    \n    // 绘制波形路径\n    const path = new paper.Path();\n    path.strokeColor = layerColor;\n    path.strokeWidth = element.lineWidth;\n    path.strokeColor.alpha = 0.6 + (layer / layerCount) * 0.4; // 前面的层更不透明\n    \n    for (let i = 0; i < data.length; i++) {\n      // 添加波形调制\n      const modulation = Math.sin((i / data.length) * Math.PI * 4 + timeOffset) * 0.3;\n      const waveAmplitude = data[i] * (1 + modulation);\n      \n      const px = x + i * stepX;\n      const py = layerY - waveAmplitude * amplitude;\n      \n      if (i === 0) {\n        path.moveTo(new paper.Point(px, py));\n      } else {\n        path.lineTo(new paper.Point(px, py));\n      }\n    }\n    \n    // 添加镜像效果\n    if (element.mirror) {\n      const mirrorPath = new paper.Path();\n      mirrorPath.strokeColor = layerColor;\n      mirrorPath.strokeWidth = element.lineWidth;\n      mirrorPath.strokeColor.alpha = path.strokeColor.alpha * 0.5;\n      \n      for (let i = 0; i < data.length; i++) {\n        const modulation = Math.sin((i / data.length) * Math.PI * 4 + timeOffset) * 0.3;\n        const waveAmplitude = data[i] * (1 + modulation);\n        \n        const px = x + i * stepX;\n        const py = layerY + waveAmplitude * amplitude;\n        \n        if (i === 0) {\n          mirrorPath.moveTo(new paper.Point(px, py));\n        } else {\n          mirrorPath.lineTo(new paper.Point(px, py));\n        }\n      }\n    }\n    \n    // 在交叉点添加高亮点\n    if (layer > 0 && avgAmplitude > 0.1) {\n      const highlightCount = Math.floor(data.length / 20);\n      for (let i = 0; i < highlightCount; i++) {\n        const dataIndex = Math.floor((i / highlightCount) * data.length);\n        const modulation = Math.sin((dataIndex / data.length) * Math.PI * 4 + timeOffset) * 0.3;\n        const waveAmplitude = data[dataIndex] * (1 + modulation);\n        \n        const px = x + dataIndex * stepX;\n        const py = layerY - waveAmplitude * amplitude;\n        \n        const highlight = new paper.Path.Circle({\n          center: new paper.Point(px, py),\n          radius: 2 + avgAmplitude * 3\n        });\n        highlight.fillColor = layerColor;\n        highlight.fillColor.alpha = 0.8;\n      }\n    }\n  }\n}\n\nrenderWeave.style = 'weave';\n\n"],"names":[],"mappings":"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"}