fix: 导入PPTX组合元素旋转后位置计算、超小形状显示异常

This commit is contained in:
pipipi-pikachu 2025-01-11 10:48:44 +08:00
parent 88ab684ffc
commit dbdab187e5
3 changed files with 48 additions and 1 deletions

View File

@ -102,6 +102,32 @@ export default () => {
return data
}
const calculateRotatedPosition = (
x: number,
y: number,
w: number,
h: number,
ox: number,
oy: number,
k: number,
) => {
const radians = k * (Math.PI / 180)
const containerCenterX = x + w / 2
const containerCenterY = y + h / 2
const relativeX = ox - w / 2
const relativeY = oy - h / 2
const rotatedX = relativeX * Math.cos(radians) + relativeY * Math.sin(radians)
const rotatedY = -relativeX * Math.sin(radians) + relativeY * Math.cos(radians)
const graphicX = containerCenterX + rotatedX
const graphicY = containerCenterY + rotatedY
return { x: graphicX, y: graphicY }
}
// 导入PPTX文件
const importPPTXFile = (files: FileList) => {
const file = files[0]
@ -467,7 +493,26 @@ export default () => {
options,
})
}
else if (el.type === 'group' || el.type === 'diagram') {
else if (el.type === 'group') {
const elements = el.elements.map(_el => {
let left = _el.left + originLeft
let top = _el.top + originTop
if (el.rotate) {
const { x, y } = calculateRotatedPosition(originLeft, originTop, originWidth, originHeight, _el.left, _el.top, el.rotate)
left = x
top = y
}
return {
..._el,
left,
top,
}
})
parseElements(elements)
}
else if (el.type === 'diagram') {
const elements = el.elements.map(_el => ({
..._el,
left: _el.left + originLeft,

View File

@ -111,6 +111,7 @@ const text = computed<ShapeText>(() => {
svg {
transform-origin: 0 0;
overflow: visible;
display: block;
}
}
.shape-text {

View File

@ -208,6 +208,7 @@ const startEdit = () => {
svg {
transform-origin: 0 0;
overflow: visible;
display: block;
}
.shape-path {