2017-05-31 36 views
0

我是整个basiljs世界的新手。所以这可能是一个非常基本的问题。我无法自己弄清楚,但是...使用basiljs交换项目

我想创建一个简单的脚本,交换在同一页上选择的两个项目。

我能够获取图像帧进行交换,但它将帧内容保留在相同的位置。这是啥子样子:

#includepath "~/Documents/;%USERPROFILE%Documents"; 
 
#include "basiljs/bundle/basil.js"; 
 

 
function draw() { 
 

 
    var selItems = b.selections(); 
 
    var selItems0x = b.itemX(selItems[0]); 
 
    var selItems1x = b.itemX(selItems[1]); 
 
    var selItems0y = b.itemY(selItems[0]); 
 
    var selItems1y = b.itemY(selItems[1]); 
 

 
    
 
    b.itemX(selItems[0], selItems1x); 
 
    b.itemX(selItems[1], selItems0x); 
 
    b.itemY(selItems[0], selItems1y); 
 
    b.itemY(selItems[1], selItems0y); 
 
    
 

 
} 
 
b.go();

现在我的问题是:如何可以调用框架内容。很显然,我希望这一个动作与框架一致。

感谢您的帮助,我渴望了解更多! Raphy

回答

0

问题是,在InDesign中,(图像)图形及其包含的框架被视为两个单独的对象,这意味着,如果只移动框架,其中的图形不会沿着移动。

在basil.js中,您可以使用方法b.transformImage()来移动框架及其图形,但使用起来相当麻烦,因为您需要传递图像的位置以及比例尺。

或者,您可以在第二步中移动图形。首先确保该项目实际上包含图形(而不是简单的椭圆形等),如果是这种情况,则将其移动到与其父框架相同的位置。您可以使用frame.graphics[0]访问帧图形。

脚本应该是这样的,那么:

#includepath "~/Documents/;%USERPROFILE%Documents"; 
#include "basiljs/bundle/basil.js"; 

function draw() { 

    var selItems = b.selections(); 

    var selItems0x = b.itemX(selItems[0]); 
    var selItems1x = b.itemX(selItems[1]); 
    var selItems0y = b.itemY(selItems[0]); 
    var selItems1y = b.itemY(selItems[1]); 


    b.itemX(selItems[0], selItems1x); 
    b.itemY(selItems[0], selItems1y); 

    if(selItems[0].graphics.length > 0) { 
     b.itemX(selItems[0].graphics[0], selItems1x); 
     b.itemY(selItems[0].graphics[0], selItems1y); 
    } 

    b.itemX(selItems[1], selItems0x); 
    b.itemY(selItems[1], selItems0y); 

    if(selItems[1].graphics.length > 0) { 
     b.itemX(selItems[1].graphics[0], selItems0x); 
     b.itemY(selItems[1].graphics[0], selItems0y); 
    } 

} 
b.go(); 

注意,如果图像的左上角被框架裁剪这是不行的。在这种情况下,您需要确定图形左上角的实际位置,然后在移动图形后相应地偏移图形。

顺便说一句,basil.js团队意识到图像的转换有些过于复杂,为了简化这个过程,

1

即使它不是“basiliy”的方式,我建议在函数中使用InDesign构建。您可以将它们与Basil编码混合。罗勒不关心。有可能将元素装入其框架或居中。

试试这个片断:

#includepath "~/Documents/;%USERPROFILE%Documents"; 
#include "basiljs/bundle/basil.js"; 

function setup(){ 
    var sel = b.selections(); 
    var gb0 = sel[0].geometricBounds; 
    var gb1 = sel[1].geometricBounds; 
    // swap them 
    sel[0].geometricBounds = gb1; 
    sel[1].geometricBounds = gb0; 
    // see the different fit options 
    // http://yearbook.github.io/esdocs/#/InDesign/FitOptions 
    sel[0].fit(FitOptions.CENTER_CONTENT); 
    sel[0].fit(FitOptions.PROPORTIONALLY); 
    } 

b.go();