新手从applescript转向扩展脚本试图圆角

问题描述 投票:0回答:1

我对使用Applescript编写Indesign脚本非常满意,现在我想学习extendscript和idjs脚本,我对这两者都是绝对的初学者。 下面我设法拼凑了一个基本设置,但我认为我将上述样式混合到一个脚本中,因为它感觉和看起来都非常尴尬。有人可以告诉我如何收拾这个烂摊子,这样我就可以看到它应该是什么样子,并从正确的方法中学习。

脚本按照我想要的方式运行,但无法圆化矩形角,在 applescipt 中我会使用“将给定的形状转换为圆角矩形”,在 jsx 中我设法让我的代码圆整矩形,如下所示。

var myDoc = app.documents.add();
var rect =myDoc.rectangles.add({geometricBounds : [0,0,45,90]}) ;
rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, 8);

但我不知道如何将它合并到我的其他代码中,这就是这个

let myInDesign = require("indesign");
let app = myInDesign.app;
//let myLayer = myDoc.layers.item("Layer 1");

//************* Create Page Size *************
var myDoc = app.documents.add();
  with (myDoc.documentPreferences) {
      
pageHeight = "120 mm";
 pageWidth = "235 mm";
  pagesPerDocument = 1;

winHeight = "45 mm";
 winWidth = "90 mm";
  winInLeft = "20 mm";
   winUpBottom = "55 mm";  // up from bottom 20mm //

var marginPreferences = app.marginPreferences
 marginPreferences.bottom = "17mm";
  marginPreferences.left = "10mm";
   marginPreferences.right = "10mm";
    marginPreferences.top = "10mm";

app.activeDocument.zeroPoint = [0, 0];


//************* WINDOW SIZE & POSITION ************* LAYER INDEX 1
windowLayer = "Window";
 targetLayer=myDoc.layers.itemByName(windowLayer);
  myDoc.layers.add ({name:windowLayer});
   targetLayer=myDoc.layers.itemByName(windowLayer);

var rect =myDoc.rectangles.add({geometricBounds : [0,0,winHeight,winWidth] , strokeColor : myDoc.colors.itemByName("Keyline") , strokeWeight : "0.25" , overprintStroke : true ,});
rect.move([winInLeft, winUpBottom]);


rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, "8");    //************* script stops here.  

;

//************* ENV SIZE ************* LAYER INDEX 2
keylineLayer = "Keyline";
 targetLayer=myDoc.layers.itemByName(keylineLayer);
  myDoc.layers.add ({name:keylineLayer});
   targetLayer=myDoc.layers.itemByName(keylineLayer);
    var rect =myDoc.rectangles.add({geometricBounds : [0,0,pageHeight,pageWidth] , strokeColor : myDoc.colors.itemByName("Keyline") , strokeWeight : "0.25" , overprintStroke : true ,});
;

//});
    
}

adobe-indesign
1个回答
0
投票
// Import
const myInDesign = require("indesign");
const app = myInDesign.app;

// Function to create a new document with specified preferences
function createDocument() {
    let myDoc = app.documents.add();
    with (myDoc.documentPreferences) {
        pageHeight = 120 * 2.83465;  // mm to points conversion (1 mm = 2.83465 points)
        pageWidth = 235 * 2.83465;
        pagesPerDocument = 1;
    }
    return myDoc;
}

// Function to add a layer if it doesn't already exist
function ensureLayer(doc, layerName) {
    let layer = null;
    try {
        layer = doc.layers.itemByName(layerName);
    } catch (e) {
        layer = doc.layers.add({name: layerName});
    }
    return layer;
}

// Function to create a rectangle with rounded corners
function createRoundedRectangle(doc, layer, bounds, cornerRadius) {
    let rect = doc.rectangles.add({
        geometricBounds: bounds,
        strokeColor: doc.colors.itemByName("Keyline"),
        strokeWeight: 0.25,
        overprintStroke: true,
        itemLayer: layer
    });
    rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, cornerRadius);
    return rect;
}

// Main Script
(function main() {
    let myDoc = createDocument();
    let windowLayer = ensureLayer(myDoc, "Window");
    let keylineLayer = ensureLayer(myDoc, "Keyline");

    // Adding window rectangle
    createRoundedRectangle(
        myDoc, 
        windowLayer, 
        [0, 0, 45 * 2.83465, 90 * 2.83465], // Convert mm to points
        8
    ).move([20 * 2.83465, 55 * 2.83465]);

    // Adding keyline rectangle
    createRoundedRectangle(
        myDoc, 
        keylineLayer, 
        [0, 0, myDoc.documentPreferences.pageHeight, myDoc.documentPreferences.pageWidth],
        0 // No rounding for keyline
    );
})();
© www.soinside.com 2019 - 2024. All rights reserved.