短期问题:我在画板上有3条路径。一个路径的终点与另一个路径的起点在同一位置。另一条路径是分开的。他们都分组了。我有一些代码在组中的路径之间循环,如果一条路径在另一条路径开始的地方结束,它将尝试将它们连接在一起。该组必须突出显示。首先从我的画板开始,如下所示(第一行是两条路径):
运行脚本后,它看起来像这样:
在行的底部添加了很多点。有人可以帮我这个忙吗?理想情况下,我希望它看起来像这样:
代码如下:
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')
}
}
}
答案 0 :(得分:0)
第一个问题是它没有正确检测到重叠实例。该行:
S3Application
不是将一个字符串与另一个字符串进行比较,而是将一个真实的响应与另一个真实的响应进行比较。应该是:
if (toString(c1.anchor) === toString(l2.anchor)) {
您还必须遍历要添加到该行的每个点的属性并删除旧行,因此在j循环中,您需要添加以下内容
if (String(c1.anchor) === String(l2.anchor)) {
这似乎可行,除了它不添加第二行的最后一点。我猜可能没有正确设置循环长度。如果我解决了,我将更新帖子。我在佐藤裕之代码的JoinReasonable脚本http://shspage.com/aijs/en/
中找到了这个