renél80416020
Advocate
renél80416020
Advocate
Activity
Feb 25, 2025
03:36 AM
Bonjour à tous, Cette histoire de spirale m'a fait repenser à un script qui date du temps de win98, Illustrator CS. polaire.js Qui trace des courbes en coordonnées polaires dans le calque actif. Centrées par rapport à l'origine des règles globales (à vous de placer l'origine au centre du plan de travail). l'équation de la spirale d'Archimède (r = a*t) Dans le script, j'ai validé la ligne 16 qui contient tous les paramètres pour cette courbe, vous pourrez tester les deux autres exemples. Une fois la courbe tracée, vous pouvez appliquer la commande Objet > Tracé > simplifier 90% Amusez vous René /*----------------------------------------
polaire.js
Auteur Landry René
Tue, 24 February 1998 10:44:49 GMT
Trace des courbes en coordonnees polaires dans le calque actif.
A l'origine des règles globales.
*/
// initialisation-------------------------------------------------
var equa = "Math.cos(t*3)/b"; // Equation variable t
var b = 0.8;
var min = 0;
var max = Math.PI;
var pas = Math.PI/90;
var ech = 80; // facteur d'échelle
//var equa = "t*t"; var min = 0; var max = 4*Math.PI ; var ech = .8; var pas =Math.PI /90;
var A = 1;var equa = "A*t"; var min = 0; var max = 50*Math.PI ; var ech = 3; var pas =Math.PI /90;
var fermeContour = false; //contour ferme oui non
var epaisseurContour = 2;
var couleurContour = macmykColor(0,75,100,0);; // Citrouille
var fondCouleur = true; //couleur du fond oui non
var couleurFond = macmykColor(25,10,0,0);
var couleurRep = macmykColor(88,77,0,0);
var axeOption = true; //axes x oui non
//-----------------------------------------------------------------
function axe (axe,p1,p2)
{ //crée un axe
axe.strokeWidth = 0.75 //épaisseur du contour;
axe.strokeColor = couleurRep;
axe.filled = false;
axe.setEntirePath([p1,p2]);
return axe;
}
//----------------
function cal(t,equa) {
return eval(equa);
}
//----------------
function fleche (fl,l,t,orientation,couleur)
{ //crée 1 flèche > ou ^
var ret, dl, dh;
ret = 3.5; dl = 12; dh = 15;
with(fl) {
fillColor = couleur;
stroked = false;
closed = true;
if (orientation == 0) {
setEntirePath([[0,0],[-ret,dl/2],[dh,0],[-ret,-dl/2]]);
l -= ret; t += dl/2;
}
else {
setEntirePath([[0,0],[-ret,dl/2],[dh,0],[-ret,-dl/2]]);
l -= dl/2; t += dh;
}
rotate(orientation);
position = [l,t];
}
return fl;
}
//----------------
function macmykColor(c,m,y,k)
{ //cree une nouvelle couleur CMJN
var cmykColor = new CMYKColor();
cmykColor.cyan = c;
cmykColor.magenta = m;
cmykColor.yellow = y;
cmykColor.black = k;
return cmykColor;
}
//----------------
function pointSuivant(x,y,ligne)
{//Ajoute un point à une ligne
var newPoint = ligne.pathPoints.add();
newPoint.anchor = [x, y];
newPoint.leftDirection = newPoint.anchor;
newPoint.rightDirection = newPoint.anchor;
newPoint.pointType = PointType.CORNER;
}
//----------------
function main() {
if (!documents.length) {
alert("Pour l'exécution de ce sript un document doit être ouvert !");
return
}
var doc = activeDocument;
var layer = doc.activeLayer;
if (layer.locked) {
alert("Calque verrouillé","Alerte De elleere");
return;
}
if (layer.visible == false) layer.visible = true;
var ligne = layer.pathItems.add();
with(ligne) {
name = "r = f(t)"+equa;
stroked = true; // contour
strokeWidth = epaisseurContour; //épaisseur du contour;
strokeColor = couleurContour;
if (fondCouleur) {
fillColor = couleurFond;
}
else {
filled = false;
}
//ferme le contour option
if (fermeContour) closed = true;
}
//----------------------------------------
var nbSeg = Math.ceil((max-min)/pas);
var t = min, x, y;
for (var point = 1; point <= nbSeg+1; point ++) {
x = cal(t,equa)*Math.cos(t);
y = cal(t,equa)*Math.sin(t);
pointSuivant(x*ech, y*ech,ligne);
//if (point == nbSeg) t = max else t += pas;
t = point == nbSeg ? t = max : t += pas;
}
//trace les axes + fleches option
if (axeOption) {
repereGroup = layer.groupItems.add();
repereGroup.name = "repere";
var axeX = repereGroup.pathItems.add();
var axeY = repereGroup.pathItems.add();
var flh = repereGroup.pathItems.add();
axeX = axe(axeX,[-200,0],[200,0]);
flh = fleche(flh,200,0,0,couleurRep);
}
}
//-----------------------------------------
main();
... View more
Feb 24, 2025
12:46 PM
Bonjour @elise_0720 , Pour que le texte soit au dessus du tracé et dans le bon sens, c'est simple, il suffit de changer le sens du tracé avant de placer le texte. Pour inverser le sens du tracé, il faut utiliser l'outil plume (P) et pointer le point de départ de la spirale. Remarque: le script Archimedean Spiral.jsx est limité à 1000points. René Ici maxi rounding times 40 PS Merci @Ton Frederiks pour le lien.
... View more
Feb 14, 2025
02:21 AM
1 Upvote
Bonjour Marc, je me suis permis (hier soir) de modifier votre fonction unrotate(). pour gérer les groupes, tracés transparents et les masques. Cela semble fonctionner? function unrotate(item) {
var grp = false, trs = false;
var accumRotation = undefined,
rotationTag;
if (item.hasOwnProperty('tags')) {
if (item.typename == "GroupItem" || item.typename == "CompoundPathItem") {
if (item.typename == "CompoundPathItem") {
rotationTag = getThing(item.pathItems[0].tags, 'name', 'BBAccumRotation');
trs = true;
}
else {
rotationTag = getThing(item.pageItems[0].tags, 'name', 'BBAccumRotation');
grp = true;
}
}
else rotationTag = getThing(item.tags, 'name', 'BBAccumRotation');
if (rotationTag)
accumRotation = rotationTag.value * 180 / Math.PI;
}
if (
undefined == accumRotation
&& item.hasOwnProperty('matrix')
)
// derive rotation from the matrix
accumRotation = getRotationFromMatrix(item.matrix);
if (undefined == accumRotation)
return;
// rotate the item
item.rotate(- accumRotation);
if (rotationTag)
// update tag
var pi;
if (grp)
for (var i = 0; i < item.pageItems.length; i++ ){
pi = item.pageItems[i];
rotationTag = getThing(pi.tags, 'name', 'BBAccumRotation');
if (rotationTag != undefined) {rotationTag.value = 0;}
}
}
if (trs) {
pi = item.pathItems[0];
rotationTag = getThing(pi.tags, 'name', 'BBAccumRotation');
if (rotationTag != undefined) {rotationTag.value = 0;}
rotationTag = getThing(item.tags, 'name', 'BBAccumRotation');
if (rotationTag != undefined) {rotationTag.value = 0;}
}
if (!trs && !grp) rotationTag.value = 0;
}; René
... View more
Feb 12, 2025
10:31 AM
Bonjour Alex, il faut utiliser: var doc = activeDocument;
doc.textFrames[0].selected = true;
app.executeMenuCommand ('expandStyle'); René
... View more
Jan 03, 2025
02:15 PM
Merci Kurt pour votre poste, Par script on peut obtenir le résultat suivant, les croix sont des groupes composés de 2 traits, elles sont elles mêmes groupées. Mais on peut les remplacer par un symbole.
... View more
Jan 03, 2025
03:43 AM
Bonjour, Pour moi cela manque encore de pécision dans les explications, Comme cet exemple ?
... View more
Jan 03, 2025
01:46 AM
Bonjour, Je ne vois pas où est le problème ? René
... View more
Dec 18, 2024
04:01 AM
Bonjour @Kurt Gold , c'est un mélange des deux. J'essais de poster le contenue d'un fichier svg (html) <?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" style="enable-background:new 0 0 595.28 841.89;"
xml:space="preserve">
<polyline style="fill:none;stroke:#E62337;stroke-width:2;stroke-miterlimit:10;" points="176.11,643.14 84.29,643.14 72.65,630.92
205.26,630.92 230.89,618.7 67.23,618.7 65.62,606.48 253.82,606.48 274.71,594.26 67.16,594.26 71.6,582.04 293.12,582.04
309.65,569.82 78.95,569.82 89.58,557.61 324.7,557.61 338.68,545.39 104.88,545.39 131.65,533.17 351.55,533.17 362.81,520.95
161.04,520.95 186.01,508.73 372.69,508.73 381.93,496.51 204.91,496.51 221.63,484.29 390.36,484.29 397.68,472.07 234.94,472.07
246.03,459.85 403.87,459.85 409.15,447.63 254.21,447.63 260.4,435.41 413.65,435.41 417.27,423.19 263.93,423.19 265.73,410.97
420.12,410.97 422.19,398.75 265.24,398.75 263.71,386.53 423.45,386.53 423.95,374.31 259.95,374.31 255.28,362.09 423.48,362.09
421.82,349.88 249.95,349.88 243.92,337.66 419.12,337.66 415.98,325.44 237.29,325.44 230.14,313.22 412.4,313.22 408.18,301
222.48,301 214.42,288.78 403.13,288.78 397.47,276.56 205.78,276.56 196.92,264.34 391.18,264.34 384.32,252.12 187.98,252.12
178.95,239.9 376.96,239.9 369.15,227.68 169.92,227.68 160.96,215.46 361.02,215.46 352.63,203.24 152.16,203.24 143.58,191.02
344,191.02 335.18,178.8 135.26,178.8 127.24,166.58 326.25,166.58 317.25,154.37 119.62,154.37 112.42,142.15 308.25,142.15
299.32,129.93 108.46,129.93 108.7,117.71 290.51,117.71 282.05,105.49 111.76,105.49 117.44,93.27 274.15,93.27 266.68,81.05
126.26,81.05 138.97,68.83 258.93,68.83 248.02,56.61 157.96,56.61 "/>
</svg> Afficher le dans Illustrator ou sur un navigateur, on a du mal à voir qu'il s'agit d'un seul tracé...
... View more
Dec 17, 2024
06:04 AM
Bonjour @Jason Burnett , Je peux peut-être vous aider ? Dans votre script ou avec mes essais de script de "broderie"... Progression vers le haut. René, Me contacter par message...
... View more
Dec 15, 2024
08:50 AM
Bonjour, Dans la fenêtre Iformations sur le ducument > Objet Oui non ??
... View more
Dec 02, 2024
10:27 AM
Voilà, Objet > Tracé >Décalage Objet > Dissocier Sélectionnez le carré noir et la partie décalée du chiffre 4 Objet > Tracé transparent > créer René
... View more
Dec 02, 2024
09:23 AM
Bonjour, Peut être çà ? Damier de transparence... René
... View more
Dec 01, 2024
12:27 PM
Bonjour, Tracez 4 traits dont deux alignés sur les coins du carré. Sélectionnez les 4 lignes. Dans Alignement choisir Distribution horizontale de l’espace avec l'option aligner sur une sélection cochée. René
... View more
Nov 29, 2024
09:13 AM
Bonjour Mark, Il manque une ligne et je crois que la teinte doit changer à chaque rectangle. (function () {
// Configuration variables
var rowWidth = 17; // Number of rectangles per row
var cellSize = 36; // Size of each rectangle
var totalCount = 374; // Total number of rectangles
var cellIndex = 0;
// Create a new document
var newDoc = app.documents.add();
// Initialize variables
var totalRows = Math.ceil(totalCount / rowWidth);
// Loop over rows
for (var r = 0; r < totalRows; r++) {
// Calculate the row's vertical position
var y = r * cellSize;
// Loop over cells in the row
for (var i = 0; i < rowWidth; i++) {
// Calculate the cell's horizontal position
var x = i * cellSize;
// Create a rectangle
var rect = newDoc.pathItems.rectangle(y, x, cellSize, -cellSize);
// Apply fill color
setAppearance(rect, cellIndex);
cellIndex ++;
}
}
})();
... View more
Nov 25, 2024
09:13 AM
Bonjour @Anubhav M Je constate que vous êtes très très souvent désolé...
... View more
Nov 23, 2024
03:38 AM
Vous voulez obtenir ce résultat ? Si oui utilisez Objet > Tracé > Divisez les objets inférieurs Ligne par ligne... René PS en 'Divide Objects Below'
... View more
Nov 23, 2024
01:12 AM
Nov 22, 2024
03:21 PM
Bonjour, // JavaScript Document
var aDoc = app.activeDocument;
var mm = 2.8346456;
// required: tab separated txt
// width tab height
// 100 tab 50
var aFile = File ("~/Desktop/widthheight.csv");
aFile.open("r");
var txtFile = aFile.read();
aFile.close();
var theText = txtFile.split("\n");
var T, rect;
var col = new RGBColor();
for (i = 0; i < theText.length-1; i++) {
T = theText[i].split( "\t");
rect = aDoc.pathItems.rectangle( 0, 0, T[0] * mm, T[1] * mm );
rect.filled = false;
rect.stroked = true;
rect.strokeWidth = 2;
}
... View more
Nov 20, 2024
01:27 PM
Bonjour, Affichage > afficher le damier de transparence <MAJ><CTRL>D Ou placez un objet en arrière plan...
... View more
Nov 20, 2024
01:12 AM
Je voulais parler du conseil suivant: "Ne tracez pas de contours dans le texte." "Do not Outline the text." René
... View more
Nov 19, 2024
09:13 AM
En suivant le conseil de @Monika Gause Aspect > ajoutez un nouveau contour puis le placer sous Caractères
... View more
Nov 19, 2024
08:40 AM
1 Upvote
A première vue sans doute, Texte > vectoriser Objet > décalage ( en pt) Pathfinder > Union (pour la partie externe) ou encore (version modifiable): Texte > vectoriser Aspect > ajoutez un nouveau contour puis le placer sous le contenu. René
... View more
Nov 10, 2024
01:24 PM
Un autre script qui est dans le fichier "Illustrator Scripting Reference - JavaScript.pdf" // Creates two variables, 1 visibility and 1 text,
// creates two datasets each with different values
// for the variables, then displays both datasets
var docRef = documents.add();
// Create visibility variable
var itemRef = docRef.pathItems.rectangle(600, 400, 150, 150);
var colorRef = new RGBColor;
colorRef.red = 255;
itemRef.fillColor = colorRef;
var visibilityVar = docRef.variables.add();
visibilityVar.kind = VariableKind.VISIBILITY;
itemRef.visibilityVariable = visibilityVar;
// Create text variable
var textRef = docRef.textFrames.add();
textRef.contents = "Text Variable, dataset 1";
textRef.top = 400;
textRef.left = 400;
var textVar = docRef.variables.add();
textVar.kind = VariableKind.TEXTUAL
textRef.contentVariable = textVar;
redraw();
// Create dataset 1
var ds1 = docRef.dataSets.add();
// Change variable values and create dataset 2
itemRef.hidden = true;
textRef.contents = "Text Variable, dataset 2";
redraw();
var ds2 = docRef.dataSets.add();
// display each dataset
ds1.display();
redraw();alert("Text Variable, dataset 1")
ds2.display();
redraw(); René
... View more
Nov 10, 2024
01:18 PM
Bonjour @nutradial Je ne connais pas grand chose sur les variables, mais je viens de faire un script qui pourra peut être vous aider... // Propriétés Variable et DataSet
var idoc = app.activeDocument,
Origin = idoc.rulerOrigin,
largDoc =idoc.width,
hautDoc =idoc.height,
origX = -Origin[0],
origY = (hautDoc)-Origin[1],
vars = idoc.variables,
text = "Variables";
var nb, Pg, type;
for (var j = 0; j < vars.length; j++){
text += propObj(vars[j])+"\r";
nb = vars[j].pageItems.length;
if (nb != 0) {
for (var i = 0; i < nb; i++){
Pg = vars[j].pageItems[i];
type = Pg.typename;
text += "PageItem = "+type+"\r";
if (type == "TextFrame") text += "Text.contents = "+Pg.contents+"\r";
}
}
}
var textRef = idoc.textFrames.pointText([origX+5,origY-20]);
var datas = idoc.dataSets;
text += "\rDataSets";
for (var j = 0; j < datas.length; j++){
text += propObj(datas[j])+"\r";
}
textRef.contents +=text+"\r";
// -------
function propObj(obj) {
var l = "";
for (k in obj) {
l += "\r"+k+" = "+eval("obj."+k);
}
return l;
}
// -------
... View more
Nov 09, 2024
11:02 AM
Désolé @andyf65867865 mais votre script n'est pas correct, il comporte plusieurs fautes ou maladresses. (entre autres, la boucle for peut être parcourue de nombreuses fois...) var compound = true;
app.executeMenuCommand("selectall");
app.executeMenuCommand("ungroup");
if (compound) {
app.executeMenuCommand("noCompoundPath");
}
selection = null; René
... View more
Nov 09, 2024
06:02 AM
Bonjour @Majonezowy Quel est le type de cet objet? Vous voulez un script spécifique à cet objet? C'est vous qui les mettez en place dans Illustrator ou cela est déja fait à l'origine? S'il s'agit d'un groupe: 1 la balise n'est pas créée automatiquement après rotation. 2 il faut se baser sur la position de l'un des éléments du groupe par rapport à la position du groupe [top,left] René
... View more
Nov 08, 2024
02:15 AM
Bonjour, Le Tag nommé BBAccumRotation, si rotation il y a donne l'angle de rotation. Si pas de rotation, ce Tag n'existe pas, si il existe sa valeur indique 0°. Pour 180° Tag: (BBAccumRotation , 180.000019847843) Remarque importante: Pour que ce script fonctionne, il ne faut pas que l'objet sélectionné ai subit une rotation par script sauf si le script a mis à jour la valeur de ce Tag (Qui est chose rare). // Find tags of selected art item, show names and values in separate document
// tags.js de elleere
// 05 02 2018
if ( app.documents.length > 0 ) {
doc = app.activeDocument;
if ( doc.selection.length > 0 ) {
sel = selection;
for ( i = 0; i < sel.length; i++ ) {
selectedArt = sel[i];
type = selectedArt.typename;
tagList = selectedArt.tags;
if (tagList.length == 0) {
alert( type+"\rThe selected art has no tags" );
}
else { // Create a document and add a line of text per tag
reportDocument = app.documents.add();
top_offset = 400;
newItem = reportDocument.textFrames.add();
newItem.contents = type+"\r";
newItem.position = [100, top_offset];
for ( k = 0; k < tagList.length; k++ ) {
tagText = tagList[k].value* 180 / Math.PI;
newItem.contents += "Tag: (" + tagList[k].name +
" , " + tagText + ")\r";
}
}
}
}
else { alert( "No art items selected." ); }
} René
... View more
Nov 07, 2024
01:40 PM
Bonjour, Je ferais comme l’indique @Jacob Bugge en (1) et j’utiserais l’outil cutter sur l’arbre pour le couper en deux parties. 0 verrouiller tous les rectangles et placer un repère à la jonction des petits rectangles vert et blanc. 1 Objet > Associer 2 Objet > décomposer... 3 Pathfinder > union 4 Mise en place de l’arbre 5 Utiliser l’outil cutter à la jonction des rectangles vert et blanc. (touches <MAJ> + <ALT> pour contraindre) 6 Changer la couleur de la pointe de l’arbre en blanc. René
... View more