簡體   English   中英

使用basiljs交換項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM