Google 幻灯片将矩形旋转 35 度 答案:更多信息:参考:

问题描述

我正在尝试了解 Google Slides API 旋转功能

3000000 是对象的宽度和高度。 如果我们想逆时针旋转 Rectangle 35 度,

尝试理解文档中的示例参数,以及如何旋转 https://developers.google.com/slides/samples/transform

  1. 什么是低于 -0.5 和 0.3?它们是如何导出的?
  2. 此外,什么是 -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 轴开始测量的,逆时针移动:

enter image description here

与缩放一样,您可以直接使用此矩阵形式作为相对变换来旋转元素,但这会导致元素围绕页面原点旋转。 要围绕其中心或不同点旋转元素,shift to that reference frame

答案很简单:是的,您可以在一个请求中完成,但您必须自己进行计算以转移到元素的参考系,然后将那个请求发送给 API。 >

希望对你有帮助!

参考:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...