问题描述
行长,在一行上更新旋转时不一样。假设以大于45°的角度插入线并以相同角度进行旋转时,线的长度在旋转后出现不同,则该长度应与插入的线长度相同。屏幕截图如下。
function lineRotation() {
var selection = SlidesApp.getActivePresentation().getSelection();
if(selection.getPageElementRange() !== null){
var pageElements = selection.getPageElementRange().getPageElements()
if(pageElements[0].getPageElementType() == 'LINE'){
//Getting Line left position and width
var left = pageElements[0].asLine().getLeft(),width = pageElements[0].asLine().getWidth(),height = pageElements[0].asLine().getHeight(),top = pageElements[0].asLine().getTop()
let sx1 = pageElements[0].asLine().getStart().getX();
let sy1 = pageElements[0].asLine().getStart().getY();
let ex1 = pageElements[0].asLine().getEnd().getX();
let ey1 = pageElements[0].asLine().getEnd().getY();
let dy = ey1 - sy1;
let dx = ex1 - sx1;
let theta = Math.atan2(dy,dx);
theta *= 180/Math.PI;
let dist = formatNum(Math.sqrt(dx * dx + dy * dy)); //formatNum used to format result negative to positive
//Updating Line
if(theta > 45){ //if angle greater than 45 then it will rotate vertically else horizontally
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT).setEnd(left,dist);
}else{
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT)
.setEnd(left+dist,pageElements[0].asLine().getTop());
}
}else{
SlidesApp.getUi().alert('Please select line.');
}
}else{
SlidesApp.getUi().alert('Please select elements.');
}
}
未来的范围:我也希望旋转后的行长相同。
所需的输出:旋转线条时,水平或垂直两种情况下的长度都应相同。
解决方法
修改点:
-
首先,Slide的坐标原点是左上角。
-
top
和setEnd(left,top)
是幻灯片的坐标,如下所示。-
left
:直线终点的水平位置,以从页面左上角开始的点数为单位。 -
top
:直线终点的垂直位置,以从页面左上角开始的点数为单位。
-
-
在您的脚本中,
left,dist
中的setEnd(left,dist)
是var left = pageElements[0].asLine().getLeft()
和let dist = formatNum(Math.sqrt(dx * dx + dy * dy))
。left
是坐标。但是dist
是不是坐标的长度。在这种情况下,需要添加坐标作为偏移量。我认为这是您遇到问题的原因。
left
的当以上几点反映到您的脚本时,它如下所示。
修改后的脚本:
从:if(theta > 45){ //if angle greater than 45 then it will rotate vertically else horizontally
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT).setEnd(left,dist);
}else{
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT)
.setEnd(left+dist,pageElements[0].asLine().getTop());
}
至:
if(theta > 45){
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT).setEnd(left,dist + sy1);
}else{
pageElements[0].asLine().setLineCategory(SlidesApp.LineCategory.STRAIGHT).setEnd(sx1,sy1 - dist);
}
- 在这种情况下,假设
dist
始终是脚本中formatNum used to format result negative to positive
的正值。
当上面的修改反映到您的脚本时,它如下所示。
注意:
- 在这个答案中,它假定像GIF动画一样创建了一条线。