renél80416020
Advocate
renél80416020
Advocate
Activity
Feb 08, 2024
02:55 AM
1 Upvote
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;
}
//--------
... View more
Feb 07, 2024
06:14 AM
1 Upvote
Bonjour, Exemple (à partir d'une image copie d'écran vectorisée rapidement ce qui explique la mauvaise qualitédu tracé) Placer l’ensemble dans un calque Cibler le calque Aspect > ajouter un nouveau contour (au dessus) Effet > tracé > Vectoriser le contour Dans le panneau aspect fair glisser le contour sous le contenu Les nouveaux objets créés auront le même contour René On peut également cibler un groupe.
... View more
Feb 07, 2024
03:25 AM
Bonjour, pouquoi voulez vous créer cette courbe par script, alors qu'on peut ouvrir le SVG et utiliser Pathfinder soustraction?
... View more
Feb 07, 2024
03:16 AM
Bonjour Mark Juste une remarque, sur la courbe les points sont doubles... René
... View more
Nov 25, 2023
09:09 AM
2 Upvotes
Bonjour à tous, En 2013, j'ai publié un script "arrondi_angle1.js" sur Scriptopedia.org A l'époque le script GenerateHandles.js de Hiroyuki ne me convenait pas entièrement, c'est pourquoi j'ai étudié le problème et faire à mon idée. Dont voici le lien. https://www.scriptopedia.org/js-illustrator/162-arrondir-les-angles.html Je suis juste intervenu pour vérifier si je pouvais encore me connecter, j'ai corriger une faute de grammaire dans le texte, ce qui explique la mise à jour 2023 qui n'en est pas vraiment une. le script est de l'époque de la CS2, j'ai fait quelques progrès depuis. Il fonctionne de deux manières: A un ratio variant de 0 à 1. B En fixant la longueur des lignes directrices en points (toutes le lignes auront la même longueur). Vous pouvez passer d'un mode à l'autre en modifiant dans la zone init du script la variable fixe = true ou false René PS Je peux éventuellement améliorer l'interface avec une boîte de dialogue. Me le demander par mail. Exemples: Tracé d’origine en position centrale (échelle réduite) composé de 24 points Option fixe permet de faire en sorte que la longueur des lignes directrices de gauche de droite soient de même longueur (donnée en pt) On peut également demander à ne pas traiter les extrémités des tracés ouverts.
... View more
Nov 20, 2023
12:32 AM
1 Upvote
Bonjour Marc, Félicitation pour ce script qui est vraiment bien conçu et d'une efficacité sans faille. Vu le temps passé pour la réalisation, c'est un très beau cadeau! Coïncidence, je viens de travailler sur le même sujet (même méthode) mais mon script est limité aux arcs isolés. René
... View more
Aug 23, 2023
12:47 PM
Merci pour la réponse timide mais positive... René
... View more
Aug 23, 2023
12:38 AM
J'ai testé le dernier script sur Illustrator CS6, il fonctionne. Quel est le problème pour vous, il se passe quoi ? (la boîte de dialogue s'affiche en haut à gauche [100,300] ?) René.
... View more
Aug 22, 2023
02:17 PM
Bonjour Marcos, Une solution qui semble fonctionner comme tu l'entends. René. // JavaScript Document
// dialog 21 reduced.js
// Sat, 12 August 2023 20:09:03 GMT
// Of lANDRY René - elleere.
// At the suggestion of Marcos Adriano
// INIT -----------------------
var title = "Multiplicar e distribuir";
var monUnit = "cm"; // cm mm in pt ou px
var q = 30; // cantidad // regPref1
var g = 0; // canal/gouttière // regPref2 (Assinar - Autorizado)
// Posición izquierda y superior del primer elemento (x,y)
var posUnit = "mm"; // cm mm in pt ou px
var X0 = 30; // posUnit
var Y0 = -15; // posUnit
// Margem direita
var XD = 20; // posUnit
// Largura da implantação horizontal
var wAb = true; // se true a largura da prancheta ativa
var wCt = 1290; // se wAb == false // posUnit
// Dimensões do objeto selecionado
var geom = false; // visible-bounds flase senão geometric-bounds true
//----------------------------
var unit = new UnitValue(1 + monUnit).as('pt');
var unitPos = new UnitValue(1 + posUnit).as('pt');
var regPref1 = /^[\d]{1,5}$/; // del 1 a 5 Figuras
var regPref2 = /^[0-9.-]{1,15}$/; // del 1 a 15 Figuras
var sel; // Objeto selecionado
// -------
function main() {
if (selection.length > 0) {
var sel = selection[0]; // Objeto selecionado
app.selection = null; // alert(sel)
createDialog(sel);
}
else {
alert("Selecione pelo menos um objeto!.");
}
}
// -------
if (app.documents.length > 0) {main();}
else {alert("Um documento deve ser aberto e um objeto selecionado!");}
// -------
function createDialog(sel) {
var res = "dialog { \
txt: '', \
orientation: 'column', alignChildren: 'left', \
properties:{ closeButton: false }\
addr1: Group { orientation: 'row', \
s: StaticText { text:'cantidad:' ,characters: 15 }, \
e: EditText { preferredSize: [80, 20]}, \
} \
addr2: Group { orientation: 'row', \
s: StaticText { text:'' ,characters: 15 }, \
e: EditText { preferredSize: [80, 20] }, \
} \
v: Group { orientation: 'row', \
s: StaticText { text:'Visualiz', characters:15 }, \
vckbox: Checkbox { text: ' - Click Test -' } \
} \
btnPnl: Group { orientation: 'row', \
okBtn: Button { text:'OK', properties:{ name:'ok' } }, \
cancelBtn: Button { text:'ESC', properties:{name:'cancel' } } \
} \
} \
";
var w = new Window (res);
w.location = [100,300];
w.text = title;
var e = w.addr1.e; e.text = q;
e.active = true;
var b = w.addr2.e; b.text = g;
w.addr2.s.text = "Calha em " + monUnit+ ":";
var vb = w.v.vckbox;
var mode = false;
var er = false; //
e.onChange = function () {
if ( e.text*1 != q) {
er = init(); mode = true;
}
if (vb.value && !er) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
redraw();
e.active = true;
}
} //
b.onChange = function () {
if ( b.text*1 != g) {
er = init(); mode = true;
}
if (vb.value && !er) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
redraw();
e.active = true;
}
} //
vb.onClick = function() {
if ( vb.value ) {
er = init();
if ( !er ) {traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);}
redraw();
e.active = true;
}
else {
refrech(sel);
er = init();
e.active = true;
}
} //
w.btnPnl.okBtn.onClick = function () {
mode = false;
if ( e.text*1 != q || b.text*1 != g ) {
er = init(); mode = true;
}
if (!er) {
if ( !vb.value ) {traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);}
else if ( mode ) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
}
}
w.close();
} //
w.btnPnl.cancelBtn.onClick = function() {
if ( vb.value == true ) {
refrech(sel);
sel.selected = true;
}
w.close();
} //
function init() {
var er = false;
if (saisie(e.text,regPref1) && e.text != '0' ) {q = e.text*1;}
else {beep(); er = true;}
if (saisie(b.text,regPref2) ) {g = b.text*1;}
else {beep(); er = true;}
return er;
} //
function refrech(sel) {
app.executeMenuCommand("undo");
redraw(); sel.selected = false;
}
w.show();
}
// -------
function prop(Bounds) {return [Bounds[2]-Bounds[0],Bounds[1]-Bounds[3]];}
// -------
function saisie(chaine,reg) {
if (reg.test(chaine)) return true; return false;
}
// -------
function traitement(obj,X0,Y0,XD,q,g,unit,unitPos,geo,wAb,fixe) {
// Define a posição do objtet[0] selecionado em relação à prancheta
g *= unit;
var doc = app.activeDocument,
vBs = !geo ? obj.visibleBounds : obj.geometricBounds,
propi = prop(vBs),
W = propi[0],
H = propi[1],
difw = (W - obj.width)/2, //pt
dec = W + g,
idx = doc.artboards.getActiveArtboardIndex(),
ab = doc.artboards[idx],
rect = ab.artboardRect,
posX = rect[0] + X0 * unitPos + difw,
posY = rect[1] + Y0 * unitPos - difw,
posXAtual = posX,
posYAtual = posY,
wCont = wAb ? rect[2] : rect[0] + fixe;
grd = doc.groupItems.add();
for (var i = 0; i < q; i++) {
if ( (posXAtual + W - difw) > (wCont - XD*unitPos)) {
posXAtual = posX;
posYAtual -= H + g;
}
var novaCopia = obj.duplicate(grd);
novaCopia.position = [posXAtual,posYAtual];
posXAtual += dec;
}
}
// -------
... View more
Aug 12, 2023
12:16 AM
Bonjour, Décocher vous permet de modifier les valeurs quantité et espacement. OK pour valider. René PS On peut toujours faire mieux, je n'ai pas le temps pour cela... La question: l’aperçu pourrait-il être mis à jour simplement en tapant « TAB » dans la quantité et l’espacement. Réponse: certainement.
... View more
Aug 11, 2023
02:37 PM
Une approche rapide, non affinée... // JavaScript Document
//Criar caixa de diálogo
var Undo = false;
if (app.selection.length === 1 && app.selection[0].typename === "GroupItem") {
var grupoSelecionado = app.selection[0];
createDialog();
}
else {
alert("Selecione um único grupo na Camada 1.");
}
// -------
function createColumnGroup(parent, name) {
var group = parent.add("group", undefined, { name: name });
group.orientation = "column";
group.alignChildren = ["left", "top"];
group.spacing = 10;
group.margins = 0;
return group;
}
// -------
function createEditText(parent, config) {
var editText = parent.add('edittext {properties: {name: "edittext"}}');
editText.preferredSize.width = config.preferredWidth;
editText.alignment = config.alignment;
return editText;
}
// -------
function createDialog() {
var dialog = new Window("dialog", "Multiplicar e distribuir");
var mainGroup = createColumnGroup(dialog, "mainGroup");
var quantidadeGroup = createColumnGroup(mainGroup, "quantidadeGroup");
var espacamentoGroup = createColumnGroup(mainGroup, "espacamentoGroup");
var sharedConfig = {
preferredWidth: 100,
alignment: ["left", "center"],
};
var quantidadeLabel = quantidadeGroup.add("statictext", undefined, undefined, { name: "quantidadeLabel" });
quantidadeLabel.text = "Quantidade:";
var quantidadeEditText = createEditText(quantidadeGroup, sharedConfig);
quantidadeEditText.text = 3;
var espacamentoLabel = espacamentoGroup.add("statictext", undefined, undefined, { name: "espacamentoLabel" });
espacamentoLabel.text = "Espaçamento:";
var espacamentoEditText = createEditText(espacamentoGroup, sharedConfig);
espacamentoEditText.text = 1;
var visualizarCheckbox = mainGroup.add("checkbox", undefined, undefined, { name: "visualizarCheckbox" });
visualizarCheckbox.text = "Visualizar";
visualizarCheckbox.preferredSize.width = 80;
visualizarCheckbox.preferredSize.height = 20;
var buttonGroup = dialog.add("group", undefined, { name: "buttonGroup" });
buttonGroup.orientation = "row";
buttonGroup.alignChildren = ["center", "center"];
buttonGroup.spacing = 10;
buttonGroup.margins = 0;
buttonGroup.alignment = ["center", "top"];
var okButton = buttonGroup.add("button", undefined, undefined, { name: "okButton" });
okButton.text = "OK";
var cancelButton = buttonGroup.add("button", undefined, undefined, { name: "cancelButton" });
cancelButton.text = "Cancel";
okButton.onClick = function () {
if (Undo == false) {
var q = quantidadeEditText.text;
var k = espacamentoEditText.text; alert(q+" "+k)
traitement(q,k);
}
dialog.close();
};
visualizarCheckbox.onClick = function() {
if (visualizarCheckbox.value == true) {
var q = quantidadeEditText.text;
var k = espacamentoEditText.text; //alert(q+" "+k)
traitement(q,k);
app.redraw();
Undo = true;
}
if (visualizarCheckbox.value == false) {
app.executeMenuCommand("undo");
app.redraw();
Undo = false;
}
}
cancelButton.onClick = function () {
if (Undo) {
app.executeMenuCommand("undo");
app.redraw();
}
dialog.close();
};
dialog.show();
}
// -------
function traitement(q,k) {
// Código principal
// Verifica se o grupo está selecionado
var distanciaHorizontal = parseFloat(k.replace(".", "").replace(",", ".")) * 28.3465;
// Armazena a altura do grupo selecionado
var alturaGrupoInicial = grupoSelecionado.height;
var quantidadeCopias = parseInt(q);
if (isNaN(quantidadeCopias) || quantidadeCopias < 1) {
alert("Quantidade inválida. O valor deve ser um número inteiro maior que zero.");
return;
}
else {
// Define a posição do grupo selecionado em relação à prancheta
var prancheta = app.activeDocument.artboards[0];
var posX = prancheta.artboardRect[0] + 4.5 * 28.3465;
var posY = prancheta.artboardRect[1] - 0.5 * 28.3465;
grupoSelecionado.position = [posX, posY];
var posXAtual = posX + grupoSelecionado.width + distanciaHorizontal;
var posYAtual = posY;
for (var i = 1; i < quantidadeCopias; i++) {
var novaCopia = grupoSelecionado.duplicate();
novaCopia.position = [posXAtual, posYAtual];
posXAtual += grupoSelecionado.width + distanciaHorizontal;
if (posXAtual + grupoSelecionado.width > 129 * 28.3465) {
posXAtual = posX;
posYAtual -= alturaGrupoInicial + distanciaHorizontal;
}
}
}
} de elleere
... View more
Aug 03, 2023
07:37 AM
2 Upvotes
Bonjour, Je ne sais pas comment aller plus vite (maintenir le bouton?) Mais le résultat de la largeur ne me semble pas correct, vous cumulez les erreurs d'imprécision. rec.width = rec.width + (1*mm) 115.999 donne 117.122 Je propose: // JavaScript Document
#targetengine main;
var dep = 100;
// var mm = 2.834645;
var mm = new UnitValue(1 + " " + "mm").as('pt');
var doc = app.activeDocument;
var rec = doc.pathItems.rectangle(0,0,dep*mm,dep*mm);
//rec.selected = true;
// PAlETTE
var palette = new Window("palette");
palette.text = "rectangle";
palette.alignChildren = ["center","top"];
palette.spacing = 10;
palette.margins = 16;
// GROUP1
var group1 = palette.add("group", undefined, {name: "group1"});
group1.orientation = "row";
group1.alignChildren = ["left","center"];
group1.spacing = 10;
group1.margins = 0;
var statictext1 = group1.add("statictext", undefined, undefined, {name: "statictext1"});
statictext1.text = "W:";
var statictext2 = group1.add("statictext", undefined, undefined, {name: "statictext2"});
statictext2.text = dep;
var button1 = group1.add("button", undefined, undefined, {name: "button1"});
button1.text = "-";
button1.preferredSize.width = 50;
var button2 = group1.add("button", undefined, undefined, {name: "button2"});
button2.text = "+";
button2.preferredSize.width = 50;
// onClick
button1.onClick = function() {
dep--;
statictext2.text = dep;
fun();
};
button2.onClick = function() {
dep++;
statictext2.text = dep;
fun();
};
palette.show();
// FUNCTION
function fun() {
var bt = new BridgeTalk();
bt.target = "illustrator";
var message = "rec.width = dep*mm;";
bt.body = message;
bt.send();
}; René
... View more
Jun 27, 2023
02:39 AM
Votre message manque de précision, (texte de point ou texte captif ?) de elleere
... View more
May 17, 2023
01:10 AM
Essayez cela... // JavaScript Document for Illustrator
var docRef = app.activeDocument,
objetSelect = selection[0],
rects = objetSelect.geometricBounds,
propRects = prop(rects),
larg = propRects[0],
haut = propRects[1],
objetRect = docRef.pathItems.rectangle(rects[1],rects[0],larg,haut);
objetSelect.remove();
// -------
function prop(Bounds) {return [Bounds[2]-Bounds[0],Bounds[1]-Bounds[3]];}
// -------
... View more
Apr 23, 2023
06:26 AM
Bonjour à tous! J'ai réalisé un script qui répond aux trois scénarios cités plus haut. Si intéressé, me contacter par mail... René PS Possibilité d'adapter ce script à votre convenance. exemples scénario 2
... View more
Mar 31, 2023
05:57 AM
1 Upvote
Bonjour Lengxiaomo, J'ai modifié le script (voir pus haut premier post) René
... View more
Mar 29, 2023
02:27 AM
1 Upvote
Bonjour, Merci femkeblanco, j'ai corrigé le script plus haut. l'alerte signifie: Il n’y a pas de blocs de texte dans le document qui contiennent le texte spécifié 200 j'ai ajouté au début du script var searchText = "344,556,996,6544"; René
... View more
Mar 28, 2023
03:10 AM
3 Upvotes
Bonjour, // JavaScript Document
// Searches for the first occurrence of the following texts by browsing the groups.
// Define an array of text to search for
var searchText = "344,556,996,6544";
if (app.documents.length) {main();}
else alert("No document is currently open!");
// -------
function main() {
var doc = app.activeDocument;
// Get all groups in the current document
if (doc.groupItems == 0) {
alert("There are no groups in the current document!");
return;
}
var allGroups = [];
for (var i = 0; i < doc.groupItems.length; i++) {
allGroups.push(doc.groupItems[i]);
}
var rep, searchTexts , count, currentGroup, textFrames;
rep = prompt("Search list\r(use comma separator like)",searchText, " De elleere");
if (rep == null || rep == "") return;
searchTexts = rep.split(",");
for (var k = 0; k < searchTexts.length; k++) {
count = 0;
for (var i = allGroups.length-1; i >= 0; i--) {
currentGroup = allGroups[i];
textFrames = currentGroup.textFrames;
for (var j = 0; j < textFrames.length; j++) {
if (textFrames[j].contents == searchTexts[k]) {
currentGroup.selected = true;
//textFrames[j].selected = true
count++;
allGroups.splice(i,1)
break;
}
}
}
if (!count) alert("There are no text frames in the document that contain the specified text!\r"+searchTexts[k]);
}
}
// ------- de elleere
... View more
Feb 13, 2023
10:03 AM
Bonjour Beff, Comme le précise M1b, la position du texte par rapport au tracé n'est pas toujours facile à prévoir. Ce qu'il faut savoir: Par défaut, le point de départ du texte est situé sur le point p0 (début du tracé) et aligné à gauche. Le texte est situé au dessus du tracé si le sens est positif (polarité), tu peux facilement inverser le sens du tracé en pointant l’outil plume sur le point p0 avant l’exécution du script. Ou après en faisant basculer le crochet central de l’autre coté du tracé, le sens du tracé se trouve ainsi inversé (basculement symétrique). René
... View more
Feb 12, 2023
02:25 PM
Oui tu peux, mais donne des exemples (CS6) ainsi que les détails. Cordialement René Toujours la même adresse mail.
... View more
Feb 12, 2023
02:16 PM
Bonjour, Essayez avec cela... // JavaScript Document
var center = true;
var doc = app.activeDocument;
var widthReduction = 6.34; // mm
widthReduction = widthReduction / 25.4 * 72; // convert mm to points
if (selection.length)
for (var i = 0; i < selection.length; i++) {
reduc(selection[i]);
}
else
for (var i = 0; i < doc.pageItems.length; i++) {
var item = doc.pageItems[i];
if (!item.layer.locked) {reduc(item)}
}
function reduc(obj) {
if (obj.width > widthReduction) {
obj.width -= widthReduction;
if (center) {obj.left += widthReduction/2;}
}
} René
... View more
Feb 12, 2023
04:04 AM
Bonjour, Au plus simple, pour peut-être pour contenter Beff ? Sélectionnez le texte et le tracé. // JavaScript Document
if (app.documents.length > 0) {
var docRef = activeDocument;
var selectedItems, nbItems, saisieText, pathTextRef;
selectedItems = selection;
nbItems = selectedItems.length;
if (nbItems > 1) {
for (var i = 0; i < nbItems; i++) {
if (selectedItems[i].typename == "TextFrame") {
saisieText = selectedItems[i].contents;
selectedItems.splice(i,1);
break;
}
}
if (selectedItems[0].typename == "PathItem" && saisieText != undefined) {
pathTextRef = docRef.textFrames.pathText(selectedItems[0]);
pathTextRef.contents = saisieText;
}
}
} René
... View more
Feb 07, 2023
01:49 PM
1 Upvote
Essayez cela... // JavaScript Document for Illustrator
var remove = true;
var doc = activeDocument;
var genError= "DivideTextFrame must be run on a point-text text-frame. ";
if(doc){
var docsel = doc.selection;
var k = 0;
if(docsel.length){ //alert(sel.length+" items found.");
for(var itemCt=0, len = docsel.length ;itemCt<len;itemCt++){
if(docsel[itemCt].typename == "TextFrame"){
if(docsel[itemCt].lines.length == 1){
//alert("This IS already a single line object!");
continue;
}
else{
divide(doc,docsel[itemCt]);
k++;
}
}
}
if(k == 0)alert(genError +"Please select a Text-Frame object. (Try ungrouping.)");
}
else{
alert(genError + "No document found.");
}
}
//------------
function divide(relativeObjet,item){
//getObject justification and leading
var justification = item.textRange.justification;
var vSpacing0 = item.textRange.leading;
var vSpacing = vSpacing0;
var tfTop = item.top;
var tfLeft = item.left;
var newTF;
for(var j = 0; j < item.lines.length; j++){
if (!item.lines[j].characters.length) {
tfTop -= vSpacing0;
continue;
}
newTF = relativeObjet.textFrames.add();
item.lines[j].characters[0].duplicate(newTF.insertionPoints[0]);
vSpacing = newTF.textRange.leading;
newTF.contents = item.lines[j].contents;
newTF.top = tfTop;
tfTop -= vSpacing;
switch (justification) {
case (Justification.CENTER): newTF.left = tfLeft+(item.width-newTF.width)/2; break;
case (Justification.RIGHT): newTF.left = tfLeft+item.width-newTF.width; break;
default : newTF.left = item.left;
}
newTF.textRange.justification = justification;
}
if (remove) {item.remove();}
}
... View more
Feb 07, 2023
09:56 AM
1 Upvote
Pour le sript: Limites Ne conviendrait pas pour les tracés transparents. Uniquement pour des tracés sans croisement et avec la reccherche de la largeur possible. Mode opératoire pour chaque tracé sélectionné 1 Mesurer la largeur du profil. 2 Dupliquer le tracé, couper ce nouveau tracé et conserver une seule bordure. 3 Créer un nouveau tracé ouvert décalé d’une demie largeur du bon coté. 4 Supprimer la bordure conservée en 3. 5 Suivant une option à définir, supprimer le tracé initial ou non (non représenté). René
... View more
Feb 07, 2023
09:49 AM
1 Upvote
Oui met1, je demanderai une certaine contribition. J'ai commencé à utiliser Illustrator avec la version 4 sur Windows 3.1 C'est bien un tracé (de type "PathItem"). René
... View more
Feb 07, 2023
09:24 AM
Bonjour Met1, Il s'agit d'un tracé (name right) avec le même style que dans le premier exemple.
... View more
Feb 06, 2023
03:18 PM
Bonjour à tous, La dernière version d'Illustrator dont je dispose étant la version CS6, je n'ai pas pu ouvrir le fichier de Kurt Gold... Je ne suis pas certain d'être bien dans le sujet, mais, ces derniers jours, j'ai essayé de faire un script qui traite des tracés autres que les tracés transparents. ( tracés sans croisement) voir l'exemple qui suit. Format A4 vertical CTRL+A puis exécution du script, résultat à droite 0.72secondes. (version CS6) Les tracés d'origine d'épaisseurs différentes sont obtenus avec "Décomposer" fond et contour, le script fait l'opération inverse mais en appliquant un style, le même pour toute la sélection (ici pointillé en bleu) , avec possibilité de conserver l'original. Si intéressé, envoyez moi un exemple à traiter (enregistré pour la version CS6 impérativement) René Un autre exemple
... View more
Jan 26, 2023
10:03 AM
1 Upvote
Bonjour! var w = h = 10;
var cmykColor = new CMYKColor();
cmykColor.cyan = 0;
cmykColor.magenta = 100;
cmykColor.yellow = 0;
cmykColor.black = 0;
var doc = app.activeDocument;
var newLayer = doc.layers.add();
newLayer.name = "DECOUPE";
var rect = doc.pathItems["CONTOUR"];
var ps = rect.pathPoints;
for (var i = 0; i < ps.length; i++) {
var newCircle = newLayer.pathItems.ellipse(ps[i].anchor[1] + h/2, ps[i].anchor[0] - w/2, w, h);
newCircle.filled = false;
newCircle.strokeWidth = 0.1;
newCircle.strokeColor = cmykColor;
newCircle.name = "Cut Contour";
}
... View more
Nov 22, 2022
12:40 AM
Peut être avec ça? str = "toto.JPG"
re = new RegExp("\.("+filtro+")$","i");
$.write(re.test(str))
$.write("\r")
str = "toto.AI"
re = new RegExp("\.("+filtro+")$","i");
$.write(re.test(str))
$.write("\r") René
... View more
Nov 17, 2022
01:20 PM
1 Upvote
Pour faire simple, comme l'a suggéré WIDSnonamer, j'ai juste ajouté "-w" à la fin des noms des symboles associés aux éléments à modifier selon la largeur. Moi je préfèrerais utiliser un fichier texte à importer à l'exécution du script. Car pour ma part on m'a fourni 250 symboles qui sont utilisés par plusieurs personnes, il valait mieux ne pas y toucher. Hauteur demandée 10mm. J'ai ajouté une bordure (visibleBounds) Script // JavaScript Document for Illustrator
// Auteur Landry René
// Thu, 17 November 2022 21:17:05 GMT
var H = 10;
var mm = UnitValue (1,"mm").as('pt');
var rep = prompt("Hauteur pour un carré en mm = ",H);
if (rep != "" && rep != null && /^[\d.]{1,8}$/.test(rep)) {
H = rep*mm;
var item, mode, h, w, scale;
for (var i = 0; i < selection.length; i++) {
if (selection[i].typename == "SymbolItem") {
item = selection[i];
symbName = item.symbol.name; alert(item.symbol.name)
mode = /-w/.test(symbName) ? 1 : 0;
h = item.height;
w = item.width;
scale = !mode ? H/h : H/w;
item.resize(scale*100,scale*100);
}
}
} René
... View more