2016-09-15 3 views
1

Ich arbeite daran, ein Skript für Adobe Illustrator in Javascript zu schreiben, um Objekte mit ausgewählten Farben zu füllen.Skript zum Füllen von Objekten mit Farben - gleichmäßige Verteilung, aber kein erkennbares Muster

Ich habe 32 Objekte und 12 Farbfelder. Ich möchte die 32 Objekte mit jeder Farbe zweimal füllen und dann die restlichen 8 Objekte mit einer zufälligen Auswahl füllen. Ich möchte die Objekte in keinem unterscheidbaren Muster füllen, also reicht es nicht, jedes Objekt durchzuwischen und ihm die nächste Farbfeldfarbe zuzuweisen.

Dies ist, was ich bisher habe, aber es ist nicht jede Farbe mindestens zweimal und Füllung zufällig.

myObjects = app.activeDocument.selection; 
myDocument = app.activeDocument; 

if (myObjects instanceof Array) { 
    colourSwatches = myDocument.swatches.getSelected(); 

    //if there are swatches 
    if (colourSwatches.length != 0) { 
     for (i = 0; i < myObjects.length; i++) { 

      //if the selection is a path or compound path 
      if (myObjects[i].typename == "PathItem" || myObjects[i].typename == "CompoundPathItem") { 

       selItem = myObjects[i]; 
       selItem.filled = true; 

       //select colour from swatches at random and then fill 
       swatchIndex = Math.round(Math.random() * (colourSwatches.length - 1)); 

       if (selItem.typename == "PathItem") { 
        selItem.fillColor = colourSwatches[swatchIndex].color; 
       } else { 
        selItem.pathItems[0].fillColor = colourSwatches[swatchIndex].color; 
       } 
      } 
     } 
    } 
} 

Antwort

1

Statt Muster zufällig Kommissionierung (das ist, wo Sie die Kontrolle verlieren), dies zu tun:

  1. Erstellen Sie eine Reihe von Ihrer Ziel Größe (32) und füllen es mit den erforderlichen Muster (12). Sie müssen dieses Array nicht zufällig auswählen.
  2. Wählen Sie für jedes Objekt einen zufälligen Eintrag aus.
  3. Entfernen Sie den ausgewählten Eintrag aus dem Array.
  4. Loop bis zufrieden.

Das heißt, ungetestet, aber so etwas wie dies:

var targetArray = []; 
// fill with the set of required colors, times 2 
for (i=0; i < 12; i++) 
{ 
    targetArray[2*i] = i; 
    targetArray[2*i+1] = i; 
} 
// fill up to contain 32 items 
for (i=24; i<32; i++) 
    targetArray[i] = Math.floor(Math.random() * colourSwatches.length); 

(siehe Getting random value from an array für diesen random Ausdruck.)

Jetzt haben Sie ein Array mit dem Indizes für Muster zu verwenden. Schleife über Ihre Objekte und zufällige Elemente aus dem Array wählen, bis Sie fertig sind (was gut wäre), oder Sie laufen aus Artikel zu holen (was Ihre Anzahl der Elemente anzeigen würde, zu füllen ist nicht korrekt):

for (i = 0; i < myObjects.length; i++) 
{ 
    arrayIndex = Math.floor(Math.random() * targetArray.length); 
    swatchIndex = targetArray[arrayIndex]; 
    targetArray.splice (arrayIndex,1); 
    selItem.fillColor = colourSwatches[swatchIndex].color; 
} 
+0

Vielen Dank! – user1876246

0

32 Objekte:

32 boxes

12 Farben:

12 colors

var document  = app.activeDocument; 
var objects  = document.selection; // 32 objects 
var swatchColors = document.swatches.getSelected(); // 12 colors 
var colors  = swatchColors; // 12 colors 
colors   = colors.concat(swatchColors); // duplicate the 12 colors, 12*2 colors 

// add 8 random colors 
for (var i = 0; i < 8; i++) { 
    // create random index in [0, 11] 
    var randomIndex = Math.floor(Math.random() * swatchColors.length); 
    // add the random color to colors array 
    colors.push(swatchColors[randomIndex]); 
    // remove the added color from the swatches so no extra duplicates 
    swatchColors.splice(randomIndex, 1); 
} 

// now we have 32 objects and 32 colors 
// in colors array, there are (12 * 2) + 8 random colors 
for (var i = 0; i < objects.length; i++) { 
    objects[i].fillColor = colors[i].color; 
} 

Nach Ausführung:

Objects colored

Objekte werden von oben nach unten, von links nach rechts durchlaufen. Dies ist die document.selection Bestellung. Die ersten 24 Farben werden also in der gleichen Reihenfolge wie in Mustern aufgetragen. Sie können die colors mischen, wenn Sie eine zufällige Reihenfolge wünschen.

Verwandte Themen