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

Automatic sequential numeric symbols

New Here ,
Jan 25, 2024 Jan 25, 2024

Copy link to clipboard

Copied

Is there a way I can save a symbol that automatically goes to the next numeric value without having to edit the text box in the symbol every time? Picture for contextScreenshot (1).png

TOPICS
Experiment , Scripting

Views

271

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 ,
Jan 26, 2024 Jan 26, 2024

Copy link to clipboard

Copied

do you want to create a new symbol in the symbols panel? 

what would current last number be, to create the next number?

in your screenshot the last symbol has a number 1

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
New Here ,
Feb 02, 2024 Feb 02, 2024

Copy link to clipboard

Copied

Yes precisely, if it would automatically just generate the new number for me that would be super beneficial.

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 ,
Feb 02, 2024 Feb 02, 2024

Copy link to clipboard

Copied

can you provide a sample file and clear instructions? 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
Advocate ,
Feb 08, 2024 Feb 08, 2024

Copy link to clipboard

Copied

LATEST

Bonjour,

J'ai essayé d'imaginer un scénario simple pour "enregistrer un symbole qui passe automatiquement à la valeur numérique suivante".

Le principe repose sur une sélection dont l'ordre déterminera la numérotation.
La numérotation démarre à l'opposé objet situé en arrière plan (index de départ variable "deb" zone INIT du script).

Pour le test, il existe deux modes de sélection  a et B.

Les objets sélectionnés seront remplacés chacun par une instance d'un nouveau symbole  indexé, si le premier objet de la sélection est une instance de symbole (mode A), ce symbole devient l'élément de référence, peu importe son nom si non l'élément de référence sera un symbole existant de nom "test" (mode B) valeur par défaut (variable symbolRefName)
Un nouveau symbole indexé est créé seulement si celui ci n’existe pas.
Remarque:
Les instances du symboles indexés adoptent la position de l'objet sélectionné [left,top], elle ne sont pas redimensionnées.

Leur nom correspond au nom de l'élément de référence plus un espace suivi de l'index (test 1, test 2...)  

Avant de lancer le test, vous devrez créer un symbole sensiblement identique à "test", et en créer un autre par exemple en remplaçant le cercle par un carré (deux tracés: un trait fléché et un cercle au premier plan, puis grouper l'ensemble ou non).
Attention! Il faut impérativement nommer le container (l'élément qui reçoit l'index) par défaut "c" (variable contName).

Il est bien sur possible d'aller plus loin ou d'envisager d'autres approches...

René

// INIT --------------------
  var symbolRefName = "test"; // Name of the reference symbol
  var deb = 1; // Starting index of the number to be placed in the symbols
  var contName = "c"; // Container Name
//--------------------------

symbole test.png

num symboles.png

Un autre exemple pour s'amuser un peu...

Je veux placer des pions numérotés sur un damier.

Outil Grille (6x6)
PathFinder > Division
Objet >dissocier 

Symbole nommé "test"
un seul tracé cercle nommé "c"

damier.png

Zut c'est le désordre! c'est vraiment pas ce que je voulais.

(Grille par colonne) Trouvez la solution...

grille par colonne.png

//  JavaScript Document for Illustrator
//  symbol auto num 011.js
//  Author Landry René
//  31/01/2024 18:29:30
// INIT --------------------
  var symbolRefName = "test"; // Name of the reference symbol
  var deb = 1; // Starting index of the number to be placed in the symbols
  var contName = "c"; // Container Name
//--------------------------
if (app.documents.length) main();
function main() {
  if (selection.length == 0) return;
  var docRef = app.activeDocument;
  var sel = [], activeLayer, sym, symItem, s, c;
        for (var j = 0; j < selection.length; j++) {
          sel.push(selection[j]);
        }
      selection = null;
      activeLayer = sel[0].layer;

        if (sel[0].typename == "SymbolItem") {
          symItem = sel[0];
          symbolRefName = symItem.symbol.name;
        }
        else {
          sym = getSymbl(activeDocument,symbolRefName,true)
          if (sym == undefined) {return;}
          symItem = activeLayer.symbolItems.add(sym);
        }
      symItem.selected = true;
      // expand symbol item.
      app.executeMenuCommand('Expand3');
      redraw();
  var layer, s, c, d;
      layer = activeLayer.layers[0];
        if (layer.layers.length > 0) {
          alert("Does the reference symbol contain an extra layer?");
          return;
        }

      nb = layer.pageItems.length;
          if (nb == 0) { undo(); return;}
          if (nb == 1 && layer.pageItems[0].typename == "GroupItem") {
            s = layer.pageItems[0];
            c = getPageItems(s,contName,true);
            if (c == undefined) {undo(); return;}
            c.zOrder(ZOrderMethod.BRINGTOFRONT);
          }
          else {
            s = layer.groupItems.add();
            nb = layer.pageItems.length; 
              for (var cd = nb-1; cd >= 1 ; cd--) {
                layer.pageItems[cd].move(s, ElementPlacement.PLACEATEND);
              }
            c = getPageItems(s,contName,true);
             if (c == undefined) {undo(); return;}
            c.zOrder(ZOrderMethod.BRINGTOFRONT);
          }

  var dup, sname, pos, left, top, t;

      for (var j = sel.length-1, k = deb; j >= 0; j--) {
        sname = symbolRefName+" "+k;
        dup = s.duplicate();
        dup.name = sname;
        pos = sel[j].position;
        dup.position = pos;
            if (getSymbl(activeDocument,sname,false) == undefined) {
              c = dup.pathItems[contName];
              posc = c.position;
              left = posc[0]+c.width/2;
              top = posc[1]-c.height/2-6;
              t = dup.textFrames.pointText([left,top]);
              t.contents = k;
              t.textRange.size = 18;
              t.paragraphs[i].justification = Justification.CENTER;
              nouvSymbol(activeLayer,dup);
            }
            else  {
              dup.remove();
              sym = getSymbl(docRef,sname,false);
              dup = activeLayer.symbolItems.add(sym);
              dup.position = pos;
            }
        k++;
            if (sel[j].typename != "SymbolItem") sel[j].remove();
            else if (j > 0)  sel[j].remove();
      } // end for j
      layer.remove();
}
// -------
function nouvSymbol(placeDoc,atObjet)
{ // creates a new symbol, and replaces the original with that symbol
  if (getSymbl(activeDocument,atObjet.name,false) == undefined) {
    var nSymbol = activeDocument.symbols.add(atObjet);
        nSymbol.name = atObjet.name;
    var objetRef = placeDoc.symbolItems.add(nSymbol);
        objetRef.position = atObjet.position;
        atObjet.remove();
  }
}
//--------
function getSymbl(relativObjet,name,info) {
     try {
      var symb = relativObjet.symbols.getByName(name);
     }   catch (e) {
        if (info) alert( "The name "+name+" of the symbol does not exist" );
        return undefined;
        }
     return symb;
}
//--------
function getPageItems(relativObjet,name,info) {
     try {
      var symb = relativObjet.pageItems.getByName(name);
     }   catch (e) {
        if (info) alert( "The name "+name+" of the objet does not exist" );
        return undefined;
        }
     return symb;
}
//--------

 

 

 

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