2017-05-31 40 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();