[英]Swap Items using 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();
現在我的問題是:如何調用框架內容。 顯然,我希望該動作與框架相同。
感謝您的幫助,我渴望學習更多! 拉菲
即使這不是“基本”方式,我還是建議您使用InDesign內置函數。 您可以將它們與Basil Code混合使用。 羅勒不在乎。 可以將元素裝配到其框架中或將它們居中。
試試以下代碼片段:
#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();
問題在於,在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團隊意識到圖像的轉換有點過於復雜,並且有計划在將來簡化此過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.