Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
0

How to vary hues for dynamic shapes?

Engaged ,
Feb 14, 2025 Feb 14, 2025

Copy link to clipboard

Copied

Hello Community,

I need help on following situation:

I have created multiple text area types with dynamic shapes fill as shown below image the situation. I have prepared custom colors group and want to randomize all these selected dynamic shapes within created colors group.

 

is that possible with any trick or script

 

jkhakase_0-1739591229403.pngexpand image

 

TOPICS
How-to , Scripting

Views

151
Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 15, 2025 Feb 15, 2025

Copy link to clipboard

Copied

Hi @j.khakase can you share a sample file? There are particular difficulties with your question based on exactly how the text frames are styled. I'd be happy to have a look at it and let you know if it's possible.

- Mark

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Feb 17, 2025 Feb 17, 2025

Copy link to clipboard

Copied

Hi @m1b ,

Thanks for your reply, I was looking for it. I attached the sample files and Link of it, there is only 3 objects to test, but it can be multiple. I want to randomize their shape fill by targeted color group I prepared at swatches panel.

 

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2025 Feb 17, 2025

Copy link to clipboard

Copied

@j.khakase Thanks for your sample files.

 

Unfortunately, the scripting API doesn't provide access to anything but the very most basic appearance, eg. a fill color and a stroke color. Because in your example file you use a more complex appearance (two fills and a live effect nested in a fill), a script won't really help here.

 

One solution would be to simplify the artwork—eg. split the artwork into a basic colored rectangle plus a point text frame. This would make a scripting approach feasible. See the attached demo file and try it with the script below. Note: this is just a demonstration—your exact needs will probably require something more specialized.

- Mark

 

Everytime you run script it will apply a random color from the same color group.

demo.gifexpand image

 

Can select multiple page items:

demo2.gifexpand image

/**
 * @file Change Fill Color By Color Group Random Swatch.js
 * 
 * Experiment of applying swatch to the selected items,
 * where the swatch is chosen at random from amongst the
 * item's fill color's parent swatch group.
 *
 * @author m1b
 * @discussion https://community.adobe.com/t5/illustrator-discussions/how-to-vary-hues-for-dynamic-shapes/m-p/15159237
 */
(function () {

    var doc = app.activeDocument,
        items = doc.selection;

    if (0 === item.length)
        return alert('Please select one or more page items and try again.');

    for (var i = 0; i < items.length; i++)
        applyRandomColorGroupColor(doc, items[i]);

})();

/**
 * Apply a fill color to `item`, by choosing a random
 * swatch color from `item`s current fill color's
 * parent swatch group.
 * @author m1b
 * @version 2025-02-18
 * @param {Document} doc - the item's Document.
 * @param {PageItem} item - the item to color.
 */
function applyRandomColorGroupColor(doc, item) {

    if (!item.hasOwnProperty('fillColor'))
        return;

    // get all the colors from the item's color's parent color group
    var swatches = getColorGroupSwatchesForColor(doc, item.fillColor);

    if (
        !swatches
        || 0 === swatches.length
    )
        return alert('Could not find a color group for the selected item\'s color.')

    // random swatch
    item.fillColor = swatches[Math.floor(Math.random() * swatches.length)].color;

};

/**
 * Returns all the swatches in the same color group as `targetColor`.
 * @author m1b
 * @version 2025-02-18
 * @param {Document} doc - an Illustrator Document.
 * @param {Color} targetColor - the target of the search.
 * @returns {Swatches?}
 */
function getColorGroupSwatchesForColor(doc, targetColor) {

    var swatchGroups = doc.swatchGroups;

    for (var i = 0; i < swatchGroups.length; i++) {

        var swatches = swatchGroups[i].getAllSwatches();

        for (var j = 0; j < swatches.length; j++)

            // compare stringified versions
            if (stringify(swatches[j].color) === stringify(targetColor))
                return swatches;

    }

};

/**
 * Simple stringify object, with
 * special handling of Swatches.
 * @author m1b
 * @version 2023-04-26
 * @param {Object} obj - the object to stringify.
 * @returns {String}
 */
function stringify(obj) {

    var str = obj.toString();

    for (var key in obj) {

        if (!obj.hasOwnProperty(key))
            continue;

        if (
            key == 'spot'
            || key == 'color'
        )
            str += stringify(obj[key]);

        else
            str += obj[key];

    }

    return str;

};

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Feb 17, 2025 Feb 17, 2025

Copy link to clipboard

Copied

Thank you @m1b for sharing the thoughts on my facing issue. I am aware how to randomize and vary hue with basic shapes. but in this situation I need to vary hues of dynamic shapes fill without doing it manually at multiple similar bojects. I think shown trick by you can be achive without any script with using existing feature of Recolor Artwork only. but my Rquirement is different as explain above.

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 17, 2025 Feb 17, 2025

Copy link to clipboard

Copied

LATEST

Yes I thought so. I don't know how to do exactly what you want. There might be a clever way with Actions or graphic styles, but I don't know any. Sorry.

 

Good luck and let us know if you discover a good way!

- Mark

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines