如何通过脚本将转换应用于Illustrator中的选择

时间:2017-12-11 17:27:29

标签: javascript adobe-illustrator extendscript

我设法使用ExtendScript Toolkit javascript代码在Illustrator中选择我想要的所有东西:在多个层中有很多东西(文本,路径,符号......)。现在我想以同样的方式调整它们的大小,然后移动它们。

我知道如何通过代码将变换应用于一个对象,但我想避免在每个元素上循环,因为它会非常长并且将从每个元素的锚点应用变换,因此我的绘图将不会有凝聚力。

所以,我正在寻找一种在Illustrator UI中使用的方法:右键单击>变换>规模。我可以从代码(javascript)访问这样的UI命令吗?

2 个答案:

答案 0 :(得分:1)

至少有三种方法可以做到这一点:

  1. 记录执行所需转换的AI动作,然后从脚本中播放这些动作(DoScript
  2. 将所选对象分组,并将所需的转换应用于@Dane建议的组。您需要备份Layer对象属性以允许在原始图层中恢复对象,如下面的VBA示例所示:

    For i = Index_Lo To Index_Hi
        Call Layers_Backup.Add(Item:=SelectedItems(i).Layer, Key:=Format(i))
        Call SelectedItems(i).Move(Temp_Group, AiElementPlacement.aiPlaceAtEnd)
    Next i
    
    Call Temp_Group.Resize(scaleX:=120, scaleY:=120, changeLineWidths:=120)
    
    For i = Index_Lo To Index_Hi
        Call SelectedItems(i).Move(Layers_Backup(Format(i)), AiElementPlacement.aiPlaceAtEnd)
    Next i
    
  3. 调用Windows API函数(如PostMessage (..., WM_COMMAND, ..., ...)SendDlgItemMessageFindWindowEx等)以显示,填充和执行所需的AI转换对话框

  4. 恕我直言,项目#1是最容易实施的,而项目#2是最可靠的

答案 1 :(得分:0)

所以我不知道你是否能够以某种形式或其他形式循环。也就是说,如果你不介意把你的选择放到一个组中,可能会更快地循环选择添加到一个可能比循环更快的组,并通过选择和缩放并移动每个元素。使用组对象,您可以执行 groupObject .scale()和.translate()。 这是我从我的剧本中获取的片段。

#target "illustrator"
var aiApp = app.activeDocument;
var aSelection = aiApp.selection;
var aGroup = app.activeDocument.groupItems.add();

for (i=0; i < aSelection.length; i++){
aSelection[i].move( aGroup, ElementPlacement.INSIDE); 
aSelection[i].move( aGroup, ElementPlacement.PLACEATEND);  
 }
//moves up 700 points and scales by 200
aGroup.translate(0,700)
aGroup.resize(200, 200, true , true, true, true, 200)