@visactor/vrender-core 1.0.9 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/cjs/core/stage.d.ts +4 -2
  2. package/cjs/core/stage.js +12 -6
  3. package/cjs/core/stage.js.map +1 -1
  4. package/cjs/graphic/config.js +4 -2
  5. package/cjs/graphic/config.js.map +1 -1
  6. package/cjs/graphic/glyph.js +1 -6
  7. package/cjs/graphic/glyph.js.map +1 -1
  8. package/cjs/graphic/graphic.js +2 -2
  9. package/cjs/graphic/graphic.js.map +1 -1
  10. package/cjs/interface/animation/animate.d.ts +1 -0
  11. package/cjs/interface/animation/animate.js.map +1 -1
  12. package/cjs/interface/graphic/rect.d.ts +1 -0
  13. package/cjs/interface/graphic/rect.js.map +1 -1
  14. package/cjs/interface/stage.d.ts +2 -0
  15. package/cjs/interface/stage.js.map +1 -1
  16. package/cjs/plugins/builtin-plugin/edit-module.js +4 -4
  17. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
  18. package/cjs/render/contributions/render/rect-render.js +2 -2
  19. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  20. package/cjs/render/contributions/render/rect3d-render.js +4 -4
  21. package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
  22. package/cjs/render/contributions/render/utils.d.ts +1 -1
  23. package/cjs/render/contributions/render/utils.js +2 -2
  24. package/cjs/render/contributions/render/utils.js.map +1 -1
  25. package/dist/index.es.js +35 -24
  26. package/es/core/stage.d.ts +4 -2
  27. package/es/core/stage.js +12 -6
  28. package/es/core/stage.js.map +1 -1
  29. package/es/graphic/config.js +4 -2
  30. package/es/graphic/config.js.map +1 -1
  31. package/es/graphic/glyph.js +1 -6
  32. package/es/graphic/glyph.js.map +1 -1
  33. package/es/graphic/graphic.js +2 -2
  34. package/es/graphic/graphic.js.map +1 -1
  35. package/es/interface/animation/animate.d.ts +1 -0
  36. package/es/interface/animation/animate.js.map +1 -1
  37. package/es/interface/graphic/rect.d.ts +1 -0
  38. package/es/interface/graphic/rect.js.map +1 -1
  39. package/es/interface/stage.d.ts +2 -0
  40. package/es/interface/stage.js.map +1 -1
  41. package/es/plugins/builtin-plugin/edit-module.js +4 -4
  42. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  43. package/es/render/contributions/render/rect-render.js +2 -2
  44. package/es/render/contributions/render/rect-render.js.map +1 -1
  45. package/es/render/contributions/render/rect3d-render.js +3 -3
  46. package/es/render/contributions/render/rect3d-render.js.map +1 -1
  47. package/es/render/contributions/render/utils.d.ts +1 -1
  48. package/es/render/contributions/render/utils.js +2 -2
  49. package/es/render/contributions/render/utils.js.map +1 -1
  50. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/builtin-plugin/edit-module.ts"],"names":[],"mappings":"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","file":"edit-module.js","sourcesContent":["import { application } from '../../application';\nimport type {\n IRichText,\n IRichTextCharacter,\n IRichTextGraphicAttribute,\n IRichTextParagraphCharacter\n} from '../../interface';\n\n// function getMaxConfigIndexIgnoreLinebreak(textConfig: IRichTextCharacter[]) {\n// let idx = 0;\n// for (let i = 0; i < textConfig.length; i++) {\n// const c = textConfig[i] as IRichTextParagraphCharacter;\n// if (c.text !== '\\n') {\n// idx++;\n// }\n// }\n// return Math.max(idx - 1, 0);\n// }\n\nexport function getDefaultCharacterConfig(attribute: IRichTextGraphicAttribute) {\n const {\n fill = 'black',\n stroke = false,\n fontWeight = 'normal',\n lineHeight,\n fontFamily = 'Arial',\n textAlign\n } = attribute;\n let { fontSize = 12 } = attribute;\n if (!isFinite(fontSize)) {\n fontSize = 12;\n }\n return {\n fill,\n stroke,\n fontSize,\n fontWeight,\n fontFamily,\n lineHeight,\n textAlign\n } as any;\n}\n\n/**\n * 找到cursorIndex所在的textConfig的位置,给出的index就是要插入的准确位置\n * @param textConfig\n * @param cursorIndex\n * @returns\n */\nexport function findConfigIndexByCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n if (cursorIndex < 0) {\n return 0;\n }\n\n // 排序找到对应的元素\n const intCursorIndex = Math.round(cursorIndex);\n let tempCursorIndex = intCursorIndex;\n // 跳过连续换行符中的第一个换行符(但是如果第一个字符就是换行符,那就不跳)\n let lineBreak = (textConfig?.[0] as any)?.text === '\\n';\n let configIdx = 0;\n for (configIdx = 0; configIdx < textConfig.length && tempCursorIndex >= 0; configIdx++) {\n const c = textConfig[configIdx] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n tempCursorIndex -= Number(lineBreak);\n lineBreak = true;\n } else {\n tempCursorIndex--;\n lineBreak = false;\n }\n }\n // 说明过限了\n if (tempCursorIndex >= 0) {\n return textConfig.length;\n }\n configIdx -= 1;\n\n // 如果有换行,一定在换行符左边写\n if (cursorIndex > intCursorIndex && !lineBreak) {\n configIdx += 1;\n }\n return configIdx;\n}\n\n/**\n * 根据configIndex找到cursorIndex的位置,忽略单个换行符,连续换行符的时候只忽略第一个\n * @param textConfig\n * @param configIndex\n * @returns\n */\nexport function findCursorIdxByConfigIndex(textConfig: IRichTextCharacter[], configIndex: number): number {\n let cursorIndex = 0;\n if (configIndex < 0) {\n return -0.1;\n }\n // 仅有一个\\n,那不算\n // 如果有连续的\\n,那就少算一个(但是第一个字符是\\n的话,不算)\n let lastLineBreak = (textConfig?.[0] as any)?.text === '\\n';\n\n for (let i = 0; i <= configIndex && i < textConfig.length; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n cursorIndex += Number(lastLineBreak);\n lastLineBreak = true;\n } else {\n cursorIndex++;\n lastLineBreak = false;\n }\n }\n cursorIndex = Math.max(cursorIndex - 1, 0);\n\n // 超出区间了直接设置到尾部,configIndex超过区间,cursorIndex不会超过\n if (configIndex > textConfig.length - 1) {\n // 如果最后一行是一个换行符,那么就得是xx.9否则就是xx.1\n if ((textConfig[textConfig.length - 1] as any)?.text === '\\n') {\n return cursorIndex + 0.9;\n }\n return cursorIndex + 0.1;\n }\n\n // 如果是这个configIdx对应到的是单个换行的话,那么算到下一个字符上\n const lineBreak = (textConfig[configIndex] as any)?.text === '\\n';\n if (configIndex >= textConfig.length - 1 && lineBreak) {\n return cursorIndex + 1 - 0.1;\n }\n const singleLineBreak = lineBreak && (textConfig[configIndex - 1] as any)?.text !== '\\n';\n\n // 光标往左放\n cursorIndex -= 0.1;\n\n // 如果是单行,那么这一个换行符没有算字符,光标要往右放\n if (singleLineBreak) {\n cursorIndex += 0.2;\n }\n return cursorIndex;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n composingConfigIdx: number;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n onFocusInList: Array<() => void>;\n onFocusOutList: Array<() => void>;\n focusOutTimer: number;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.composingConfigIdx = -1;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n this.onFocusInList = [];\n this.onFocusOutList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onChangeCbList.push(cb);\n }\n\n onFocusIn(cb: () => void) {\n this.onFocusInList.push(cb);\n }\n\n onFocusOut(cb: () => void) {\n this.onFocusOutList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n // 监听焦点\n textAreaDom.addEventListener('focusin', this.handleFocusIn);\n textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleFocusIn = () => {\n // this.focusOutTimer && clearTimeout(this.focusOutTimer);\n // this.focusOutTimer = 0;\n // this.onFocusInList && this.onFocusInList.forEach(cb => cb());\n };\n handleFocusOut = () => {\n // 暂时注释,会导致非期待情况下的误关闭\n // // 延时触发,避免误关闭\n // this.focusOutTimer = setTimeout(() => {\n // this.onFocusOutList && this.onFocusOutList.forEach(cb => cb());\n // }, 100);\n };\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!this.currRt) {\n return;\n }\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n if (!this.currRt) {\n return;\n }\n this.isComposing = true;\n const { textConfig = [] } = this.currRt.attribute;\n this.composingConfigIdx = this.cursorIndex < 0 ? 0 : findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n if (this.cursorIndex < 0) {\n const config = textConfig[0];\n textConfig.unshift({ fill: 'black', ...getDefaultCharacterConfig(this.currRt.attribute), ...config, text: '' });\n } else {\n const configIdx = this.composingConfigIdx;\n const lastConfig = textConfig[configIdx] || textConfig[configIdx - 1];\n textConfig.splice(configIdx, 0, {\n fill: 'black',\n ...getDefaultCharacterConfig(this.currRt.attribute),\n ...lastConfig,\n text: ''\n });\n }\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n\n const text = this.parseCompositionStr(this.composingConfigIdx);\n // 拆分上一次的内容\n // const { textConfig = [] } = this.currRt.attribute;\n // const configIdx = this.composingConfigIdx;\n\n // const lastConfig = textConfig[configIdx];\n // textConfig.splice(configIdx, 1);\n // const text = (lastConfig as any).text;\n // const textList: string[] = text ? Array.from(text.toString()) : [];\n // for (let i = 0; i < textList.length; i++) {\n // textConfig.splice(i + configIdx, 0, { ...lastConfig, isComposing: false, text: textList[i] } as any);\n // }\n // this.currRt.setAttributes({ textConfig });\n // const nextConfigIdx = configIdx + textList.length;\n // this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n this.composingConfigIdx = -1;\n\n this.onChangeCbList.forEach(cb => {\n cb(\n text,\n this.isComposing,\n // TODO 当换行后刚开始输入会有问题,后续看这里具体Cursor变换逻辑\n this.cursorIndex,\n this.currRt\n );\n });\n };\n\n /**\n * 复合输入以及粘贴,都会复制出一大段内容,这时候需要重新处理textConfig和cursorIndex\n * 1. 拆分text到textConfig\n * 2. 计算新的cursorIndex\n * @param configIdx\n */\n parseCompositionStr(configIdx: number) {\n if (!this.currRt) {\n return '';\n }\n const { textConfig = [] } = this.currRt.attribute;\n\n const lastConfig = textConfig[configIdx] ?? {};\n textConfig.splice(configIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = text ? Array.from(text.toString()) : [];\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + configIdx, 0, {\n fill: 'black',\n ...lastConfig,\n isComposing: false,\n text: textList[i]\n } as any);\n }\n this.currRt.setAttributes({ textConfig });\n const nextConfigIdx = configIdx + textList.length;\n this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n return text;\n }\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n if (ev.inputType === 'historyUndo') {\n return;\n }\n const { textConfig = [], ...rest } = this.currRt.attribute;\n // 删完了,直接返回\n if (ev.type === 'Backspace' && !textConfig.length) {\n return;\n }\n\n let str = (ev as any).data;\n if (!this.isComposing && ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n\n // 处理正反选\n if (this.selectionStartCursorIdx > this.cursorIndex) {\n [this.cursorIndex, this.selectionStartCursorIdx] = [this.selectionStartCursorIdx, this.cursorIndex];\n }\n\n const startIdx = findConfigIndexByCursorIdx(textConfig, this.selectionStartCursorIdx);\n const endIdx = findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n\n // composing的话会插入一个字符,所以往右加一个\n const lastConfigIdx = this.isComposing ? this.composingConfigIdx : Math.max(startIdx - 1, 0);\n // 算一个默认属性\n let lastConfig: any = textConfig[lastConfigIdx];\n if (!lastConfig) {\n lastConfig = getDefaultCharacterConfig(rest);\n }\n let nextConfig = lastConfig;\n\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx, endIdx - startIdx);\n if (this.isComposing) {\n this.composingConfigIdx = startIdx;\n }\n }\n\n let nextConfigIdx = startIdx;\n\n // 删除键\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx === endIdx) {\n if (startIdx <= 0) {\n return;\n }\n // 删除\n textConfig.splice(startIdx - 1, 1);\n nextConfigIdx = Math.max(startIdx - 1, 0);\n } else {\n // 不插入内容\n }\n } else {\n // 插入\n if (!this.isComposing) {\n nextConfig = { fill: 'black', ...lastConfig, text: '' };\n textConfig.splice(startIdx, 0, nextConfig);\n nextConfigIdx++;\n }\n // 插入\n nextConfig.text = str;\n // 标记isComposing,用来判定是否应该拆分成单个字符\n nextConfig.isComposing = this.isComposing;\n }\n\n this.currRt.setAttributes({ textConfig });\n // 重新计算cursorIdx\n // nextConfigIdx = Math.min(nextConfigIdx, textConfig.length - 1);\n\n let cursorIndex = this.cursorIndex;\n if (str && str.length > 1 && !this.isComposing) {\n // 如果字符长度大于1且不是composing,那说明是粘贴\n // 拆分\n this.parseCompositionStr(nextConfigIdx - 1);\n cursorIndex = this.cursorIndex;\n } else {\n // composing的时候不偏移,只有完整输入后才偏移\n cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n if (!this.isComposing) {\n this.cursorIndex = cursorIndex;\n } else {\n this.cursorIndex = this.selectionStartCursorIdx;\n }\n }\n\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n this.textAreaDom.addEventListener('focusin', this.handleFocusOut);\n this.textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plugins/builtin-plugin/edit-module.ts"],"names":[],"mappings":"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","file":"edit-module.js","sourcesContent":["import { application } from '../../application';\nimport type {\n IRichText,\n IRichTextCharacter,\n IRichTextGraphicAttribute,\n IRichTextParagraphCharacter\n} from '../../interface';\n\n// function getMaxConfigIndexIgnoreLinebreak(textConfig: IRichTextCharacter[]) {\n// let idx = 0;\n// for (let i = 0; i < textConfig.length; i++) {\n// const c = textConfig[i] as IRichTextParagraphCharacter;\n// if (c.text !== '\\n') {\n// idx++;\n// }\n// }\n// return Math.max(idx - 1, 0);\n// }\n\nexport function getDefaultCharacterConfig(attribute: IRichTextGraphicAttribute) {\n const {\n fill = 'black',\n stroke = false,\n fontWeight = 'normal',\n lineHeight,\n fontFamily = 'Arial',\n textAlign\n } = attribute;\n let { fontSize = 12 } = attribute;\n if (!isFinite(fontSize)) {\n fontSize = 12;\n }\n return {\n fill,\n stroke,\n fontSize,\n fontWeight,\n fontFamily,\n lineHeight,\n textAlign\n } as any;\n}\n\n/**\n * 找到cursorIndex所在的textConfig的位置,给出的index就是要插入的准确位置\n * @param textConfig\n * @param cursorIndex\n * @returns\n */\nexport function findConfigIndexByCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n if (cursorIndex < 0) {\n return 0;\n }\n\n // 排序找到对应的元素\n const intCursorIndex = Math.round(cursorIndex);\n let tempCursorIndex = intCursorIndex;\n // 跳过连续换行符中的第一个换行符(但是如果第一个字符就是换行符,那就不跳)\n let lineBreak = (textConfig?.[0] as any)?.text === '\\n';\n let configIdx = 0;\n for (configIdx = 0; configIdx < textConfig.length && tempCursorIndex >= 0; configIdx++) {\n const c = textConfig[configIdx] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n tempCursorIndex -= Number(lineBreak);\n lineBreak = true;\n } else {\n tempCursorIndex--;\n lineBreak = false;\n }\n }\n // 说明过限了\n if (tempCursorIndex >= 0) {\n return textConfig.length;\n }\n configIdx -= 1;\n\n // 如果有换行,一定在换行符左边写\n if (cursorIndex > intCursorIndex && !lineBreak) {\n configIdx += 1;\n }\n return configIdx;\n}\n\n/**\n * 根据configIndex找到cursorIndex的位置,忽略单个换行符,连续换行符的时候只忽略第一个\n * @param textConfig\n * @param configIndex\n * @returns\n */\nexport function findCursorIdxByConfigIndex(textConfig: IRichTextCharacter[], configIndex: number): number {\n let cursorIndex = 0;\n if (configIndex < 0) {\n return -0.1;\n }\n // 仅有一个\\n,那不算\n // 如果有连续的\\n,那就少算一个(但是第一个字符是\\n的话,不算)\n let lastLineBreak = (textConfig?.[0] as any)?.text === '\\n';\n\n for (let i = 0; i <= configIndex && i < textConfig.length; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n cursorIndex += Number(lastLineBreak);\n lastLineBreak = true;\n } else {\n cursorIndex++;\n lastLineBreak = false;\n }\n }\n cursorIndex = Math.max(cursorIndex - 1, 0);\n\n // 超出区间了直接设置到尾部,configIndex超过区间,cursorIndex不会超过\n if (configIndex > textConfig.length - 1) {\n // 如果最后一行是一个换行符,那么就得是xx.9否则就是xx.1\n if ((textConfig[textConfig.length - 1] as any)?.text === '\\n') {\n return cursorIndex + 0.9;\n }\n return cursorIndex + 0.1;\n }\n\n // 如果是这个configIdx对应到的是单个换行的话,那么算到下一个字符上\n const lineBreak = (textConfig[configIndex] as any)?.text === '\\n';\n if (configIndex >= textConfig.length - 1 && lineBreak) {\n return cursorIndex + 1 - 0.1;\n }\n const singleLineBreak = lineBreak && (textConfig[configIndex - 1] as any)?.text !== '\\n';\n\n // 光标往左放\n cursorIndex -= 0.1;\n\n // 如果是单行,那么这一个换行符没有算字符,光标要往右放\n if (singleLineBreak) {\n cursorIndex += 0.2;\n }\n return cursorIndex;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n composingConfigIdx: number;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n onFocusInList: Array<() => void>;\n onFocusOutList: Array<() => void>;\n focusOutTimer: number;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.spellcheck = false;\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.composingConfigIdx = -1;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n this.onFocusInList = [];\n this.onFocusOutList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onChangeCbList.push(cb);\n }\n\n onFocusIn(cb: () => void) {\n this.onFocusInList.push(cb);\n }\n\n onFocusOut(cb: () => void) {\n this.onFocusOutList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;opacity: 0;pointer-events: none;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n // 监听焦点\n textAreaDom.addEventListener('focusin', this.handleFocusIn);\n textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleFocusIn = () => {\n // this.focusOutTimer && clearTimeout(this.focusOutTimer);\n // this.focusOutTimer = 0;\n // this.onFocusInList && this.onFocusInList.forEach(cb => cb());\n };\n handleFocusOut = () => {\n // 暂时注释,会导致非期待情况下的误关闭\n // // 延时触发,避免误关闭\n // this.focusOutTimer = setTimeout(() => {\n // this.onFocusOutList && this.onFocusOutList.forEach(cb => cb());\n // }, 100);\n };\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!this.currRt) {\n return;\n }\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n if (!this.currRt) {\n return;\n }\n this.isComposing = true;\n const { textConfig = [] } = this.currRt.attribute;\n this.composingConfigIdx = this.cursorIndex < 0 ? 0 : findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n if (this.cursorIndex < 0) {\n const config = textConfig[0];\n textConfig.unshift({ fill: 'black', ...getDefaultCharacterConfig(this.currRt.attribute), ...config, text: '' });\n } else {\n const configIdx = this.composingConfigIdx;\n const lastConfig = textConfig[configIdx] || textConfig[configIdx - 1];\n textConfig.splice(configIdx, 0, {\n fill: 'black',\n ...getDefaultCharacterConfig(this.currRt.attribute),\n ...lastConfig,\n text: ''\n });\n }\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n\n const text = this.parseCompositionStr(this.composingConfigIdx);\n // 拆分上一次的内容\n // const { textConfig = [] } = this.currRt.attribute;\n // const configIdx = this.composingConfigIdx;\n\n // const lastConfig = textConfig[configIdx];\n // textConfig.splice(configIdx, 1);\n // const text = (lastConfig as any).text;\n // const textList: string[] = text ? Array.from(text.toString()) : [];\n // for (let i = 0; i < textList.length; i++) {\n // textConfig.splice(i + configIdx, 0, { ...lastConfig, isComposing: false, text: textList[i] } as any);\n // }\n // this.currRt.setAttributes({ textConfig });\n // const nextConfigIdx = configIdx + textList.length;\n // this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n this.composingConfigIdx = -1;\n\n this.onChangeCbList.forEach(cb => {\n cb(\n text,\n this.isComposing,\n // TODO 当换行后刚开始输入会有问题,后续看这里具体Cursor变换逻辑\n this.cursorIndex,\n this.currRt\n );\n });\n };\n\n /**\n * 复合输入以及粘贴,都会复制出一大段内容,这时候需要重新处理textConfig和cursorIndex\n * 1. 拆分text到textConfig\n * 2. 计算新的cursorIndex\n * @param configIdx\n */\n parseCompositionStr(configIdx: number) {\n if (!this.currRt) {\n return '';\n }\n const { textConfig = [] } = this.currRt.attribute;\n\n const lastConfig = textConfig[configIdx] ?? {};\n textConfig.splice(configIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = text ? Array.from(text.toString()) : [];\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + configIdx, 0, {\n fill: 'black',\n ...lastConfig,\n isComposing: false,\n text: textList[i]\n } as any);\n }\n this.currRt.setAttributes({ textConfig });\n const nextConfigIdx = configIdx + textList.length;\n this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n return text;\n }\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n if (ev.inputType === 'historyUndo') {\n return;\n }\n const { textConfig = [], ...rest } = this.currRt.attribute;\n // 删完了,直接返回\n if (ev.type === 'Backspace' && !textConfig.length) {\n return;\n }\n\n let str = (ev as any).data;\n if (!this.isComposing && ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n\n // 处理正反选\n if (this.selectionStartCursorIdx > this.cursorIndex) {\n [this.cursorIndex, this.selectionStartCursorIdx] = [this.selectionStartCursorIdx, this.cursorIndex];\n }\n\n const startIdx = findConfigIndexByCursorIdx(textConfig, this.selectionStartCursorIdx);\n const endIdx = findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n\n // composing的话会插入一个字符,所以往右加一个\n const lastConfigIdx = this.isComposing ? this.composingConfigIdx : Math.max(startIdx - 1, 0);\n // 算一个默认属性\n let lastConfig: any = textConfig[lastConfigIdx];\n if (!lastConfig) {\n lastConfig = getDefaultCharacterConfig(rest);\n }\n let nextConfig = lastConfig;\n\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx, endIdx - startIdx);\n if (this.isComposing) {\n this.composingConfigIdx = startIdx;\n }\n }\n\n let nextConfigIdx = startIdx;\n\n // 删除键\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx === endIdx) {\n if (startIdx <= 0) {\n return;\n }\n // 删除\n textConfig.splice(startIdx - 1, 1);\n nextConfigIdx = Math.max(startIdx - 1, 0);\n } else {\n // 不插入内容\n }\n } else {\n // 插入\n if (!this.isComposing) {\n nextConfig = { fill: 'black', ...lastConfig, text: '' };\n textConfig.splice(startIdx, 0, nextConfig);\n nextConfigIdx++;\n }\n // 插入\n nextConfig.text = str;\n // 标记isComposing,用来判定是否应该拆分成单个字符\n nextConfig.isComposing = this.isComposing;\n }\n\n this.currRt.setAttributes({ textConfig });\n // 重新计算cursorIdx\n // nextConfigIdx = Math.min(nextConfigIdx, textConfig.length - 1);\n\n let cursorIndex = this.cursorIndex;\n if (str && str.length > 1 && !this.isComposing) {\n // 如果字符长度大于1且不是composing,那说明是粘贴\n // 拆分\n this.parseCompositionStr(nextConfigIdx - 1);\n cursorIndex = this.cursorIndex;\n } else {\n // composing的时候不偏移,只有完整输入后才偏移\n cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n if (!this.isComposing) {\n this.cursorIndex = cursorIndex;\n } else {\n this.cursorIndex = this.selectionStartCursorIdx;\n }\n }\n\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n this.textAreaDom.addEventListener('focusin', this.handleFocusOut);\n this.textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n"]}
