• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers

Is there an indesign script to arrange multiple objects in a matrix?

Contributor ,
Oct 25, 2020 Oct 25, 2020

Copy link to clipboard

Copied

can control the spacing and size.
The size can be controlled by calling the object style.
For example, I want to arrange 6 plates into: 2 columns and 3 rows.
The horizontal spacing is 4mm, and the vertical spacing is 8mm.

TOPICS
Bug , How to , Import and export , Scripting

Views

1.1K

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 2 Correct answers

Community Expert , Nov 01, 2020 Nov 01, 2020

There are a lot of possible variables—are the objects different sizes, does their placement in the matrix matter, where is the position of the matrix on the page? This arranges a selection of same sized objects:

 


#target indesign

app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS;
app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.MILLIMETERS;

var s = app.activeDocument.selection;

//number of columns and rows
var col = 2;
...

Likes

Translate

Translate
Community Expert , Jan 28, 2022 Jan 28, 2022

It’s easy enough to remove the X, Y preference from the dialog, but the grid is keyed off of the upper left corner of the selection and not its center. So in this example the new arrangment would not be centered on the original selection:

 

Screen Shot 30.png

The grid will start from the upper left of the original selection

Screen Shot 31.png

 

 

 

/*
* Arranges a selection of objects into a grid starting from the selection’s upper left
* Version 1.5
* Rob Day 2020-2021
*/


//check for a selection
var s = app.activeDocument.selec
...

Likes

Translate

Translate
Community Expert ,
Jan 28, 2022 Jan 28, 2022

Copy link to clipboard

Copied

LATEST

It’s easy enough to remove the X, Y preference from the dialog, but the grid is keyed off of the upper left corner of the selection and not its center. So in this example the new arrangment would not be centered on the original selection:

 

Screen Shot 30.png

The grid will start from the upper left of the original selection

Screen Shot 31.png

 

 

 

/*
* Arranges a selection of objects into a grid starting from the selection’s upper left
* Version 1.5
* Rob Day 2020-2021
*/


//check for a selection
var s = app.activeDocument.selection;
if (s.length > 1) {
    makeDialog();
} else {alert("Please Select Some Objects.")}

//result variables
var xoff, syoff, col, row, xgut, ygut; 

/**
* Make the export settings dialog 
*  
* 
*/
function makeDialog(){
    var mw = 90;

    //the dialog name
    var theDialog = app.dialogs.add({name:"Arrange Matrix", canCancel:true});
    with(theDialog){
        with(dialogColumns.add()){
            with(borderPanels.add()){
                with(dialogColumns.add()){
                    staticTexts.add({staticLabel:"Columns:"});
                    staticTexts.add({staticLabel:"Rows:"});
                    staticTexts.add({staticLabel:"Column Gutter:"});
                    staticTexts.add({staticLabel:"Row Gutter:"});
                }
                with(dialogColumns.add()){
                    var nCol = integerEditboxes.add({editValue:2, minWidth:mw});
                    var nRow = integerEditboxes.add({editValue:2, minWidth:mw});
                    var colGutter = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                    var rowGutter = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                }
            }
        }
    }
	
    var dResult = theDialog.show();
    if(dResult == true){
        col = nCol.editValue;
        row = nRow.editValue;
        xgut = colGutter.editValue;
        ygut = rowGutter.editValue
        theDialog.destroy();
        makeMatrix();
	}else{
		theDialog.destroy();
	}
}

/**
* Arrange the selected items in a grid 
*  void 
*/
function makeMatrix(){
    var sp = app.scriptPreferences.measurementUnit;
    app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS

    var colw = getPos(s)[0];
    var colh = getPos(s)[1];
    var xoff = getPos(s)[2];
    var yoff = getPos(s)[3] - (colh + ygut);
    var startX = xoff;
    
    //Use modulo to make the matrix set columns
    for (var i = 0; i < s.length; i++){
        if (i % col > 0) {
            xoff = xoff + colw + xgut;
        }else{
            xoff = startX;
            yoff = yoff + colh + ygut;
        }
        s[i].move( [xoff, yoff] );
    };   
    app.scriptPreferences.measurementUnit = sp; 
}



/**
* Get matrix tile position 
*  the selection to arrange 
*  an array with colwidth, rowheight, x, and y 
* 
*/
function getPos(sel){
    var x = sel[0].geometricBounds[1];
    var y = sel[0].geometricBounds[0];
    
    var w = 0;
    var h = 0;
    var a = []
    for (var i = 0; i < sel.length; i++){
        var b = sel[i].geometricBounds;
        if (b[1] < x) {
            x = b[1]
        } 
        if (b[0] < y) {
            y = b[0]
        } 
        if (b[3]-b[1] > w) {
            w = b[3]-b[1]
        } 
        if (b[2]-b[0] > h) {
            h = b[2]-b[0]
        }
    };
    a=[w, h, x, y];
    return a
}


 

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 26, 2021 Apr 26, 2021

Copy link to clipboard

Copied

Hi dublove,

Firefox is working as well on my Windows 10 machine:

NoIssueToDownload-1.PNG

 

Also running the script on a selection of items:

( German InDesign 2021 on Windows 10. )

SelectionMatrixDialogScript-by-RobDay.PNG

 

Regards,
Uwe Laubender

( ACP )

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines