Illustrator 画板居中对齐

作成日: 2024年12月4日

使用モデル O1 Preview by Chat01

質問

请写一个illustratoe软件的jsx,
功能是: 当前文件全部画版(包含画板上的内容)居中对齐画板1。

思考

对齐艺术板

我正在为Adobe Illustrator编写一段JSX脚本,以将当前文件中的所有画板及其内容居中对齐至画板1。这让我想到脚本需要移动所有画板及其内容。

获取参考和对齐

我将获取活跃文档的参考,识别画板1,然后将除了画板1以外的每个画板及其内容都居中对齐到画板1。这需要精确地计算位置来确保正确对齐。

移动画板内容

首先,获取画板1的中心位置。然后,计算每个画板与画板1的偏移量,最后移动画板及其内容以居中对齐。

定位中心和偏移量

首先,在计算画板1的中心点,然后确定其他画板的中心点和偏移量,最后移动画板及其内容以达到居中对齐效果。

计算和调整

首先我将在自己手头的示例文档中寻找艺术板的中心点。接着我会计算每个艺术板与中心点之间的差距。最后,我会调整艺术板和其内容的位置。

选择和移动

通过选择画板上的项目并将其移动来调动副本。可以遍历所有页面项目,判断它们是否在画板的边界内,或者选择画板上的项目。

计算和对齐

首先获取画板1的中心位置,然后计算每个画板的偏移量,最后调整画板和其内容的位置以实现居中对齐。

对比边界

通过比较项目的几何边界和画板的矩形范围,来确定项目是否位于画板内。

检测项目位置

通过计算项目的中心点来判断它是否位于画板的矩形范围内,从而确定项目是否在画板上。

确认坐标系统

Illustrator的坐标系统使用点,原点在第一个画板的左上角,x正方向向右,y正方向向下。geometricBounds和artboardRect时,y值是逐渐增大的。

导入数据

我正在查看artboardRect和geometricBounds的数组,这是导入数据的第一步。理解坐标系统的工作原理对我来说确实是一个挑战。

调整条件

根据y坐标的增减,我在函数中调整条件来准确判断项目是否位于画板矩形范围内。这个变化使我更好地理解了坐标系统的工作原理。

调整函数条件

根据Illustrator坐标系统的特点,我修改了判断条件,确保函数能够准确判断项目是否位于画板矩形范围内。这使得项目移位的逻辑更加精确。

调整移位方向

我正在根据deltaY的方向调整项目的移位方法,确保项目沿着正确的方向移动,以达到预期的对齐效果。

协调对齐
我正在将所有画板及其内容对齐至画板1的中心位置。通过移动每个画板和调整其内容位置,这种方式确保了整体设计的和谐统一。

思考,持续 40 秒

回答

以下是一个适用于 Adobe Illustrator 的 JSX 脚本,它将当前文件中所有画板(包括其上的内容)居中对齐到画板1:

jsx
var doc = app.activeDocument; var artboard1 = doc.artboards[0]; var rect1 = artboard1.artboardRect; var centerX1 = (rect1[0] + rect1[2]) / 2; var centerY1 = (rect1[1] + rect1[3]) / 2; for (var i = 1; i < doc.artboards.length; i++) { var artboard = doc.artboards[i]; var rect = artboard.artboardRect; var centerX = (rect[0] + rect[2]) / 2; var centerY = (rect[1] + rect[3]) / 2; var deltaX = centerX1 - centerX; var deltaY = centerY1 - centerY; // 移动画板 artboard.artboardRect = [ rect[0] + deltaX, rect[1] + deltaY, rect[2] + deltaX, rect[3] + deltaY ]; // 移动画板上的内容 var items = doc.pageItems; for (var j = 0; j < items.length; j++) { var item = items[j]; if (itemIsOnArtboard(item, rect)) { item.translate(deltaX, deltaY); } } } function itemIsOnArtboard(item, artboardRect) { var bounds = item.geometricBounds; // [左, 上, 右, 下] var itemCenterX = (bounds[0] + bounds[2]) / 2; var itemCenterY = (bounds[1] + bounds[3]) / 2; var left = artboardRect[0]; var top = artboardRect[1]; var right = artboardRect[2]; var bottom = artboardRect[3]; if (itemCenterX >= left && itemCenterX <= right && itemCenterY <= top && itemCenterY >= bottom) { return true; } else { return false; } }

使用方法:

  1. 打开 Adobe Illustrator 并打开包含多个画板的文件。
  2. 复制上述代码。
  3. 在 Illustrator 中,转到 文件 > 脚本 > 其他脚本,然后选择保存上述代码的 JSX 文件。
  4. 脚本将运行,并将所有画板及其内容居中对齐到画板1。

注意事项:

  • 该脚本假设画板1是您希望对齐到的目标画板。
  • 坐标系在脚本中已考虑到 Illustrator 的坐标系,Y 轴向上为正方向。

このQ&Aを共有