我设法使用ExtendScript Toolkit javascript代码在Illustrator中选择我想要的所有东西:在多个层中有很多东西(文本,路径,符号......)。现在我想以同样的方式调整它们的大小,然后移动它们。
我知道如何通过代码将变换应用于一个对象,但我想避免在每个元素上循环,因为它会非常长并且将从每个元素的锚点应用变换,因此我的绘图将不会有凝聚力。
所以,我正在寻找一种在Illustrator UI中使用的方法:右键单击>变换>规模。我可以从代码(javascript)访问这样的UI命令吗?
答案 0 :(得分:1)
至少有三种方法可以做到这一点:
DoScript
)将所选对象分组,并将所需的转换应用于@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
调用Windows API函数(如PostMessage (..., WM_COMMAND, ..., ...)
,SendDlgItemMessage
,FindWindowEx
等)以显示,填充和执行所需的AI转换对话框
恕我直言,项目#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)