在Illustrator中加入相交路径

时间:2019-09-27 14:37:05

标签: javascript adobe-illustrator extendscript

短期问题:我在画板上有3条路径。一个路径的终点与另一个路径的起点在同一位置。另一条路径是分开的。他们都分组了。我有一些代码在组中的路径之间循环,如果一条路径在另一条路径开始的地方结束,它将尝试将它们连接在一起。该组必须突出显示。首先从我的画板开始,如下所示(第一行是两条路径): enter image description here

运行脚本后,它看起来像这样:

enter image description here

在行的底部添加了很多点。有人可以帮我这个忙吗?理想情况下,我希望它看起来像这样: enter image description here

代码如下:

var doc = activeDocument;//Gets the active document
var numArtboards = doc.artboards.length;//returns the number of artboards in the document
var intersections = true
var group = doc.selection[0]
var paths = []
var intersecttions = 0

// Builds an array of all the paths in the grouped object
if (group !== undefined && group.pageItems.length >= 2) {
    for (var i = 0; i < group.pageItems.length; i++) {
        var item = group.pageItems[i];
        if (item instanceof PathItem) {
            item.id = 'Path No' + i;
            paths.push(item)
        }
    }
}

//Sets the first path that will be added to
$.write('paths length ', paths.length,'\n')
var chain = paths[0]
var chainPoints = chain.pathPoints
var chainLength = chainPoints.length - 1
var c1 = chainPoints[0]
var c2 = chainPoints[chainLength]
$.write('c ', c1.anchor,':::', c2.anchor,'\n')

//loops through the paths in the group to see if any overlap the first past
for (var i = 1; i < paths.length-1; i++) {
var link = paths[i]
$.write(link, '\n')
var linkPoints = link.pathPoints
var linkLength = linkPoints.length - 1
$.write('l ', l1.anchor, ':::', l2.anchor, '\n')

if (toString(c1.anchor) === toString(l2.anchor)) {
    $.write('inttersection', '\n')
    $.write('link', link.id, '\n')
    for (var j = 0; j < linkLength; ++j) {
        chain.pathPoints.add(linkPoints[j])
        $.write (linkPoints[j], '\n')
    }
}
}

1 个答案:

答案 0 :(得分:0)

第一个问题是它没有正确检测到重叠实例。该行:

S3Application

不是将一个字符串与另一个字符串进行比较,而是将一个真实的响应与另一个真实的响应进行比较。应该是:

if (toString(c1.anchor) === toString(l2.anchor)) {

您还必须遍历要添加到该行的每个点的属性并删除旧行,因此在j循环中,您需要添加以下内容

if (String(c1.anchor) === String(l2.anchor)) {

这似乎可行,除了它不添加第二行的最后一点。我猜可能没有正确设置循环长度。如果我解决了,我将更新帖子。我在佐藤裕之代码的JoinReasonable脚本http://shspage.com/aijs/en/

中找到了这个