问题描述
我正在尝试了解 Google Slides API 旋转功能。
3000000 是对象的宽度和高度。 如果我们想逆时针旋转 Rectangle 35 度,
尝试理解文档中的示例参数,以及如何旋转 https://developers.google.com/slides/samples/transform
- 什么是低于 -0.5 和 0.3?它们是如何导出的?
- 此外,什么是 -2000000 和 -550000?
最后好奇是否有任何速记方法可以做到这一点?三个请求 15 行,只是为了旋转一个矩形?
{
"requests": [
{
"updatePageElementTransform": {
"objectId": pageElementId,"applyMode": "RELATIVE","transform": {
"scaleX": 1,"scaleY": 1,"translateX": -2000000 - 0.5 * 0.3 * 3000000,"translateY": -550000 - 0.5 * 0.12 * 3000000,"unit": "EMU"
}
}
},{
"updatePageElementTransform": {
"objectId": pageElementId,"transform": {
"scaleX": cos(35 * (pi/180)),"scaleY": cos(35 * (pi/180)),"shearX": sin(35 * (pi/180)),"shearY": -sin(35 * (pi/180)),"unit": "EMU"
}
}
},"transform": {
"scaleX": 1,"translateX": 2000000 + 0.5 * 0.3 * 3000000,"translateY": 550000 + 0.5 * 0.12 * 3000000,"unit": "EMU"
}
}
}
]
}
顺便说一下,刚刚打开了速记轮换的功能请求,暂时想办法解决https://issuetracker.google.com/u/2/issues/183986639
解决方法
答案:
在 Slides 中完成对形状的转换时,所有操作都是从页面原点的参考框架中完成的。这个点是页面的左上角。
更多信息:
在 Transform Operations 的页面顶部,它声明页面上的示例假定存在已定义的箭头形状:
对于这些示例,假设存在具有以下大小和转换数据的示例箭头形状页面元素(可以通过presentation.pages.get 请求找到):
{
"objectId": pageElementId,"size": {
"width": {
"magnitude": 3000000,"unit": "EMU"
},"height": {
"magnitude": 3000000,"unit": "EMU"
}
},"transform": {
"scaleX": 0.3,"scaleY": 0.12,"shearX": 0,"shearY": 0,"translateX": 2000000,"translateY": 550000,"unit": "EMU"
},"shape": {
"shapeType": "RIGHT_ARROW"
}
}
所以要回答你的前两个问题:
- 0.3 取自箭头的缩放因子。
- -2000000 和 -550000 用于将形状转换为页面的原点
- -0.5 用于将平移距离减半(因为我们从形状的中心而不是它的顶点进行旋转)
此外,来自 Sizing and Positioning Page Elements 的文档(强调我自己的):
旋转变换使用缩放和剪切参数围绕一个点旋转页面元素。基本旋转变换矩阵具有以下形式,其中旋转角度(以弧度为单位)是从 X 轴开始测量的,逆时针移动:
与缩放一样,您可以直接使用此矩阵形式作为相对变换来旋转元素,但这会导致元素围绕页面原点旋转。 要围绕其中心或不同点旋转元素,shift to that reference frame。
答案很简单:是的,您可以在一个请求中完成,但您必须自己进行计算以转移到元素的参考系,然后将那个请求发送给 API。 >
希望对你有帮助!