@@ -38,10 +38,10 @@ let DefaultCanvasRectRender = class extends BaseRender {
38
38
  }
39
39
  drawShape(rect, context, x, y, drawContext, params, fillCb, strokeCb, rectAttribute) {
40
40
  rectAttribute = null != rectAttribute ? rectAttribute : getTheme(rect, null == params ? void 0 : params.theme).rect;
41
- const {fill: fill = rectAttribute.fill, background: background, stroke: stroke = rectAttribute.stroke, cornerRadius: cornerRadius = rectAttribute.cornerRadius, cornerType: cornerType = rectAttribute.cornerType, opacity: opacity = rectAttribute.opacity, fillOpacity: fillOpacity = rectAttribute.fillOpacity, lineWidth: lineWidth = rectAttribute.lineWidth, strokeOpacity: strokeOpacity = rectAttribute.strokeOpacity, visible: visible = rectAttribute.visible, x1: x1, y1: y1, x: originX = rectAttribute.x, y: originY = rectAttribute.y, fillStrokeOrder: fillStrokeOrder = rectAttribute.fillStrokeOrder} = rect.attribute;
41
+ const {fill: fill = rectAttribute.fill, background: background, stroke: stroke = rectAttribute.stroke, cornerRadius: cornerRadius = rectAttribute.cornerRadius, cornerType: cornerType = rectAttribute.cornerType, opacity: opacity = rectAttribute.opacity, fillOpacity: fillOpacity = rectAttribute.fillOpacity, lineWidth: lineWidth = rectAttribute.lineWidth, strokeOpacity: strokeOpacity = rectAttribute.strokeOpacity, visible: visible = rectAttribute.visible, x1: x1, y1: y1, x: originX = rectAttribute.x, y: originY = rectAttribute.y, fillStrokeOrder: fillStrokeOrder = rectAttribute.fillStrokeOrder, drawStrokeWhenZeroWH: drawStrokeWhenZeroWH = rectAttribute.drawStrokeWhenZeroWH} = rect.attribute;
42
42
  let {width: width, height: height} = rect.attribute;
43
43
  width = (null != width ? width : x1 - originX) || 0, height = (null != height ? height : y1 - originY) || 0;
44
- const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill), sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height), doFill = runFill(fill, background), doStroke = runStroke(stroke, lineWidth);
44
+ const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill), sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height, drawStrokeWhenZeroWH), doFill = runFill(fill, background), doStroke = runStroke(stroke, lineWidth);
45
45
  if (!rect.valid || !visible) return;
