renél80416020
Advocate
renél80416020
Advocate
Activity
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
Nov 06, 2024
10:49 AM
Careful! Do not use name as a non-varaible ( name == "Adobe Illustrator") name.indexOf("XXT",0) return -1
... View more
Nov 06, 2024
04:15 AM
Bonjour, Peut être avec Pathfinder > Division René
... View more
Nov 03, 2024
01:19 AM
Merci @Monika Gause pour votre intervention, alors que j'étais dans les bras de Morphée... @Kurt Gold Les tracés doivent être du type PathItem. J'avais fait au plus simple...
... View more
Nov 02, 2024
02:28 PM
Bonjour @JoostintheHouse, En faite, il s'agit d'une perspective cavalière légèrement penchée. A partir de deux profils décalés, Il s'agit de créer les facettes latérales. René, un script peut aider à faire cela... Remarque: Les tracés doivent être du type PathItem // Auteur Landry René
// Sat, 2 November 2024 21:26:16 GMT
// Sélectioonnez deux tracés ayant le même nombre de points
// INIT --------------------
var couleur = macmykColor(0,62.18,94.12,0);
var ep =1;
// ------------------------
var doc = activeDocument,
sel = selection; alert(sel);
var nb0, nb1, par, pjxy0, pjxy1, pJxy0, pJxy1, ch;
if (sel.length == 2) {
nb0 = sel[0].pathPoints.length;
nb1 = sel[1].pathPoints.length;
alert(nb0+" "+nb1)
if (nb0 == nb1) {
repereGroup = doc.groupItems.add();
for (var j = 0; j < nb0-1; j++){
par = repereGroup.pathItems.add();
pjxy0 = sel[0].pathPoints[j].anchor;
pjxy1 = sel[1].pathPoints[j].anchor;
pJxy0 = sel[0].pathPoints[j+1].anchor;;
pJxy1 = sel[1].pathPoints[j+1].anchor;
ch = [pjxy0,pjxy1,pJxy1,pJxy0];
atttribut(par,ch);
}
par = repereGroup.pathItems.add();
ch = [pJxy1,sel[1].pathPoints[0].anchor,sel[0].pathPoints[0].anchor,pJxy0];
atttribut(par,ch);
}
}
// -------
function atttribut(obj,ch) {
with(obj){
setEntirePath(ch);
filled = false;
strokeColor = couleur;
strokeWidth = ep;
closed = true;
}
}
// -------
function macmykColor(c,m,j,k)
{ //crée une nouvelle couleur CMJN
var cmykColor = new CMYKColor();
with (cmykColor) {
cyan = c;
magenta = m;
yellow = j;
black = k;
}
return cmykColor;
}
// ------- J'ai fait au plus simple. René
... View more
Oct 24, 2024
01:19 AM
1 Upvote
Voici ma version faite pour l'occasion. // JavaScript Document
// pos masque 4 test plus.js
// Author Landry René elleere@aliceadsl.fr
// Wed, 23 October 2024 11:02:00 GMT
// Place les objets sélectionnés en haut et au centre du plan de travail actif
// Places the selected objects at the top and center of the active artboard
// Contours or not to be taken into account (variable visibleBds)
/*Note: If the variable AdjustMask = true the framing is done on the masked object
false The clipping group. */
// INIT -------
var visibleBds = true; // alignment mode visibleBounds or geometricBounds
var AdjustMask = true; // Adjust masks
var entourRect = false; // draws an ungrouped frame around the object
// ------------
var result = false;
var res = "dialog { orientation: 'column', alignChildren: 'right', \
info: Group { orientation: 'column', alignChildren: 'left', \
text: 'Choice of mode:', \
modeType: Group { orientation: 'column', alignChildren: 'left', margins: 8, \
rbtn1: RadioButton { text: 'GeometricBounds'}, \
rbtn2: RadioButton { text: 'VisibleBounds'}, \
ajkbox: Checkbox { text: 'Adjust masks?'}, \
}, \
} \
buttons: Group { orientation: 'row', \
ok: Button { text: 'OK', properties:{name:'ok'} }, \
} \
}";
var win = new Window(res);
win.frameLocation = [100,150];
win.text = "TopCenter de LR";
win.info.modeType.rbtn1.value = !visibleBds;
win.info.modeType.rbtn2.value = visibleBds;
win.info.modeType.ajkbox.value = AdjustMask;
win.buttons.ok.onClick = function() {
visibleBds = win.info.modeType.rbtn2.value;
AdjustMask = win.info.modeType.ajkbox.value;
result = true;
win.close();
}
win.show();
// -------
if (result){
var doc = activeDocument,
Origin = doc.rulerOrigin,
hautDoc = doc.height,
origX = -Origin[0],
origY = -Origin[1]+hautDoc,
objRef,
dxy,
tabs,
mask,
VG,
selg,
sel = selection;
for (var j = 0; j < sel.length; j++){
mask = false;
objRef = sel[j];
if (objRef.guides) continue;
tabs = [];
if (objRef.typename == "GroupItem" && AdjustMask) {
selg = objRef.pageItems;
detectclippingInGrp(selg,tabs);
}
VG = visibleBds ? objRef.visibleBounds : objRef.geometricBounds;
if (tabs.length > 0 && mask) {
getCadre(VG,tabs);
}
dxy = TopCenter(VG,origX,origY);
// -------
objRef.translate(dxy[0],dxy[1]);
objRef.selected = false;
if (entourRect) {
var cadre= enCadre(doc,VG,4);
cadre.translate(dxy[0],dxy[1]);
}
}
}
// -------
function TopCenter(v,X,Y) {
var dx = X - v[0] + (activeDocument.width-(v[2]-v[0]))/2,
dy = Y - v[1];
return [dx,dy];
}
// -------
function getCadre(VG,tabs) {
var xmin, ymin, xmax, ymax, vi;
xmin = ymin = Infinity;
xmax = ymax = -Infinity;
for (var i = 0; i < tabs.length; i++){
vi = visibleBds ? tabs[i].visibleBounds : tabs[i].geometricBounds;
xmin = Math.min(vi[0],xmin);
ymax = Math.max(vi[1],ymax);
xmax = Math.max(vi[2],xmax);
ymin = Math.min(vi[3],ymin);
}
if (VG[0] < xmin) VG[0] = xmin;
if (VG[1] > ymax) VG[1] = ymax;
if (VG[2] > xmax) VG[2] = xmax;
if (VG[3] < ymin) VG[3] = ymin;
}
// -------
function detectclippingInGrp (grp,tabs){
// Global variable mask
var item;
for(var i = 0; i < grp.length; i++){
item = grp[i];
if (item.clipping) {tabs.push(item); mask = true; return;}
if (item.typename == "GroupItem") {
if (item.clipped) {
tabs.push(item.pageItems[0]); mask = true; // alert('clipping');
}
else {detectclippingInGrp(item,tabs);}
}
else tabs.push(item);
}
}
// -------
function enCadre(doc,VG,color){
var cadre = doc.pathItems.rectangle(VG[1],VG[0],VG[2]-VG[0],VG[1]-VG[3]);
cadre.filled = false;
//cadre.selected = true;
cadre.stroked = true;
cadre.strokeWidth = 2;
cadre.strokeColor = doc.swatches[color].color;
return cadre;
}
// ------- Moins complète que la votre @jduncan ... René
... View more
Oct 24, 2024
12:55 AM
@jduncan, Vous êtes vraiment modeste quand vous écrivez: "J’étais un peu novice en matière de script quand j’ai écrit cette fonction" René
... View more
Oct 23, 2024
01:05 PM
Bonjour @jduncan, Merci pour votre remarque qui est très pertinente, mon script est forcément limité, c'était surtout dans un but pédagogique afin de permettre à @andyf65867865 de progresser dans sa compréhension des propriétés position, geometriqueBounds et visibleBounds (en bref tout simplement tenter de répondre à la question posée). j'avoue ne pas avoir pensé à chercher plus loin. Déformation professionnelle, j'ai enseigné pendant 38 années... Cependant j'ai une question, si un objet masque est mini d'un contour, ce qui est possible, ne doit on pas en tenir compte dans visiblebounds? Exemple: Un des masques du groupe sélectionné possède un contour noir de 11pts, la bonne réponse serait plutôt celle du bas... Le non de la fonction getVisibleBounds peut prêter à confusion? René
... View more
Oct 21, 2024
02:32 PM
2 Upvotes
Bonjour, L'objet qui sert de masque est le premier objet du groupe masque, c'est lui qui doit servir pour le positionnement. Un exemple de script pour comprendre... // JavaScript Document
// De elleere
// Place les objets sélectionnés en haut et au centre du plan de travail actif
// Places the selected objects at the top and center of the active artboard
// Contours or not to be taken into account (var visibleBds)
// -------
var visibleBds = false;
// -------
var doc = activeDocument,
Origin = doc.rulerOrigin,
largDoc = doc.width,
hautDoc = doc.height,
origX = -Origin[0],
origY = -Origin[1]+hautDoc,
objRef,
item,
dxy,
sel = selection;
for (var i = 0; i < sel.length; i++) {
item = sel[i];
objRef = item.typename == "GroupItem" && item.pageItems[0].clipping ? item.pageItems[0] : item;
dxy = visibleBds ? TopCenterV(objRef,origX,origY) : TopCenterP(objRef,origX,origY);
//dxy = TopCenterVG(objRef,origX,origY,visibleBds)
// -------
// for info
var mes = "the two functions TopCenterG() and TopCenterP() are equivalent"+"\r";
if (i == 0) alert(mes+TopCenterG(objRef,origX,origY)+"\r"+TopCenterP(objRef,origX,origY));
// -------
item.translate(dxy[0],dxy[1]);
item.selected = false;
}
// -------
function TopCenterG(obj,X,Y) {
var v = obj.geometricBounds;
var dx = X - v[0] + (activeDocument.width-(v[2]-v[0]))/2,
dy = Y - v[1];
return [dx,dy];
}
// -------
function TopCenterP(obj,X,Y) {
var dx = X - obj.position[0] + (activeDocument.width-obj.width)/2,
dy = Y - obj.position[1];
return [dx,dy];
}
// -------
function TopCenterV(obj,X,Y) {
var v = obj.visibleBounds;
var dx = X - v[0] + (activeDocument.width-(v[2]-v[0]))/2,
dy = Y - v[1];
return [dx,dy];
}
// -------
// To use this function, replace line 23 with
// dxy = TopCenterVG(objRef,origX,origY,visibleBds)
// and remove the other three functions
function TopCenterVG(obj,X,Y,at) { // at for visibleBds
var v = at ? obj.visibleBounds : obj.geometricBounds;
var dx = X - v[0] + (activeDocument.width-(v[2]-v[0]))/2,
dy = Y - v[1];
return [dx,dy];
}
// ------- René
... View more
Oct 21, 2024
06:55 AM
Salut! Petit script en réponse... // JavaScript Document
// diametre.js
var police1 = "SymbolMT";
var doc = activeDocument;
var Phi = String.fromCharCode(8709); // Phi = "\u2205";
alert(Phi+" 1254");
police1 = getFont(police1);
var pointText = doc.textFrames.pointText([20,-20]);
pointText.contents = Phi+" 1254";
if (police1 != undefined) pointText.textRanges[0].textFont = police1;
// -------
function getFont(nomPolice) {
try {
var police = textFonts.getByName(nomPolice);
} catch (e) {
alert( "The specified font doesn’t exist" );
return undefined;
}
return police;
}
// ------- si ensuite vous modifez la police, dans de nombreux cas le symbole ∅ subsiste. René
... View more
Oct 17, 2024
01:55 PM
Salut Dimitri, Merci pour l'exemple, ma version d'Illustrator est un peu ancienne CS6, je peux cependant ouvrir le pdf peut-être a t'il subit des modifications? Exemple l'image de gauche (sélection ?): Si maintenant j'utilise une image sans anomalie: Le résultat est correct. René
... View more
Oct 16, 2024
12:46 PM
Bonjour Dimitri, Après de multiples essais, 176.52° rotation copier et ensuite CTRL+D et bien d'autres... Après alignement etajout de bordures. René
... View more
Oct 11, 2024
12:42 PM
3 Upvotes
Seulement rotation 0° // JavaScript Document
// This script resets the rotation angle to 0 degrees for bitmap clips and Imported artwork.
var info = false;
testObjects(selection);
// -------
function testObjects(a) {
var deg,
tag,
selLen = a.length;
for (var c = 0; c < selLen; c++) {
if(a[c].typename == 'GroupItem'){
testObjects(a[c].pageItems);
} else
if(a[c].typename=='RasterItem' || a[c].typename == 'PlacedItem') {
deg = getRotationAngle(a[c]);
a[c].rotate(deg * -1);
tag = getTag(a[c]);
if (tag != undefined) tag.value = 0;
}
}
}
// -------
function getRotationAngle(item) {
var mtx = item.matrix;
var deg = Math.atan2(mtx.mValueB, mtx.mValueA) * 180 / Math.PI;
return (item.typename == 'PlacedItem') ? deg * -1 : deg;
}
// -------
function getTag(obj)
{ // retourne le V.tag de nom "BBAccumRotation" si il existe
try {
var tag = obj.tags.getByName("BBAccumRotation");
} catch (e) {
if (info) alert( "The specified tag doesn’t exist" );
return undefined;
}
return tag;
}
// ------- René
... View more
Oct 11, 2024
04:06 AM
Bonjour Dimitri, Si on prend le script de Kurt, pour la version d'Illustrator que j'utilise. Si je sélectinne l'image après exécution. C'est pourquoi je propose de réinitialiser le Tag à la valeur 0. René
... View more
Oct 11, 2024
03:49 AM
Un clic droit sur l'une des règles,
... View more
Oct 08, 2024
01:17 PM
1 Upvote
Bonjour à tous, Je pense que vous devriez ajouter cela à vos scripts... var tag = getTag(item);
if (tag != undefined) tag.value = 0;
}
//-----------
function getTag(obj)
{ // retourne le V.tag de nom "BBAccumRotation" si il existe
try {
var tag = obj.tags.getByName("BBAccumRotation");
} catch (e) {
if (info) alert( "The specified tag doesn’t exist" );
return undefined;
}
return tag;
} René
... View more
Oct 04, 2024
01:09 PM
1 Upvote
TextFrame est considéré comme une variable dans votre script. // JavaScript Document
var doc = app.activeDocument;
var objRef = doc.selection[0]; // assume text frame is selected
if (objRef.typename == "TextFrame") {
alert("Text found");
}
else alert(objRef.typename);
... View more
Oct 04, 2024
12:46 PM
Bonjour, Sélectionnez "Extrémité projetée" René
... View more
Oct 04, 2024
09:52 AM
1 Upvote
Salut! Je verrais plutôt cela: // JavaScript Document
var doc = app.activeDocument;
var textRef = doc.textFrames[0]; // assume text frame is present
for (var i = 0; i < textRef.textRanges.length; i++) {
var Char = textRef.textRanges[i]; //alert(Char.contents)
if (Char.contents == " ") {
textRef.textRanges[i].remove();
i--;
}
} René
... View more
Oct 04, 2024
05:07 AM
Bonjour! Quadrant les quadrants sont numérotés de 1 à 4 (de I à IV) dans le sens direct (anti-horaire), à partir de celui situé dans le quart de plan supérieur de droite. Sur Illustrator à partir de la version CS5, le système de coordonnées est passé au quatrième quadrant et non plus au premier pour les versions antérieures. En ce déplaçant vers le bas, on augmente la valeur des ordonnées, et en se déplaçant vers la droite, on augmente celle des abscisses. Il en est de même dans de nombreux logiciels ainsi que sur les page Web. Le changement de système de coordonnées ne s’applique pas à la création de scripts, pour les scripts on reste au premier quadrant. vous pouvez ainsi conserver d’anciens scripts. Toutefois, lorsque vous transformez des objets à l’aide de scripts, la valeur de l’ordonnée diffère de la valeur que vous avez définie dans l’interface utilisateur d’Illustrator. Par exemple, si vous appliquez un déplacement de 10 points sur l’axe des ordonnées, pour reproduire le même mouvement à l’aide de scripts, appliquez une transformation de -10 points sur l’axe des ordonnées. René Dans un script l’origine est l’origine des règles globales "rulerOrigin" et non pas celle du plan de travail actif. Pour faire des testes... // JavaScript Document
// triangle
alert(activeDocument.rulerOrigin);
//activeDocument.rulerOrigin = [0,0];
var ligne = activeDocument.pathItems.add();
ligne.name = "triangle";
ligne.setEntirePath([[12,12],[60,60],[70,30]]);
... View more
Sep 29, 2024
04:29 AM
Je voulais juste préconiser une modification à choisir dans la liste déroulante...
... View more
Sep 29, 2024
01:54 AM
Bonjour, Paramètres: Personnalisés Settings: Custom Peut-être à modifier ici?
... View more
Sep 27, 2024
06:39 AM
Arrière plan transparent
... View more
Sep 23, 2024
01:06 AM
Bonjour rien n'est parfait.. Pas d'arrondis, Vous pouvez ajouter un caractère blanc (comme I)aux extrémités du texte.
... View more
Sep 22, 2024
02:57 AM
Bonjour Dimitri, Je ne peux pas te répondre car cela dépasse mes compétences, Peut-être que quelqu'un d'autre sur ce forum pourra te donner les conseils que tu attends. Désolé... René
... View more
Sep 21, 2024
01:38 AM
1 Upvote
Bonjour, Dans l'état actuel de votre script, Cliquez sur le bouton "IMG Scale" le résultat s'affiche... puis fermez le dialogue ou appuyez sur la touche ESC // JavaScript Document
#target Illustrator
#targetengine main
var myPalette_XPOS = 200;
var myPalette_YPOS = 200;
// PALETTE
// =======
var myPalette = new Window('dialog', 'DC TOOLS'); // , {resizeable: true}
// myPalette.text = "DC TOOLS";
myPalette.orientation = "column";
myPalette.alignment = "center"; // Center the text horizontally
myPalette.alignChildren = ["center","top"];
myPalette.spacing = 1;
myPalette.margins = 2;
var button10 = myPalette.add("button", undefined, undefined, {name: "button10"});
button10.text = "IMG Scale";
button10.alignment = ["center","top"];
button10.onClick = function () {
showScaleAndRotation();
//myPalette.close();
}
myPalette.center();
//myPalette.frameLocation = [ myPalette_XPOS, myPalette_YPOS ];
myPalette.show();
// Function to show a dialog with SCALE & ROTATION
function showScaleAndRotation() {
// Ensure there is an active document
if (app.documents.length === 0) {
alert("No document open.");
return;
}
var IMG_selected = app.activeDocument.selection;
// Check if something is selected
if (IMG_selected.length === 0) {
alert("you called me, is an image seleced?");
alert("Please select an object.");
return;
}
var selectedItem = IMG_selected[0];
// Check if it's a linked image (PlacedItem) or a raster image (RasterItem)
if (selectedItem.typename !== "PlacedItem" && selectedItem.typename !== "RasterItem") {
alert("The selected object is not a linked or raster image.");
return;
}
// Get the transformation matrix of the selected object
var matrix = selectedItem.matrix;
// alert("you called me? So it s an IMG and its selected");
// Calculate the scaling based on the transformation matrix
var scaleX = Math.sqrt(matrix.mValueA * matrix.mValueA + matrix.mValueB * matrix.mValueB) * 100;
var scaleY = Math.sqrt(matrix.mValueC * matrix.mValueC + matrix.mValueD * matrix.mValueD) * 100;
// Calculate the rotation in degrees
var rotation = Math.atan2(matrix.mValueB, matrix.mValueA) * (180 / Math.PI);
// Show the result in a dialog box
alert("Scale X: " + scaleX.toFixed(2) + "%\n" + "Scale Y: " + scaleY.toFixed(2) + "%\n" + "Rotation: " + rotation.toFixed(2) + "°\n");
} René PS ajoutez des bouton OK et Cancel...
... View more
Sep 20, 2024
03:04 AM
Supprimez myPalette.close(); dans la fonction button10.onClick René
... View more
Sep 20, 2024
02:26 AM
1 Upvote
Bonjour, // PALETTE
// =======
var myPalette = new Window('dialog', 'DC TOOLS'); // , {resizeable: true}
// myPalette.text = "DC TOOLS";
myPalette.orientation = "column";
myPalette.alignment = "center"; // Center the text horizontally
myPalette.alignChildren = ["center","top"];
myPalette.spacing = 1;
myPalette.margins = 2;
var button10 = myPalette.add("button", undefined, undefined, {name: "button10"});
button10.text = "IMG Scale";
button10.alignment = ["center","top"];
button10.onClick = function () {
showScaleAndRotation();
myPalette.close();
}
myPalette.center();
//myPalette.frameLocation = [ myPalette_XPOS, myPalette_YPOS ];
myPalette.show();
... View more
Sep 18, 2024
10:41 AM
Bonjour, Options de l'outil pipette (cochez Aspect)
... View more
Sep 15, 2024
05:57 AM
Bonjour Monika, Sur la version française, on l'appelle Sélection directe progressive. le mot progressive est bien explicite du role de cet outil. On the French version, it is called Progressive Direct Selection. René
... View more