5 Replies Latest reply on Sep 28, 2017 5:20 AM by williamadowling

    How to snap/round gradient rotation and stops?

    Egor Chistyakov Level 1

      Sometiems I need to massively shake up gradient fiils — make angles rounded and position stops at multiples of, for example, five.

      I'm trying to conjure up a script for this, and immidiately stopped at this part:

      var NewFill = Math.round(OldFill.rotate / 5) * 5;
      OldFill.rotate(NewFill, 0, 0, 1, 0);
      

      What is wrong with it?

        • 1. Re: How to snap/round gradient rotation and stops?
          Egor Chistyakov Level 1

          I'm a *******, I'm trying to divide a function.

          Well, then, how to READ current angle of gradient fill with JS? I know well how to set it, but I need to know it first to change it.

          • 2. Re: How to snap/round gradient rotation and stops?
            Egor Chistyakov Level 1

            Figured that out. RTFM.

            thisDocument = app.activeDocument;
            docSelection = thisDocument.selection;
            selectionLen = docSelection.length;
            
            for (i = 0; i < selectionLen; i++) {
                oldFill = docSelection[i];
                if (oldFill.typename == "PathItem" || oldFill.typename == "CompoundPathItem") {
                    checkPath = oldFill;
                    if (oldFill.typename == "CompoundPathItem") {
                        checkPath = oldFill.pathItems[0];
                    }
                    if (checkPath.filled == true && checkPath.fillColor.typename == "GradientColor") {
                        if (checkPath.fillColor.gradient.type == GradientType.LINEAR) {
            
                            //make rotation multiple of 5
                            var angleVal = prompt("Make angle of gradients to be multiple of:","5","Gradient Angle")
                            var oldAngle = checkPath.fillColor.angle;
                            var newAngle = (Math.round(oldAngle / angleVal)) * angleVal;
                            var angleDiff = newAngle - oldAngle;
                            oldFill.rotate(angleDiff, 0, 0, 1, 0);
            
                            //make stops position at multiple of 5
                            var stopVal = prompt("Make gradient stops position at multiple of:","5","Gradient Stops")
                            var numOfStops = checkPath.fillColor.gradient.gradientStops.length;
                            for (k = 0; k < numOfStops; k++) {
                                var oldRamp = checkPath.fillColor.gradient.gradientStops[k].rampPoint;
                                var newRamp = (Math.round(oldRamp / stopVal)) * stopVal;
                                checkPath.fillColor.gradient.gradientStops[k].rampPoint = newRamp;
                            }
                        }
                    }
                }
            }
            
            
            
            • 3. Re: How to snap/round gradient rotation and stops?
              williamadowling Level 4

              Glad we were able to help.

               

               

              • 4. Re: How to snap/round gradient rotation and stops?
                Egor Chistyakov Level 1

                You know how this works sometimes

                • 5. Re: How to snap/round gradient rotation and stops?
                  williamadowling Level 4

                  I certainly do. many times trying to explain an issue to someone who's never seen the project is enough to pull yourself out of whatever funk you're in and allow you to see a new perspective.