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 context
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
Copy link to clipboard
Copied
Yes precisely, if it would automatically just generate the new number for me that would be super beneficial.
Copy link to clipboard
Copied
can you provide a sample file and clear instructions? thanks
Copy link to clipboard
Copied
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
//--------------------------
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"
Zut c'est le désordre! c'est vraiment pas ce que je voulais.
(Grille par colonne) Trouvez la solution...
// 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;
}
//--------