46
46
  if (!doFill && !doStroke) return;
47
47
  if (!(fVisible || sVisible || fillCb || strokeCb || background)) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/rect-render.ts"],"names":[],"mappings":"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","file":"rect-render.js","sourcesContent":["import { isArray } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { RECT_NUMBER_TYPE } from '../../../graphic/constants';\nimport { createRectPath } from '../../../common/shape/rect';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService,\n IRectRenderContribution,\n IContributionProvider,\n IRectGraphicAttribute\n} from '../../../interface';\nimport { RectRenderContribution } from './contributions/constants';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { BaseRender } from './base-render';\nimport {\n defaultRectBackgroundRenderContribution,\n defaultRectRenderContribution,\n defaultRectTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasRectRender extends BaseRender<IRect> implements IGraphicRender {\n type = 'rect';\n numberType: number = RECT_NUMBER_TYPE;\n tempTheme: Required<IRectGraphicAttribute>;\n\n constructor(\n @inject(ContributionProvider)\n @named(RectRenderContribution)\n protected readonly graphicRenderContributions: IContributionProvider<IRectRenderContribution>\n ) {\n super();\n this.builtinContributions = [\n defaultRectRenderContribution,\n defaultRectBackgroundRenderContribution,\n defaultRectTextureRenderContribution\n ];\n this.init(graphicRenderContributions);\n }\n\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n rectAttribute?: Required<IRectGraphicAttribute>\n ) {\n rectAttribute = rectAttribute ?? getTheme(rect, params?.theme).rect;\n const {\n fill = rectAttribute.fill,\n background,\n stroke = rectAttribute.stroke,\n cornerRadius = rectAttribute.cornerRadius,\n cornerType = rectAttribute.cornerType,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible,\n x1,\n y1,\n x: originX = rectAttribute.x,\n y: originY = rectAttribute.y,\n fillStrokeOrder = rectAttribute.fillStrokeOrder\n } = rect.attribute;\n let { width, height } = rect.attribute;\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);\n const doFill = runFill(fill, background);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb || background)) {\n return;\n }\n\n if (cornerRadius === 0 || (isArray(cornerRadius) && (<number[]>cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(x, y, width, height);\n } else {\n context.beginPath();\n\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, width, height, cornerRadius, cornerType !== 'bevel');\n }\n\n const doFillOrStroke = {\n doFill,\n doStroke\n };\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);\n\n this.beforeRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb,\n doFillOrStroke\n );\n\n // 内联的函数性能差\n // const _runFill = () => {\n // if (doFillOrStroke.doFill) {\n // if (fillCb) {\n // fillCb(context, rect.attribute, rectAttribute);\n // } else if (fVisible) {\n // // 存在fill\n // context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n // context.fill();\n // }\n // }\n // };\n // const _runStroke = () => {\n // if (doFillOrStroke.doStroke) {\n // if (strokeCb) {\n // strokeCb(context, rect.attribute, rectAttribute);\n // } else if (sVisible) {\n // // 存在stroke\n // context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n // context.stroke();\n // }\n // }\n // };\n\n if (!fillStrokeOrder) {\n this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);\n this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);\n } else {\n this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);\n this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);\n }\n\n this.afterRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n private _runFill(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required<IRectGraphicAttribute>,\n doFillOrStroke: { doFill: boolean; doStroke: boolean },\n fVisible: boolean,\n originX: number,\n originY: number,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (doFillOrStroke.doFill) {\n if (fillCb) {\n fillCb(context, rect.attribute, rectAttribute);\n } else if (fVisible) {\n // 存在fill\n context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.fill();\n }\n }\n }\n\n private _runStroke(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required<IRectGraphicAttribute>,\n doFillOrStroke: { doFill: boolean; doStroke: boolean },\n sVisible: boolean,\n originX: number,\n originY: number,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (doFillOrStroke.doStroke) {\n if (strokeCb) {\n strokeCb(context, rect.attribute, rectAttribute);\n } else if (sVisible) {\n // 存在stroke\n context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.stroke();\n }\n }\n }\n\n draw(rect: IRect, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const rectAttribute = getTheme(rect, params?.theme).rect;\n this._draw(rect, rectAttribute, false, drawContext, params, rectAttribute);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/rect-render.ts"],"names":[],"mappings":"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","file":"rect-render.js","sourcesContent":["import { isArray } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { RECT_NUMBER_TYPE } from '../../../graphic/constants';\nimport { createRectPath } from '../../../common/shape/rect';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IRect,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService,\n IRectRenderContribution,\n IContributionProvider,\n IRectGraphicAttribute\n} from '../../../interface';\nimport { RectRenderContribution } from './contributions/constants';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { BaseRender } from './base-render';\nimport {\n defaultRectBackgroundRenderContribution,\n defaultRectRenderContribution,\n defaultRectTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasRectRender extends BaseRender<IRect> implements IGraphicRender {\n type = 'rect';\n numberType: number = RECT_NUMBER_TYPE;\n tempTheme: Required<IRectGraphicAttribute>;\n\n constructor(\n @inject(ContributionProvider)\n @named(RectRenderContribution)\n protected readonly graphicRenderContributions: IContributionProvider<IRectRenderContribution>\n ) {\n super();\n this.builtinContributions = [\n defaultRectRenderContribution,\n defaultRectBackgroundRenderContribution,\n defaultRectTextureRenderContribution\n ];\n this.init(graphicRenderContributions);\n }\n\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n rectAttribute?: Required<IRectGraphicAttribute>\n ) {\n rectAttribute = rectAttribute ?? getTheme(rect, params?.theme).rect;\n const {\n fill = rectAttribute.fill,\n background,\n stroke = rectAttribute.stroke,\n cornerRadius = rectAttribute.cornerRadius,\n cornerType = rectAttribute.cornerType,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible,\n x1,\n y1,\n x: originX = rectAttribute.x,\n y: originY = rectAttribute.y,\n fillStrokeOrder = rectAttribute.fillStrokeOrder,\n drawStrokeWhenZeroWH = rectAttribute.drawStrokeWhenZeroWH\n } = rect.attribute;\n let { width, height } = rect.attribute;\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height, drawStrokeWhenZeroWH);\n const doFill = runFill(fill, background);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb || background)) {\n return;\n }\n\n if (cornerRadius === 0 || (isArray(cornerRadius) && (<number[]>cornerRadius).every(num => num === 0))) {\n // 不需要处理圆角\n context.beginPath();\n context.rect(x, y, width, height);\n } else {\n context.beginPath();\n\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, width, height, cornerRadius, cornerType !== 'bevel');\n }\n\n const doFillOrStroke = {\n doFill,\n doStroke\n };\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);\n\n this.beforeRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb,\n doFillOrStroke\n );\n\n // 内联的函数性能差\n // const _runFill = () => {\n // if (doFillOrStroke.doFill) {\n // if (fillCb) {\n // fillCb(context, rect.attribute, rectAttribute);\n // } else if (fVisible) {\n // // 存在fill\n // context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n // context.fill();\n // }\n // }\n // };\n // const _runStroke = () => {\n // if (doFillOrStroke.doStroke) {\n // if (strokeCb) {\n // strokeCb(context, rect.attribute, rectAttribute);\n // } else if (sVisible) {\n // // 存在stroke\n // context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n // context.stroke();\n // }\n // }\n // };\n\n if (!fillStrokeOrder) {\n this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);\n this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);\n } else {\n this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);\n this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);\n }\n\n this.afterRenderStep(\n rect,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n rectAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n private _runFill(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required<IRectGraphicAttribute>,\n doFillOrStroke: { doFill: boolean; doStroke: boolean },\n fVisible: boolean,\n originX: number,\n originY: number,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (doFillOrStroke.doFill) {\n if (fillCb) {\n fillCb(context, rect.attribute, rectAttribute);\n } else if (fVisible) {\n // 存在fill\n context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.fill();\n }\n }\n }\n\n private _runStroke(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required<IRectGraphicAttribute>,\n doFillOrStroke: { doFill: boolean; doStroke: boolean },\n sVisible: boolean,\n originX: number,\n originY: number,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n if (doFillOrStroke.doStroke) {\n if (strokeCb) {\n strokeCb(context, rect.attribute, rectAttribute);\n } else if (sVisible) {\n // 存在stroke\n context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);\n context.stroke();\n }\n }\n }\n\n draw(rect: IRect, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const rectAttribute = getTheme(rect, params?.theme).rect;\n this._draw(rect, rectAttribute, false, drawContext, params, rectAttribute);\n }\n}\n"]}
