InDesign extendScript:如何转换整个选区?

InDesign extendScript: How do I transform the entire selection?

通过使用简单数组 app.selection[x],您可以对 selection 中的任何对象应用变换,独立。但是我如何对整个 selection 一起应用转换?

例如:在 InDesign 中,我可以 select 两个并排的对象并水平翻转它们,从而使它们交换位置并翻转。

在脚本中,我可以定位 selection 中的每个对象,但它们不会交换位置;他们将留在同一个地方并翻转。

for ( var x = 0; x < app.selection.length; x++ ){
    app.selection[x].absoluteFlip = Flip.HORIZONTAL;
}

我可以对 selection 进行分组,应用转换,然后在完成后取消分组,但这似乎是不必要的体积,可能会减慢代码速度。我可以在 InDesign 中轻松地手动完成它,因此应该遵循某种方式来访问 app.selection 作为单个对象而不是数组。这样的物体存在吗?

考虑调整大小。它有一个 "individual/global" 参数: void resize (in: varies, from: varies, by: ResizeMethods, values: Array of varies[ resizeIndividually: bool=true][ consideringRulerUnits: bool=false]) 调整页面项目的大小。

不是真正的解决方案,但值得注意的是,我不认为 absoluteFlip 是正在执行的操作,而是指示项目是否已翻转的状态。它是可写的,所以你可以设置状态,但我认为使用菜单翻转时发生的事情是 flipItem: http://jongware.mit.edu/idcs6js/pc_PageItem.html#flipItem, 您可以在其中设置 "around" 坐标。 现在由于某种原因获取选择框的原点并不简单(或者可能是但我不知道如何),但是您可以使用第一个对象坐标来设置原点,这样您就可以根据不同的坐标翻转它按选择顺序。或者您可以对数组进行排序以找到最左边的坐标(或需要的坐标),如下所示:

    var selection_array = app.selection;
    selection_array.sort(function(a, b){return a.visibleBounds[1]-b.visibleBounds[1]})
    var flip_origin = [selection_array[0].visibleBounds[1],selection_array[0].visibleBounds[0]]
    for(i=0;i<app.selection.length;i++){
        app.selection[i].flipItem(Flip.HORIZONTAL, flip_origin);
    }

虽然不确定它比分组和取消分组更容易或更快。