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

Confused about how coordinates work in scripts

Participant ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

So strictly speaking inside of a script, the origin is the lower left corner of the artboard... Then say with the sample code here:

 

myDoc.pathItems.rectangle(8, 4, 4, 4);

 

This goes (x, y, x, y) ?  and the 2nd x, y is in relation to the first point, not to the origin?  And x being positive is always to the right, and y being positive is always up?

TOPICS
Scripting

Views

1.0K

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
Adobe
Community Expert ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

The coordinates in Illustrator are a bit confusing (confused?). In artboard coordinates, the 0,0 point is top left of artboard.

 

Try this:

var top = 10, left = 20, width = 30, height = 40;
app.activeDocument.pathItems.rectangle(-top, left, width, height);

 

Notice the minus sign before 'top'? This is because the illustrator Y axis starts at 0 at the top of artboard, and goes down. So -10 means 10 down from the top of the artboard.

 

FYI, I mentioned artboard coordinates earlier. This means that values are relative to the active artboard. So when drawing with a script, the artboard matters. If that's a problem for your script, look into document coordinates.

 

Regards,

Mark

Votes

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
Participant ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

I keep playing around with my numbers trying to wrap my head around things, and with my line of code I posted originally, all my shapes are appearing in the lower left corner of the artboard as I keep my numbers hovering around all 0's, giving me the impression that the lower left is the origin?

 

Oh, it's not x,y x,y .. it's y, x, width, height?

Votes

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 ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

When I run my above code I get a box that's 10 down and 20 to the right of the top left of the artboard. Where does it appear when you run my code?

 

Yes, it is top, left, width, height. I find it helps during a learning phase to use different values for each (eg. 10,20,30,40), so I can get my head around it more easily.

Votes

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
Explorer ,
Jun 23, 2020 Jun 23, 2020

Copy link to clipboard

Copied

There are also application-level preferences that dictate how coordinates are referenced in relation to the origin.

 

preferences.setBooleanPreference( "isRulerOriginTopLeft", true )
preferences.setBooleanPreference( "isRulerIn4thQuad", true )

 

Without explicitly setting these, two machines could perform the same script on the same document and get differing results.

Votes

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 ,
Jun 23, 2020 Jun 23, 2020

Copy link to clipboard

Copied

Great info! Thanks 🙂

Votes

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 ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

as if things weren't confusing enough, here's the kicker. If your script creates the document the origin is bottom/left. If your script references an already open document, the origin is top/left.

 

that might seem absolutely crazy, but it kinds of make sense. Adobe changed the origin from bottom/left to top/left in CS5. So in order to not break existing scripts, origin had to remain as it was (as in CS4) when the script creates documents, but accessing existing documents had to align with the new and shining Cartesian system (CS5).

Votes

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 ,
Jun 21, 2020 Jun 21, 2020

Copy link to clipboard

Copied

Ouch! That is a horrible kicker. Thanks for the info.

Maple_Stirrup does your script create the document? My test was on a new blank document created via the normal UI.

Votes

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
Participant ,
Jun 22, 2020 Jun 22, 2020

Copy link to clipboard

Copied

Yeah my script did create the document, this is all great information, I appreciate it.

 

 

Votes

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
Participant ,
Jun 23, 2020 Jun 23, 2020

Copy link to clipboard

Copied

Okay does the artboard rect work the same as making a rectangle?  It's y, x, width, height?

Votes

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
Explorer ,
Jun 23, 2020 Jun 23, 2020

Copy link to clipboard

Copied

Unfortunately no. artboardRect returns an array in the form [ x1, y1, x2, y2 ].

Votes

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 ,
Jun 23, 2020 Jun 23, 2020

Copy link to clipboard

Copied

it is [left, top, right, bottom]

Votes

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
Advocate ,
Jun 24, 2020 Jun 24, 2020

Copy link to clipboard

Copied

Salut!
Une méthode à l'ancienne pour ne pas se préoccuper de la position de l'origine globale.

Il suffit de faire un choix au départ du script? (se référer au bas ou au haut du plan de travail)

Mais depuis il y a d'autres méthodes mais celle ci peut aider à comprendre...

 

 

// elleere Wed, 24 June 2020 08:11:52 GMT
// Traitement dans le plan de travail actif
// orignine fictive en haut à gauche avec rulerOrigin
var docRef = app.activeDocument;
var Origin = docRef.rulerOrigin;
var hauteur = docRef.height;
var origX = -Origin[0];
var origY = -Origin[1]+hauteur;

var top = origY-50, left = origX+50, width = 60, height = 40;
docRef.pathItems.rectangle(top, left, width, height);
// orignine fictive en bas à gauche avec rulerOrigin
    var origX = -Origin[0];
    var origY = -Origin[1];
var  height = 40, top = origY+50+height, left = origX+50, width = 60;
docRef.pathItems.rectangle(top, left, width, height);

 

 

de elleere

 

 

 

Votes

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
Advocate ,
Jun 24, 2020 Jun 24, 2020

Copy link to clipboard

Copied

Salut!
Une méthode à l'ancienne pour ne pas se préoccuper de la position de l'origine.

Il suffit de faire un choix au départ du script? (se référer au bas ou au haut du plan de travail)

Mais depuis il y a d'autre méthode mais celle ci peut aider à comprendre...

// elleere Wed, 24 June 2020 08:11:52 GMT
// Traitement dans le plans de travail actif
// orignine fictive en haut à gauche avec rulerOrigin
var docRef = app.activeDocument;
var Origin = docRef.rulerOrigin;
var hauteur = docRef.height;
var origX = -Origin[0];
var origY = -Origin[1]+hauteur;

var top = origY-50, left = origX+50, width = 60, height = 40;
docRef.pathItems.rectangle(top, left, width, height);
// orignine fictive en bas à gauche avec rulerOrigin
    origX = -Origin[0];
    origY = -Origin[1];

    var  height = 40, top = origY+50+height, left = origX+50, width = 60;
docRef.pathItems.rectangle(top, left, width, height);

de elleere

 

Votes

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
Participant ,
Jun 26, 2020 Jun 26, 2020

Copy link to clipboard

Copied

LATEST

It seems if a script changes the artboard, the origin doesn't move, but if you manually resize the artboard, the origin moves with it... is that correct?

Votes

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