@@ -19,11 +19,11 @@ let DefaultCanvasRect3dRender = class extends Base3dRender {
19
19
  super(...arguments), this.type = "rect3d", this.numberType = RECT3D_NUMBER_TYPE;
20
20
  }
21
21
  drawShape(rect, context, x, y, drawContext, params, fillCb, strokeCb) {
22
- var _a;
23
- const rectAttribute = getTheme(rect, null == params ? void 0 : params.theme).rect, {fill: fill = rectAttribute.fill, stroke: stroke = rectAttribute.stroke, x1: x1, y1: y1, x: originX, y: originY, opacity: opacity = rectAttribute.opacity, fillOpacity: fillOpacity = rectAttribute.fillOpacity, lineWidth: lineWidth = rectAttribute.lineWidth, strokeOpacity: strokeOpacity = rectAttribute.strokeOpacity, visible: visible = rectAttribute.visible} = rect.attribute;
22
+ var _a, _b;
23
+ const rectAttribute = getTheme(rect, null == params ? void 0 : params.theme).rect, {fill: fill = rectAttribute.fill, stroke: stroke = rectAttribute.stroke, x1: x1, y1: y1, x: originX, y: originY, opacity: opacity = rectAttribute.opacity, fillOpacity: fillOpacity = rectAttribute.fillOpacity, lineWidth: lineWidth = rectAttribute.lineWidth, strokeOpacity: strokeOpacity = rectAttribute.strokeOpacity, visible: visible = rectAttribute.visible, drawStrokeWhenZeroWH: drawStrokeWhenZeroWH = null !== (_a = rectAttribute.drawStrokeWhenZeroWH) && void 0 !== _a && _a} = rect.attribute;
24
24
  let {width: width, height: height} = rect.attribute;
25
25
  width = (null != width ? width : x1 - originX) || 0, height = (null != height ? height : y1 - originY) || 0;
26
- const z = null !== (_a = this.z) && void 0 !== _a ? _a : 0, fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill), sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height), doFill = runFill(fill), doStroke = runStroke(stroke, lineWidth);
26
+ const z = null !== (_b = this.z) && void 0 !== _b ? _b : 0, fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill), sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height, drawStrokeWhenZeroWH), doFill = runFill(fill), doStroke = runStroke(stroke, lineWidth);
27
27
  if (!rect.valid || !visible) return;
28
28
  if (!doFill && !doStroke) return;
29
29
  if (!(fVisible || sVisible || fillCb || strokeCb)) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/rect3d-render.ts"],"names":[],"mappings":"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","file":"rect3d-render.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IFace3d,\n IMarkAttribute,\n IRect3d,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { RECT3D_NUMBER_TYPE } from '../../../graphic/constants';\nimport { Base3dRender } from './base-3d-render';\n@injectable()\nexport class DefaultCanvasRect3dRender extends Base3dRender<IRect3d> implements IGraphicRender {\n type = 'rect3d';\n numberType: number = RECT3D_NUMBER_TYPE;\n declare z: number;\n\n drawShape(\n rect: IRect3d,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const rectAttribute = graphicService.themeService.getCurrentTheme().rectAttribute;\n const rectAttribute = getTheme(rect, params?.theme).rect;\n const {\n fill = rectAttribute.fill,\n stroke = rectAttribute.stroke,\n x1,\n y1,\n x: originX,\n y: originY,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible\n } = rect.attribute;\n let { width, height } = rect.attribute;\n\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n const z = this.z ?? 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);\n const doFill = runFill(fill);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb)) {\n return;\n }\n\n const { light } = drawContext.stage || {};\n const face3d = rect.findFace();\n\n if (fill !== false) {\n context.setCommonStyle(rect, rect.attribute, x, y, rectAttribute);\n let fc = fill;\n if (typeof fc !== 'string') {\n fc = 'black';\n }\n this.fill(x, y, z, face3d, null, fc, context, light, null, null, fillCb);\n }\n if (stroke !== false) {\n context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n this.stroke(x, y, z, face3d, context);\n }\n }\n\n draw(rect: IRect3d, renderService: IRenderService, drawContext: IDrawContext) {\n const rectAttribute = getTheme(rect).rect;\n this._draw(rect, rectAttribute, false, drawContext);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/rect3d-render.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAalD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEzC,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,YAAqB;IAA7D;;QACL,SAAI,GAAG,QAAQ,CAAC;QAChB,eAAU,GAAW,kBAAkB,CAAC;IAoF1C,CAAC;IAjFC,SAAS,CACP,IAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,WAAyB,EACzB,MAAiC,EACjC,MAIY,EACZ,QAIY;;QAGZ,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,CAAC,IAAI,CAAC;QACzD,MAAM,EACJ,IAAI,GAAG,aAAa,CAAC,IAAI,EACzB,MAAM,GAAG,aAAa,CAAC,MAAM,EAC7B,EAAE,EACF,EAAE,EACF,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,OAAO,GAAG,aAAa,CAAC,OAAO,EAC/B,WAAW,GAAG,aAAa,CAAC,WAAW,EACvC,SAAS,GAAG,aAAa,CAAC,SAAS,EACnC,aAAa,GAAG,aAAa,CAAC,aAAa,EAC3C,OAAO,GAAG,aAAa,CAAC,OAAO,EAC/B,oBAAoB,GAAG,MAAA,aAAa,CAAC,oBAAoB,mCAAI,KAAK,EACnE,GAAG,IAAI,CAAC,SAAS,CAAC;QACnB,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAEvC,KAAK,GAAG,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,GAAG,MAAA,IAAI,CAAC,CAAC,mCAAI,CAAC,CAAC;QAGtB,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE;YAC5B,OAAO;SACR;QAED,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE;YACzB,OAAO;SACR;QAGD,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,EAAE;YACjD,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE/B,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YAClE,IAAI,EAAE,GAAG,IAAI,CAAC;YACd,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;gBAC1B,EAAE,GAAG,OAAO,CAAC;aACd;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SAC1E;QACD,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACvC;IACH,CAAC;IAED,IAAI,CAAC,IAAa,EAAE,aAA6B,EAAE,WAAyB;QAC1E,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC;CACF,CAAA;AAtFY,yBAAyB;IADrC,UAAU,EAAE;GACA,yBAAyB,CAsFrC;SAtFY,yBAAyB","file":"rect3d-render.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IFace3d,\n IMarkAttribute,\n IRect3d,\n IThemeAttribute,\n IGraphicRender,\n IDrawContext,\n IGraphicRenderDrawParams,\n IRenderService\n} from '../../../interface';\nimport { rectFillVisible, rectStrokeVisible, runFill, runStroke } from './utils';\nimport { RECT3D_NUMBER_TYPE } from '../../../graphic/constants';\nimport { Base3dRender } from './base-3d-render';\n@injectable()\nexport class DefaultCanvasRect3dRender extends Base3dRender<IRect3d> implements IGraphicRender {\n type = 'rect3d';\n numberType: number = RECT3D_NUMBER_TYPE;\n declare z: number;\n\n drawShape(\n rect: IRect3d,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const rectAttribute = graphicService.themeService.getCurrentTheme().rectAttribute;\n const rectAttribute = getTheme(rect, params?.theme).rect;\n const {\n fill = rectAttribute.fill,\n stroke = rectAttribute.stroke,\n x1,\n y1,\n x: originX,\n y: originY,\n opacity = rectAttribute.opacity,\n fillOpacity = rectAttribute.fillOpacity,\n lineWidth = rectAttribute.lineWidth,\n strokeOpacity = rectAttribute.strokeOpacity,\n visible = rectAttribute.visible,\n drawStrokeWhenZeroWH = rectAttribute.drawStrokeWhenZeroWH ?? false\n } = rect.attribute;\n let { width, height } = rect.attribute;\n\n width = (width ?? x1 - originX) || 0;\n height = (height ?? y1 - originY) || 0;\n\n const z = this.z ?? 0;\n\n // 不绘制或者透明\n const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);\n const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height, drawStrokeWhenZeroWH);\n const doFill = runFill(fill);\n const doStroke = runStroke(stroke, lineWidth);\n\n if (!(rect.valid && visible)) {\n return;\n }\n\n if (!(doFill || doStroke)) {\n return;\n }\n\n // 如果存在fillCb和strokeCb,那就不直接跳过\n if (!(fVisible || sVisible || fillCb || strokeCb)) {\n return;\n }\n\n const { light } = drawContext.stage || {};\n const face3d = rect.findFace();\n\n if (fill !== false) {\n context.setCommonStyle(rect, rect.attribute, x, y, rectAttribute);\n let fc = fill;\n if (typeof fc !== 'string') {\n fc = 'black';\n }\n this.fill(x, y, z, face3d, null, fc, context, light, null, null, fillCb);\n }\n if (stroke !== false) {\n context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n this.stroke(x, y, z, face3d, context);\n }\n }\n\n draw(rect: IRect3d, renderService: IRenderService, drawContext: IDrawContext) {\n const rectAttribute = getTheme(rect).rect;\n this._draw(rect, rectAttribute, false, drawContext);\n }\n}\n"]}
@@ -4,7 +4,7 @@ export declare function runStroke(stroke: IStrokeType | IStrokeType[], lineWidth
4
4
  export declare function fillVisible(opacity: number, fillOpacity: number, fill: IFillType): boolean;
5
5
  export declare function rectFillVisible(opacity: number, fillOpacity: number, width: number, height: number, fill: IFillType): boolean;
6
6
  export declare function strokeVisible(opacity: number, strokeOpacity: number): boolean;
7
- export declare function rectStrokeVisible(opacity: number, strokeOpacity: number, width: number, height: number): boolean;
7
+ export declare function rectStrokeVisible(opacity: number, strokeOpacity: number, width: number, height: number, drawStrokeWhenZeroWH?: boolean): boolean;
8
8
  export declare function intersect(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): number[];
9
9
  export declare function cornerTangents(x0: number, y0: number, x1: number, y1: number, r1: number, rc: number, clockwise: number): {
10
10
  cx: number;
@@ -22,8 +22,8 @@ export function strokeVisible(opacity, strokeOpacity) {
22
22
  return opacity * strokeOpacity > 0;
23
23
  }
24
24
 
25
- export function rectStrokeVisible(opacity, strokeOpacity, width, height) {
26
- return opacity * strokeOpacity > 0 && 0 !== width && 0 !== height;
25
+ export function rectStrokeVisible(opacity, strokeOpacity, width, height, drawStrokeWhenZeroWH) {
26
+ return drawStrokeWhenZeroWH ? opacity * strokeOpacity > 0 : opacity * strokeOpacity > 0 && 0 !== width && 0 !== height;
27
27
  }
28
28
 
29
29
  export function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { isArray, abs, acos, atan2, cos, epsilon, min, pi, sin, sqrt, pi2 } from '@visactor/vutils';\nimport { renderCommandList } from '../../../common/render-command-list';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IGraphic,\n IMarkAttribute,\n IThemeAttribute,\n IFillType,\n IStrokeType,\n IArc,\n IPath2D,\n IGraphicRenderDrawParams,\n IDrawContext,\n IBackgroundConfig\n} from '../../../interface';\n/**\n * 是否需要执行fill逻辑\n * @param fill\n * @returns\n */\nexport function runFill(\n fill: IFillType,\n background?: string | any | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig\n) {\n return !!(fill || background);\n}\n/**\n * 是否需要执行stroke逻辑\n * @param stroke\n * @returns\n */\nexport function runStroke(stroke: IStrokeType | IStrokeType[], lineWidth: number) {\n let s: boolean | number;\n if (isArray(stroke)) {\n s = stroke.some(item => item || item === undefined);\n } else {\n s = !!stroke;\n }\n return s && lineWidth > 0;\n}\n\n/**\n * 是否fill部分可见\n * @param opacity\n * @param fillOpacity\n * @returns\n */\nexport function fillVisible(opacity: number, fillOpacity: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0;\n}\n\nexport function rectFillVisible(opacity: number, fillOpacity: number, width: number, height: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0 && width !== 0 && height !== 0;\n}\n\n/**\n * 是否stroke部分可见\n * @param opacity\n * @param strokeOpacity\n * @param lineWidth\n * @returns\n */\nexport function strokeVisible(opacity: number, strokeOpacity: number) {\n return opacity * strokeOpacity > 0;\n}\n\nexport function rectStrokeVisible(opacity: number, strokeOpacity: number, width: number, height: number) {\n return opacity * strokeOpacity > 0 && width !== 0 && height !== 0;\n}\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function intersect(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n) {\n const x10 = x1 - x0;\n const y10 = y1 - y0;\n const x32 = x3 - x2;\n const y32 = y3 - y2;\n let t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) {\n return [];\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nexport function cornerTangents(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n r1: number,\n rc: number,\n clockwise: number\n) {\n const x01 = x0 - x1;\n const y01 = y0 - y1;\n const lo = (clockwise ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01);\n const ox = lo * y01;\n const oy = -lo * x01;\n const x11 = x0 + ox;\n const y11 = y0 + oy;\n const x10 = x1 + ox;\n const y10 = y1 + oy;\n const x00 = (x11 + x10) / 2;\n const y00 = (y11 + y10) / 2;\n const dx = x10 - x11;\n const dy = y10 - y11;\n const d2 = dx * dx + dy * dy;\n const r = r1 - rc;\n const D = x11 * y10 - x10 * y11;\n const d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D));\n let cx0 = (D * dy - dx * d) / d2;\n let cy0 = (-D * dx - dy * d) / d2;\n const cx1 = (D * dy + dx * d) / d2;\n const cy1 = (-D * dx + dy * d) / d2;\n const dx0 = cx0 - x00;\n const dy0 = cy0 - y00;\n const dx1 = cx1 - x00;\n const dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n (cx0 = cx1), (cy0 = cy1);\n }\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport function calculateArcCornerRadius(\n arc: IArc,\n startAngle: number,\n endAngle: number,\n innerRadius: number,\n outerRadius: number\n) {\n const deltaAngle = abs(endAngle - startAngle);\n const cornerRadius = arc.getParsedCornerRadius();\n const cornerRadiusIsArray = isArray(cornerRadius);\n // Or is it a circular or annular sector?\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n\n const outerCornerRadiusStart = cornerRadiusIsArray ? cornerRadius[0] : cornerRadius;\n const outerCornerRadiusEnd = cornerRadiusIsArray ? cornerRadius[1] : cornerRadius;\n const innerCornerRadiusEnd = cornerRadiusIsArray ? cornerRadius[2] : cornerRadius;\n const innerCornerRadiusStart = cornerRadiusIsArray ? cornerRadius[3] : cornerRadius;\n const maxOuterCornerRadius = Math.max(outerCornerRadiusEnd, outerCornerRadiusStart);\n const maxInnerCornerRadius = Math.max(innerCornerRadiusEnd, innerCornerRadiusStart);\n let limitedOcr = maxOuterCornerRadius;\n let limitedIcr = maxInnerCornerRadius;\n\n const xors = outerRadius * cos(outerStartAngle);\n const yors = outerRadius * sin(outerStartAngle);\n const xire = innerRadius * cos(innerEndAngle);\n const yire = innerRadius * sin(innerEndAngle);\n\n // Apply rounded corners?\n let xore: number;\n let yore: number;\n let xirs: number;\n let yirs: number;\n if (maxInnerCornerRadius > epsilon || maxOuterCornerRadius > epsilon) {\n xore = outerRadius * cos(outerEndAngle);\n yore = outerRadius * sin(outerEndAngle);\n xirs = innerRadius * cos(innerStartAngle);\n yirs = innerRadius * sin(innerStartAngle);\n\n // Restrict the corner radius according to the sector angle.\n if (deltaAngle < pi) {\n const oc = intersect(xors, yors, xirs, yirs, xore, yore, xire, yire);\n\n if (oc) {\n const ax = xors - oc[0];\n const ay = yors - oc[1];\n const bx = xore - oc[0];\n const by = yore - oc[1];\n const kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2);\n const lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n\n limitedIcr = min(maxInnerCornerRadius, (innerRadius - lc) / (kc - 1));\n limitedOcr = min(maxOuterCornerRadius, (outerRadius - lc) / (kc + 1));\n }\n }\n }\n\n return {\n outerDeltaAngle,\n xors,\n yors,\n xirs,\n yirs,\n xore,\n yore,\n xire,\n yire,\n limitedOcr,\n limitedIcr,\n outerCornerRadiusStart,\n outerCornerRadiusEnd,\n maxOuterCornerRadius,\n maxInnerCornerRadius,\n outerStartAngle,\n outerEndAngle,\n innerDeltaAngle,\n innerEndAngle,\n innerStartAngle,\n innerCornerRadiusStart,\n innerCornerRadiusEnd\n };\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function drawArcPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n outerRadius: number,\n innerRadius: number,\n partStroke?: (boolean | string)[]\n) {\n const { startAngle, endAngle } = arc.getParsedAngle();\n\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // 规范化outerRadius和innerRadius\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n // Is it a point?\n if (outerRadius <= epsilon) {\n context.moveTo(cx, cy);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n context.moveTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n context.arc(cx, cy, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n context.moveTo(cx + innerRadius * cos(endAngle), cy + innerRadius * sin(endAngle));\n context.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const {\n outerDeltaAngle,\n xors,\n yors,\n xirs,\n yirs,\n limitedOcr,\n outerCornerRadiusStart,\n outerCornerRadiusEnd,\n maxOuterCornerRadius,\n xore,\n yore,\n xire,\n yire,\n outerStartAngle,\n outerEndAngle,\n limitedIcr,\n innerDeltaAngle,\n innerEndAngle,\n innerStartAngle,\n innerCornerRadiusStart,\n innerCornerRadiusEnd,\n maxInnerCornerRadius\n } = calculateArcCornerRadius(arc, startAngle, endAngle, innerRadius, outerRadius);\n // Is the sector collapsed to a line?\n // 角度过小,会将acr处理为圆心到半径的一条线\n if (outerDeltaAngle < 0.001) {\n // 如果有左右边的话\n if (partStroke && (partStroke[3] || partStroke[1])) {\n context.moveTo(cx + xors, cy + yors);\n }\n collapsedToLine = true;\n } else if (limitedOcr > epsilon) {\n const cornerRadiusStart = min(outerCornerRadiusStart, limitedOcr);\n const cornerRadiusEnd = min(outerCornerRadiusEnd, limitedOcr);\n // Does the sector’s outer ring have rounded corners?\n const t0 = cornerTangents(xirs, yirs, xors, yors, outerRadius, cornerRadiusStart, Number(clockwise));\n const t1 = cornerTangents(xore, yore, xire, yire, outerRadius, cornerRadiusEnd, Number(clockwise));\n\n // Have the corners merged?\n if (limitedOcr < maxOuterCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n context.arc(cx + t0.cx, cy + t0.cy, limitedOcr, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !clockwise);\n } else {\n context.moveTo(\n cx + t0.cx + limitedOcr * cos(atan2(t1.y01, t1.x01)),\n cy + t0.cy + limitedOcr * sin(atan2(t1.y01, t1.x01))\n );\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusStart,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n outerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n !clockwise\n );\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusEnd,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusEnd > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusEnd * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusEnd * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xore, cy + outerRadius * sin(outerEndAngle));\n }\n }\n }\n } else {\n // Or is the outer ring just a circular arc?\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + xors, cy + yors);\n context.arc(cx, cy, outerRadius, outerStartAngle, outerEndAngle, !clockwise);\n } else {\n context.moveTo(cx + outerRadius * cos(outerEndAngle), cy + outerRadius * sin(outerEndAngle));\n }\n }\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(innerRadius > epsilon) || innerDeltaAngle < 0.001) {\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n collapsedToLine = true;\n } else if (limitedIcr > epsilon) {\n const cornerRadiusStart = min(innerCornerRadiusStart, limitedIcr);\n const cornerRadiusEnd = min(innerCornerRadiusEnd, limitedIcr);\n // Does the sector’s inner ring (or point) have rounded corners?\n const t0 = cornerTangents(xire, yire, xore, yore, innerRadius, -cornerRadiusEnd, Number(clockwise));\n const t1 = cornerTangents(xors, yors, xirs, yirs, innerRadius, -cornerRadiusStart, Number(clockwise));\n\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n } else {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n }\n\n // Have the corners merged?\n if (limitedIcr < maxInnerCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n const arcEndAngle = atan2(t1.y01, t1.x01);\n if (!partStroke || partStroke[2]) {\n context.arc(cx + t0.cx, cy + t0.cy, limitedIcr, atan2(t0.y01, t0.x01), arcEndAngle, !clockwise);\n } else {\n context.moveTo(cx + t0.cx + cos(arcEndAngle), cy + t0.cy + sin(arcEndAngle));\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[2]) {\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusEnd,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n innerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n clockwise\n );\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusStart,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusStart > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusStart * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusStart * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xirs, cy + yirs);\n }\n }\n }\n } else {\n // Or is the inner ring just a circular arc?\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n if (!partStroke || partStroke[2]) {\n context.arc(cx, cy, innerRadius, innerEndAngle, innerStartAngle, clockwise);\n } else {\n context.moveTo(cx + innerRadius * cos(innerStartAngle), cy + innerRadius * sin(innerStartAngle));\n }\n }\n }\n\n if (!partStroke) {\n context.closePath();\n } else if (partStroke[3]) {\n context.lineTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n }\n\n return collapsedToLine;\n}\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { isArray, abs, acos, atan2, cos, epsilon, min, pi, sin, sqrt, pi2 } from '@visactor/vutils';\nimport { renderCommandList } from '../../../common/render-command-list';\nimport { getTheme } from '../../../graphic/theme';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IGraphic,\n IMarkAttribute,\n IThemeAttribute,\n IFillType,\n IStrokeType,\n IArc,\n IPath2D,\n IGraphicRenderDrawParams,\n IDrawContext,\n IBackgroundConfig\n} from '../../../interface';\n/**\n * 是否需要执行fill逻辑\n * @param fill\n * @returns\n */\nexport function runFill(\n fill: IFillType,\n background?: string | any | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig\n) {\n return !!(fill || background);\n}\n/**\n * 是否需要执行stroke逻辑\n * @param stroke\n * @returns\n */\nexport function runStroke(stroke: IStrokeType | IStrokeType[], lineWidth: number) {\n let s: boolean | number;\n if (isArray(stroke)) {\n s = stroke.some(item => item || item === undefined);\n } else {\n s = !!stroke;\n }\n return s && lineWidth > 0;\n}\n\n/**\n * 是否fill部分可见\n * @param opacity\n * @param fillOpacity\n * @returns\n */\nexport function fillVisible(opacity: number, fillOpacity: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0;\n}\n\nexport function rectFillVisible(opacity: number, fillOpacity: number, width: number, height: number, fill: IFillType) {\n return fill && opacity * fillOpacity > 0 && width !== 0 && height !== 0;\n}\n\n/**\n * 是否stroke部分可见\n * @param opacity\n * @param strokeOpacity\n * @param lineWidth\n * @returns\n */\nexport function strokeVisible(opacity: number, strokeOpacity: number) {\n return opacity * strokeOpacity > 0;\n}\n\nexport function rectStrokeVisible(\n opacity: number,\n strokeOpacity: number,\n width: number,\n height: number,\n drawStrokeWhenZeroWH?: boolean\n) {\n if (drawStrokeWhenZeroWH) {\n return opacity * strokeOpacity > 0;\n }\n return opacity * strokeOpacity > 0 && width !== 0 && height !== 0;\n}\n\n/**\n * 部分源码参考 https://github.com/d3/d3-shape/\n * Copyright 2010-2022 Mike Bostock\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n */\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function intersect(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n) {\n const x10 = x1 - x0;\n const y10 = y1 - y0;\n const x32 = x3 - x2;\n const y32 = y3 - y2;\n let t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) {\n return [];\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nexport function cornerTangents(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n r1: number,\n rc: number,\n clockwise: number\n) {\n const x01 = x0 - x1;\n const y01 = y0 - y1;\n const lo = (clockwise ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01);\n const ox = lo * y01;\n const oy = -lo * x01;\n const x11 = x0 + ox;\n const y11 = y0 + oy;\n const x10 = x1 + ox;\n const y10 = y1 + oy;\n const x00 = (x11 + x10) / 2;\n const y00 = (y11 + y10) / 2;\n const dx = x10 - x11;\n const dy = y10 - y11;\n const d2 = dx * dx + dy * dy;\n const r = r1 - rc;\n const D = x11 * y10 - x10 * y11;\n const d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D));\n let cx0 = (D * dy - dx * d) / d2;\n let cy0 = (-D * dx - dy * d) / d2;\n const cx1 = (D * dy + dx * d) / d2;\n const cy1 = (-D * dx + dy * d) / d2;\n const dx0 = cx0 - x00;\n const dy0 = cy0 - y00;\n const dx1 = cx1 - x00;\n const dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n (cx0 = cx1), (cy0 = cy1);\n }\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport function calculateArcCornerRadius(\n arc: IArc,\n startAngle: number,\n endAngle: number,\n innerRadius: number,\n outerRadius: number\n) {\n const deltaAngle = abs(endAngle - startAngle);\n const cornerRadius = arc.getParsedCornerRadius();\n const cornerRadiusIsArray = isArray(cornerRadius);\n // Or is it a circular or annular sector?\n const { outerDeltaAngle, innerDeltaAngle, outerStartAngle, outerEndAngle, innerEndAngle, innerStartAngle } =\n arc.getParsePadAngle(startAngle, endAngle);\n\n const outerCornerRadiusStart = cornerRadiusIsArray ? cornerRadius[0] : cornerRadius;\n const outerCornerRadiusEnd = cornerRadiusIsArray ? cornerRadius[1] : cornerRadius;\n const innerCornerRadiusEnd = cornerRadiusIsArray ? cornerRadius[2] : cornerRadius;\n const innerCornerRadiusStart = cornerRadiusIsArray ? cornerRadius[3] : cornerRadius;\n const maxOuterCornerRadius = Math.max(outerCornerRadiusEnd, outerCornerRadiusStart);\n const maxInnerCornerRadius = Math.max(innerCornerRadiusEnd, innerCornerRadiusStart);\n let limitedOcr = maxOuterCornerRadius;\n let limitedIcr = maxInnerCornerRadius;\n\n const xors = outerRadius * cos(outerStartAngle);\n const yors = outerRadius * sin(outerStartAngle);\n const xire = innerRadius * cos(innerEndAngle);\n const yire = innerRadius * sin(innerEndAngle);\n\n // Apply rounded corners?\n let xore: number;\n let yore: number;\n let xirs: number;\n let yirs: number;\n if (maxInnerCornerRadius > epsilon || maxOuterCornerRadius > epsilon) {\n xore = outerRadius * cos(outerEndAngle);\n yore = outerRadius * sin(outerEndAngle);\n xirs = innerRadius * cos(innerStartAngle);\n yirs = innerRadius * sin(innerStartAngle);\n\n // Restrict the corner radius according to the sector angle.\n if (deltaAngle < pi) {\n const oc = intersect(xors, yors, xirs, yirs, xore, yore, xire, yire);\n\n if (oc) {\n const ax = xors - oc[0];\n const ay = yors - oc[1];\n const bx = xore - oc[0];\n const by = yore - oc[1];\n const kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2);\n const lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n\n limitedIcr = min(maxInnerCornerRadius, (innerRadius - lc) / (kc - 1));\n limitedOcr = min(maxOuterCornerRadius, (outerRadius - lc) / (kc + 1));\n }\n }\n }\n\n return {\n outerDeltaAngle,\n xors,\n yors,\n xirs,\n yirs,\n xore,\n yore,\n xire,\n yire,\n limitedOcr,\n limitedIcr,\n outerCornerRadiusStart,\n outerCornerRadiusEnd,\n maxOuterCornerRadius,\n maxInnerCornerRadius,\n outerStartAngle,\n outerEndAngle,\n innerDeltaAngle,\n innerEndAngle,\n innerStartAngle,\n innerCornerRadiusStart,\n innerCornerRadiusEnd\n };\n}\n\n// 基于d3-shape\n// https://github.com/d3/d3-shape/blob/main/src/arc.js\nexport function drawArcPath(\n arc: IArc,\n context: IContext2d | IPath2D,\n cx: number,\n cy: number,\n outerRadius: number,\n innerRadius: number,\n partStroke?: (boolean | string)[]\n) {\n const { startAngle, endAngle } = arc.getParsedAngle();\n\n const deltaAngle = abs(endAngle - startAngle);\n const clockwise: boolean = endAngle > startAngle;\n let collapsedToLine: boolean = false;\n // 规范化outerRadius和innerRadius\n if (outerRadius < innerRadius) {\n const temp = outerRadius;\n outerRadius = innerRadius;\n innerRadius = temp;\n }\n // Is it a point?\n if (outerRadius <= epsilon) {\n context.moveTo(cx, cy);\n } else if (deltaAngle >= pi2 - epsilon) {\n // 是个完整的圆环\n // Or is it a circle or annulus?\n context.moveTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n context.arc(cx, cy, outerRadius, startAngle, endAngle, !clockwise);\n if (innerRadius > epsilon) {\n context.moveTo(cx + innerRadius * cos(endAngle), cy + innerRadius * sin(endAngle));\n context.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n }\n } else {\n const {\n outerDeltaAngle,\n xors,\n yors,\n xirs,\n yirs,\n limitedOcr,\n outerCornerRadiusStart,\n outerCornerRadiusEnd,\n maxOuterCornerRadius,\n xore,\n yore,\n xire,\n yire,\n outerStartAngle,\n outerEndAngle,\n limitedIcr,\n innerDeltaAngle,\n innerEndAngle,\n innerStartAngle,\n innerCornerRadiusStart,\n innerCornerRadiusEnd,\n maxInnerCornerRadius\n } = calculateArcCornerRadius(arc, startAngle, endAngle, innerRadius, outerRadius);\n // Is the sector collapsed to a line?\n // 角度过小,会将acr处理为圆心到半径的一条线\n if (outerDeltaAngle < 0.001) {\n // 如果有左右边的话\n if (partStroke && (partStroke[3] || partStroke[1])) {\n context.moveTo(cx + xors, cy + yors);\n }\n collapsedToLine = true;\n } else if (limitedOcr > epsilon) {\n const cornerRadiusStart = min(outerCornerRadiusStart, limitedOcr);\n const cornerRadiusEnd = min(outerCornerRadiusEnd, limitedOcr);\n // Does the sector’s outer ring have rounded corners?\n const t0 = cornerTangents(xirs, yirs, xors, yors, outerRadius, cornerRadiusStart, Number(clockwise));\n const t1 = cornerTangents(xore, yore, xire, yire, outerRadius, cornerRadiusEnd, Number(clockwise));\n\n // Have the corners merged?\n if (limitedOcr < maxOuterCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n context.arc(cx + t0.cx, cy + t0.cy, limitedOcr, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !clockwise);\n } else {\n context.moveTo(\n cx + t0.cx + limitedOcr * cos(atan2(t1.y01, t1.x01)),\n cy + t0.cy + limitedOcr * sin(atan2(t1.y01, t1.x01))\n );\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusStart,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n outerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n !clockwise\n );\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusEnd,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusEnd > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusEnd * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusEnd * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xore, cy + outerRadius * sin(outerEndAngle));\n }\n }\n }\n } else {\n // Or is the outer ring just a circular arc?\n if (!partStroke || partStroke[0]) {\n context.moveTo(cx + xors, cy + yors);\n context.arc(cx, cy, outerRadius, outerStartAngle, outerEndAngle, !clockwise);\n } else {\n context.moveTo(cx + outerRadius * cos(outerEndAngle), cy + outerRadius * sin(outerEndAngle));\n }\n }\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(innerRadius > epsilon) || innerDeltaAngle < 0.001) {\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n collapsedToLine = true;\n } else if (limitedIcr > epsilon) {\n const cornerRadiusStart = min(innerCornerRadiusStart, limitedIcr);\n const cornerRadiusEnd = min(innerCornerRadiusEnd, limitedIcr);\n // Does the sector’s inner ring (or point) have rounded corners?\n const t0 = cornerTangents(xire, yire, xore, yore, innerRadius, -cornerRadiusEnd, Number(clockwise));\n const t1 = cornerTangents(xors, yors, xirs, yirs, innerRadius, -cornerRadiusStart, Number(clockwise));\n\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n } else {\n context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01);\n }\n\n // Have the corners merged?\n if (limitedIcr < maxInnerCornerRadius && cornerRadiusStart === cornerRadiusEnd) {\n const arcEndAngle = atan2(t1.y01, t1.x01);\n if (!partStroke || partStroke[2]) {\n context.arc(cx + t0.cx, cy + t0.cy, limitedIcr, atan2(t0.y01, t0.x01), arcEndAngle, !clockwise);\n } else {\n context.moveTo(cx + t0.cx + cos(arcEndAngle), cy + t0.cy + sin(arcEndAngle));\n }\n } else {\n // Otherwise, draw the two corners and the ring.\n if (!partStroke || partStroke[2]) {\n cornerRadiusEnd > 0 &&\n context.arc(\n cx + t0.cx,\n cy + t0.cy,\n cornerRadiusEnd,\n atan2(t0.y01, t0.x01),\n atan2(t0.y11, t0.x11),\n !clockwise\n );\n context.arc(\n cx,\n cy,\n innerRadius,\n atan2(t0.cy + t0.y11, t0.cx + t0.x11),\n atan2(t1.cy + t1.y11, t1.cx + t1.x11),\n clockwise\n );\n cornerRadiusStart > 0 &&\n context.arc(\n cx + t1.cx,\n cy + t1.cy,\n cornerRadiusStart,\n atan2(t1.y11, t1.x11),\n atan2(t1.y01, t1.x01),\n !clockwise\n );\n } else {\n if (cornerRadiusStart > 0) {\n context.moveTo(\n cx + t1.cx + cornerRadiusStart * cos(atan2(t1.y01, t1.x01)),\n cy + t1.cy + cornerRadiusStart * sin(atan2(t1.y01, t1.x01))\n );\n } else {\n context.moveTo(cx + xirs, cy + yirs);\n }\n }\n }\n } else {\n // Or is the inner ring just a circular arc?\n if (!partStroke || partStroke[1]) {\n context.lineTo(cx + xire, cy + yire);\n } else {\n context.moveTo(cx + xire, cy + yire);\n }\n if (!partStroke || partStroke[2]) {\n context.arc(cx, cy, innerRadius, innerEndAngle, innerStartAngle, clockwise);\n } else {\n context.moveTo(cx + innerRadius * cos(innerStartAngle), cy + innerRadius * sin(innerStartAngle));\n }\n }\n }\n\n if (!partStroke) {\n context.closePath();\n } else if (partStroke[3]) {\n context.lineTo(cx + outerRadius * cos(startAngle), cy + outerRadius * sin(startAngle));\n }\n\n return collapsedToLine;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vrender-core",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "",
5
5
  "sideEffects": [
6
6
  "./src/modules.ts",
@@ -36,8 +36,8 @@
36
36
  "typescript": "4.9.5",
37
37
  "cross-env": "^7.0.3",
38
38
  "@internal/bundler": "0.0.1",
39
- "@internal/eslint-config": "0.0.1",
40
- "@internal/ts-config": "0.0.1"
39
+ "@internal/ts-config": "0.0.1",
40
+ "@internal/eslint-config": "0.0.1"
41
41
  },
42
42
  "keywords": [
43
43
  "VisActor",