25 Replies Latest reply: Aug 27, 2014 11:05 AM by Monstrik RSS

    Add selection as add and intersect commands combined

    Monstrik Community Member

      Hello, I want to add selection to a selection so it acts as the two commands combined: add command and intersect command. Where parts of a selection intersect i want to act it as the add command - it simply adds selection to a selection. Where it does not intersect, i want it to act as the intersect command - it deletes the part of the selection that doesnt intersect. Can this be scripted?

        • 1. Re: Add selection as add and intersect commands combined
          c.pfaffenbichler Community Member
          Where it does not intersect, i want it to act as the intersect command

          Say what?

          Could you maybe post a sketch/screenshot to clarify?

          • 3. Re: Add selection as add and intersect commands combined
            Monstrik Community Member

            Sorry it didnt come out in the right order, as i posted these from my mobile phone. i hope you get the idea

            • 4. Re: Add selection as add and intersect commands combined
              c.pfaffenbichler Community Member

              I guess via a work-around (using paths possibly) it might be possible if a bit inconvenient and slow.

              • 5. Re: Add selection as add and intersect commands combined
                Monstrik Community Member

                can You please explain more how it can be done?

                • 6. Re: Add selection as add and intersect commands combined
                  JJMack Community Member

                  What you are describing has to be done  in two operations.  For its not a logical one step operation.  Also how you describe intersect is not how intersect works.  Your want to do to two thongs so just do them.

                   

                  One) add the rectangle wind up with the union on the circle and the rectangle an the disjointed star.

                  Two) delete the star you wind up with your keyhole

                   

                   

                  The intersect of your A and B is:

                  Capture.jpg

                  Paths have and addition mode that selections do not have and that is exclude which delete overlapping area.

                   

                  There is no join overlapping selection AND delete none overlapping selection mode.

                   

                   

                  The 4 Selection mode are  New, Add, Subtract and Intersect

                  The 5 Path modes are  New, Add, Subtract, Intersect and Exclude

                  • 7. Re: Add selection as add and intersect commands combined
                    c.pfaffenbichler Community Member

                    One possible approach (not necessarily the most efficient one) would be

                    • storing the first Selection

                    • creating the second Selection

                    • storing the second Selection and the added Selections

                    • creating Working Paths from the (expanded) second Selection and the added first and second Selections

                    • checking which of the two Paths’ subPathItems have identical points

                    • creating an inverted Selection of that subPathItem and filling it in the added Channel with black

                    • loading that as a Selection and removing the Channels and Paths

                     

                    Edit: But I guess this would mean that one has store the first selection, create the second and then start the Script.

                    • 8. Re: Add selection as add and intersect commands combined
                      Monstrik Community Member

                      Guys im not sure im following you...i think the problem is that i dont know much about paths...never really used them...i'm starting to do some research on it...meanwhile, could you please spare more of your precious time and explain your methods to me by screenshots? ...i'd appreciate it so much..

                      • 9. Re: Add selection as add and intersect commands combined
                        Monstrik Community Member

                        To me it doesnt matter how long or how inefficient the method is. As long as it can work as an action. The ultimate goal for me is to get rid of the star. It doesnt matter what happens to the circle, as long as it doesnt get smaller than its original size.

                        • 10. Re: Add selection as add and intersect commands combined
                          JJMack Community Member

                          Many things can not be done in actions.  It would hard to do in a script dealing with selection.   Perhaps if you had your selection the keyhole + the star. You could convert that to a path.  The total path would contain two closed path area.  A script may be able to coded to delete one but how would it know which one you want deleted.

                          • 12. Re: Add selection as add and intersect commands combined
                            c.pfaffenbichler Community Member

                            I can’t log in to the Forum, it seems, so I can’t post screenshots …

                             

                            Anyway, what I would propose is a two-step Script that checks for the existence of a Channel with a certain name.

                            That I would use Paths is not terribly relevant, one could probably do without them, too.

                             

                            • When the Script is called the first time (and the »stupidly« named Channel does not exist) it stores the current Selection with a »stupid« name one would not use otherwise and terminate

                            • After one has made the second Selection and calls the Script the next time it notices the existence of the Channel with the »stupid« name and does something else, namely:

                            • fill the Selection in the Channel with white

                            • store the second Selection

                            • create a Path from the first and second Selections added

                            • create a Path from the second Selection

                            • compares the Paths

                            • makes a new Path from the one subPathItem in the first Path that has identical pathPoints as the second Path

                            • load that as a Selection, expand the Selection a bit and intesect it with the first Channel

                            • remove the Channels and Paths created by the Script

                             

                            If the Selections are likely to be soft one may have to edit them prior to Path creation in order not to cut off semi-selected regions with the second to last step.

                             

                            As JJMack points out, Actions are more limited than Scripts, so the comparison step necessitates the use of a Script.

                            • 13. Re: Add selection as add and intersect commands combined
                              Monstrik Community Member

                              Guys thank you very much for your answers.

                              C.pfaffenbichler, unless im given visual instructions, I'm not sure i can follow what you have written. Im way behind your skills. So i have to look for other ways. I have another question. If the rectangle was smaller, within the circle's boundaries and if we had the fifth mode - exclude. what would happen if we did A and B exclude? When I intersect A and B, I get B. Would I get A (without the star) if there was exclude mode?

                               

                              A Sel.jpgB Sel.jpgD Sel.jpgC Sel.jpg

                              • 14. Re: Add selection as add and intersect commands combined
                                Monstrik Community Member

                                JJMack does this method of yours solves my problem? Would you mind showing me visually by screenshots?

                                • 15. Re: Add selection as add and intersect commands combined
                                  Monstrik Community Member

                                  I think im getting close to solving my problem... All i need to do is to simulate exclude mode which selections don't have... as you JJMack pointed out, paths have this mode. How do i convert a selection into a path so i can access this exclude mode... once i've used it convert it back to selections

                                  • 16. Re: Add selection as add and intersect commands combined
                                    c.pfaffenbichler Community Member

                                    This illustrates a test run of above Script which seems to get the result you are looking for.

                                    selectionCombinationTestScr.jpg

                                    • 17. Re: Add selection as add and intersect commands combined
                                      c.pfaffenbichler Community Member

                                      By the way: The Script would only provide the expected result if the second Selection is one contiguous area.

                                       

                                      Edit: This should also handle discontinuous segments for the second Selection.

                                      // store selection on first run, on second run add overlapping parts of the sstored selection to the new selection;
                                      // 2014, use at your own risk;
                                      #target photoshop
                                      if (app.documents.length > 0) {
                                      activeDocument.suspendHistory("something with selections", "main()");
                                      };
                                      ////// the stuff //////
                                      function main () {
                                      var myDocument = app.activeDocument;
                                      var theChannelName = "removeThisChannelLaterOn";
                                      if (hasSelection() == true) {
                                      // if channel exists;
                                      try {
                                      var theChannel = myDocument.channels.getByName(theChannelName);
                                      // store the selection;
                                      var theOtherChannel = myDocument.channels.add();
                                      myDocument.selection.store(theOtherChannel);
                                      theOtherChannel.name = theChannelName+"Too";
                                      // fill;
                                      myDocument.activeChannels = [theChannel];
                                      var theColor = new SolidColor();
                                      theColor.rgb.red = 255;
                                      theColor.rgb.green = 255;
                                      theColor.rgb.blue = 255;
                                      myDocument.selection.fill(theColor);
                                      // get path information;
                                      var path1 = workPathFromChannel (myDocument, theChannel);
                                      var path2 = workPathFromChannel (myDocument, theOtherChannel);
                                      // check for identical point;
                                      var theCheck = checkForIdenticalPoints (path1, path2);
                                      if (theCheck != false) {
                                      var thePath = createPath2012(theCheck, "removeThisPathLaterOn");
                                      // load;
                                      thePath.makeSelection(0, false, SelectionType.REPLACE);
                                      myDocument.selection.expand(1);
                                      myDocument.selection.load(theChannel, SelectionType.INTERSECT, false)
                                      // clean up;
                                      thePath.remove();
                                      }
                                      // clean up;
                                      theChannel.remove();
                                      theOtherChannel.remove();
                                      }
                                      // if channel does not exist;
                                      catch (e) {
                                      // store the selection;
                                      var theMask = myDocument.channels.add();
                                      myDocument.selection.store(theMask);
                                      theMask.name = theChannelName;
                                      compositeChannels ();
                                      showChannel (theChannelName);
                                      myDocument.selection.deselect();
                                      }
                                      };
                                      };
                                      ////// get work path  info from channel //////
                                      function workPathFromChannel (myDocument, theChannel) {
                                      // load;
                                      myDocument.selection.load(theChannel, SelectionType.REPLACE);
                                      // use threshold to heighten non black pixels;
                                      myDocument.quickMaskMode = true;
                                      myDocument.activeLayer.threshold(1);
                                      myDocument.quickMaskMode = false;
                                      // create work path;
                                      // =======================================================
                                      var idMk = charIDToTypeID( "Mk  " );
                                          var desc16 = new ActionDescriptor();
                                          var idnull = charIDToTypeID( "null" );
                                              var ref12 = new ActionReference();
                                              var idPath = charIDToTypeID( "Path" );
                                              ref12.putClass( idPath );
                                          desc16.putReference( idnull, ref12 );
                                          var idFrom = charIDToTypeID( "From" );
                                              var ref13 = new ActionReference();
                                              var idcsel = charIDToTypeID( "csel" );
                                              var idfsel = charIDToTypeID( "fsel" );
                                              ref13.putProperty( idcsel, idfsel );
                                          desc16.putReference( idFrom, ref13 );
                                          var idTlrn = charIDToTypeID( "Tlrn" );
                                          var idPxl = charIDToTypeID( "#Pxl" );
                                          desc16.putUnitDouble( idTlrn, idPxl, 1.000000 );
                                      executeAction( idMk, desc16, DialogModes.NO );
                                      // get information;
                                      var theArray = collectPathInfoFromDesc2012 (myDocument, myDocument.pathItems[myDocument.pathItems.length - 1]);
                                      return theArray
                                      };
                                      ////// check for selection //////
                                      function hasSelection(){
                                      var ref10 = new ActionReference();
                                      ref10.putEnumerated( charIDToTypeID( "Dcmn" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
                                      var docDesc = executeActionGet(ref10);
                                      return docDesc.hasKey(stringIDToTypeID("selection"));
                                      };
                                      ////// go to composite channels //////
                                      function compositeChannels () {
                                      // =======================================================
                                      var idslct = charIDToTypeID( "slct" );
                                          var desc2 = new ActionDescriptor();
                                          var idnull = charIDToTypeID( "null" );
                                              var ref2 = new ActionReference();
                                              var idChnl = charIDToTypeID( "Chnl" );
                                              var idChnl = charIDToTypeID( "Chnl" );  
                                      switch (activeDocument.mode) {
                                          case DocumentMode.RGB:
                                              var idComposite = charIDToTypeID( "RGB " );
                                              break;
                                          case DocumentMode.CMYK:
                                              var idComposite = charIDToTypeID( "CMYK" );
                                              break;
                                          case DocumentMode.LAB:
                                              var idComposite = charIDToTypeID( "Lab " );
                                              break;
                                          case DocumentMode.GRAYSCALE:
                                              var idComposite = charIDToTypeID( "Blck" );
                                              break;
                                              };
                                              ref2.putEnumerated( idChnl, idChnl, idComposite );
                                          desc2.putReference( idnull, ref2 );
                                      executeAction( idslct, desc2, DialogModes.NO );
                                      };
                                      ////// chow channel of name //////
                                      function showChannel (theName) {
                                      // =======================================================
                                      var idShw = charIDToTypeID( "Shw " );
                                          var desc3 = new ActionDescriptor();
                                          var idnull = charIDToTypeID( "null" );
                                              var list1 = new ActionList();
                                                  var ref3 = new ActionReference();
                                                  var idChnl = charIDToTypeID( "Chnl" );
                                                  ref3.putName( idChnl, theName );
                                              list1.putReference( ref3 );
                                          desc3.putList( idnull, list1 );
                                      executeAction( idShw, desc3, DialogModes.NO );
                                      };
                                      ////// collect path info from actiondescriptor, smooth added //////
                                      function collectPathInfoFromDesc2012 (myDocument, thePath) {
                                      var originalRulerUnits = app.preferences.rulerUnits;
                                      app.preferences.rulerUnits = Units.POINTS;
                                      // based of functions from xbytor’s stdlib;
                                      var ref = new ActionReference();
                                      for (var l = 0; l < myDocument.pathItems.length; l++) {
                                        var thisPath = myDocument.pathItems[l];
                                        if (thisPath == thePath && thisPath.name == "Work Path") {
                                        ref.putProperty(cTID("Path"), cTID("WrPt"));
                                        };
                                        if (thisPath == thePath && thisPath.name != "Work Path" && thisPath.kind != PathKind.VECTORMASK) {
                                        ref.putIndex(cTID("Path"), l + 1);
                                        };
                                        if (thisPath == thePath && thisPath.kind == PathKind.VECTORMASK) {
                                              var idPath = charIDToTypeID( "Path" );
                                              var idPath = charIDToTypeID( "Path" );
                                              var idvectorMask = stringIDToTypeID( "vectorMask" );
                                              ref.putEnumerated( idPath, idPath, idvectorMask );
                                        };
                                        };
                                      var desc = app.executeActionGet(ref);
                                      var pname = desc.getString(cTID('PthN'));
                                      // create new array;
                                      var theArray = new Array;
                                      var pathComponents = desc.getObjectValue(cTID("PthC")).getList(sTID('pathComponents'));
                                      // for subpathitems;
                                      for (var m = 0; m < pathComponents.count; m++) {
                                        var listKey = pathComponents.getObjectValue(m).getList(sTID("subpathListKey"));
                                        var operation1 = pathComponents.getObjectValue(m).getEnumerationValue(sTID("shapeOperation"));
                                        switch (operation1) {
                                        case 1097098272:
                                        var operation = 1097098272 //cTID('Add ');
                                        break;
                                        case 1398961266:
                                        var operation = 1398961266 //cTID('Sbtr');
                                        break;
                                        case 1231975538:
                                        var operation = 1231975538 //cTID('Intr');
                                        break;
                                        default:
                                      // case 1102:
                                        var operation = sTID('xor') //ShapeOperation.SHAPEXOR;
                                        break;
                                        };
                                      // for subpathitem’s count;
                                        for (var n = 0; n < listKey.count; n++) {
                                        theArray.push(new Array);
                                        var points = listKey.getObjectValue(n).getList(sTID('points'));
                                        try {var closed = listKey.getObjectValue(n).getBoolean(sTID("closedSubpath"))}
                                        catch (e) {var closed = false};
                                      // for subpathitem’s segment’s number of points;
                                        for (var o = 0; o < points.count; o++) {
                                        var anchorObj = points.getObjectValue(o).getObjectValue(sTID("anchor"));
                                        var anchor = [anchorObj.getUnitDoubleValue(sTID('horizontal')), anchorObj.getUnitDoubleValue(sTID('vertical'))];
                                        var thisPoint = [anchor];
                                        try {
                                        var left = points.getObjectValue(o).getObjectValue(cTID("Fwd "));
                                        var leftDirection = [left.getUnitDoubleValue(sTID('horizontal')), left.getUnitDoubleValue(sTID('vertical'))];
                                        thisPoint.push(leftDirection)
                                        }
                                        catch (e) {
                                        thisPoint.push(anchor)
                                        };
                                        try {
                                        var right = points.getObjectValue(o).getObjectValue(cTID("Bwd "));
                                        var rightDirection = [right.getUnitDoubleValue(sTID('horizontal')), right.getUnitDoubleValue(sTID('vertical'))];
                                        thisPoint.push(rightDirection)
                                        }
                                        catch (e) {
                                        thisPoint.push(anchor)
                                        };
                                        try {
                                        var smoothOr = points.getObjectValue(o).getBoolean(cTID("Smoo"));
                                        thisPoint.push(smoothOr)
                                        }
                                        catch (e) {thisPoint.push(false)};
                                        theArray[theArray.length - 1].push(thisPoint);
                                        };
                                        theArray[theArray.length - 1].push(closed);
                                        theArray[theArray.length - 1].push(operation);
                                        };
                                        };
                                      // by xbytor, thanks to him;
                                      function cTID (s) { return cTID[s] || cTID[s] = app.charIDToTypeID(s); };
                                      function sTID (s) { return sTID[s] || sTID[s] = app.stringIDToTypeID(s); };
                                      // reset;
                                      app.preferences.rulerUnits = originalRulerUnits;
                                      return theArray;
                                      };
                                      ////// create a path from collectPathInfoFromDesc2012-array //////
                                      function createPath2012(theArray, thePathsName) {
                                      var originalRulerUnits = app.preferences.rulerUnits;
                                      app.preferences.rulerUnits = Units.POINTS;
                                      // thanks to xbytor;
                                      cTID = function(s) { return app.charIDToTypeID(s); };
                                      sTID = function(s) { return app.stringIDToTypeID(s); };
                                      
                                      
                                          var desc1 = new ActionDescriptor();
                                          var ref1 = new ActionReference();
                                          ref1.putProperty(cTID('Path'), cTID('WrPt'));
                                          desc1.putReference(sTID('null'), ref1);
                                          var list1 = new ActionList();
                                      
                                      for (var m = 0; m < theArray.length; m++) {
                                        var thisSubPath = theArray[m];
                                      
                                          var desc2 = new ActionDescriptor();
                                          desc2.putEnumerated(sTID('shapeOperation'), sTID('shapeOperation'), thisSubPath[thisSubPath.length - 1]);
                                          var list2 = new ActionList();
                                          var desc3 = new ActionDescriptor();
                                          desc3.putBoolean(cTID('Clsp'), thisSubPath[thisSubPath.length - 2]);
                                          var list3 = new ActionList();
                                      
                                      for (var n = 0; n < thisSubPath.length - 2; n++) {
                                        var thisPoint = thisSubPath[n];
                                      
                                          var desc4 = new ActionDescriptor();
                                          var desc5 = new ActionDescriptor();
                                          desc5.putUnitDouble(cTID('Hrzn'), cTID('#Rlt'), thisPoint[0][0]);
                                          desc5.putUnitDouble(cTID('Vrtc'), cTID('#Rlt'), thisPoint[0][1]);
                                          desc4.putObject(cTID('Anch'), cTID('Pnt '), desc5);
                                          var desc6 = new ActionDescriptor();
                                          desc6.putUnitDouble(cTID('Hrzn'), cTID('#Rlt'), thisPoint[1][0]);
                                          desc6.putUnitDouble(cTID('Vrtc'), cTID('#Rlt'), thisPoint[1][1]);
                                          desc4.putObject(cTID('Fwd '), cTID('Pnt '), desc6);
                                          var desc7 = new ActionDescriptor();
                                          desc7.putUnitDouble(cTID('Hrzn'), cTID('#Rlt'), thisPoint[2][0]);
                                          desc7.putUnitDouble(cTID('Vrtc'), cTID('#Rlt'), thisPoint[2][1]);
                                          desc4.putObject(cTID('Bwd '), cTID('Pnt '), desc7);
                                          desc4.putBoolean(cTID('Smoo'), thisPoint[3]);
                                          list3.putObject(cTID('Pthp'), desc4);
                                      
                                        };
                                      
                                          desc3.putList(cTID('Pts '), list3);
                                          list2.putObject(cTID('Sbpl'), desc3);
                                          desc2.putList(cTID('SbpL'), list2);
                                          list1.putObject(cTID('PaCm'), desc2);
                                        };
                                      
                                          desc1.putList(cTID('T   '), list1);
                                          executeAction(cTID('setd'), desc1, DialogModes.NO);
                                      
                                      
                                      if (hasVectorMask() == false) {
                                      if (thePathsName != undefined) {app.activeDocument.pathItems[app.activeDocument.pathItems.length - 1].name = thePathsName};
                                      var myPathItem = app.activeDocument.pathItems[app.activeDocument.pathItems.length - 1];
                                      }
                                      else {
                                      if (thePathsName != undefined) {app.activeDocument.pathItems[app.activeDocument.pathItems.length - 2].name = thePathsName};
                                      var myPathItem = app.activeDocument.pathItems[app.activeDocument.pathItems.length - 2];
                                      };
                                      app.preferences.rulerUnits = originalRulerUnits;
                                      return myPathItem
                                      };
                                      // from »Flatten All Masks.jsx« by jeffrey tranberry;
                                      ///////////////////////////////////////////////////////////////////////////////
                                      // Function: hasVectorMask
                                      // Usage: see if there is a vector layer mask
                                      // Input: <none> Must have an open document
                                      // Return: true if there is a vector mask
                                      ///////////////////////////////////////////////////////////////////////////////
                                      function hasVectorMask() {
                                        var hasVectorMask = false;
                                        try {
                                        var ref = new ActionReference();
                                        var keyVectorMaskEnabled = app.stringIDToTypeID( 'vectorMask' );
                                        var keyKind = app.charIDToTypeID( 'Knd ' );
                                        ref.putEnumerated( app.charIDToTypeID( 'Path' ), app.charIDToTypeID( 'Ordn' ), keyVectorMaskEnabled );
                                        var desc = executeActionGet( ref );
                                        if ( desc.hasKey( keyKind ) ) {
                                        var kindValue = desc.getEnumerationValue( keyKind );
                                        if (kindValue == keyVectorMaskEnabled) {
                                        hasVectorMask = true;
                                        }
                                        }
                                        }catch(e) {
                                        hasVectorMask = false;
                                        }
                                        return hasVectorMask;
                                      };
                                      ////// check for identical pathpoints //////
                                      function checkForIdenticalPoints (array1, array2) {
                                      var theReturn = new Array;
                                      // the subpathitems;
                                      for (var m = 0; m < array1.length; m++) {
                                      var firstCheck = false;
                                      var thisSub = array1[m];
                                      var someReturn = compareSubPathWithPath (thisSub, array2);
                                      if (someReturn != undefined) {theReturn.push(someReturn)};
                                      ////// return subpathitem if ine point is idetical //////
                                      function compareSubPathWithPath (thisSub, array2) {
                                      // the other subpathitems;
                                      for (var n = 0; n < array2.length; n++) {
                                      var thisOtherSub = array2[n];
                                      // the points;
                                      for (var o = 0; o < thisSub.length - 2; o++) {
                                      var thisPoint = thisSub[o][0];
                                      // other point:
                                      for (var p = 0; p < thisOtherSub.length - 2; p++) {
                                      var otherPoint = thisOtherSub[p][0];
                                      // terminate if one identical pont is found;
                                      if (thisPoint[0] == otherPoint[0] && thisPoint[1] == otherPoint[1]) {return thisSub}
                                      }
                                      }
                                      }
                                      };
                                      ////////////////////////////////////
                                      };
                                      if (theReturn.length > 0) {return theReturn}
                                      else {return false}
                                      };
                                      
                                      
                                      • 18. Re: Add selection as add and intersect commands combined
                                        c.pfaffenbichler Community Member

                                        I hope you noticed the edited code in the last post.

                                         

                                        Anyway, if you were willing to change your procedure a bit one could get away with a one-stop-Script, I suppose.

                                        You’d have to switch to Quick Mask Mode after making the first Selection, then make the second Selection and after that run a new Script.

                                        • 19. Re: Add selection as add and intersect commands combined
                                          Monstrik Community Member

                                          Dear c.pfaffenbichler

                                          I appreciate your help so much. But Im forced to ask for more help from you... The problem is that i dont know how to use the script you wrote for me. As i said earlier your skills are way more advanced than mine. I meant i know nothing about scripting, i dont even know how to run a script.

                                          Other question arised is how should i call my selections so the script recognises the selections when the script is being run? Please find screenshots attached.. For example, i have these two selections: "Selection C" and "Selection A". (Let's assume Selection D doesnt exist. "Selection D" is what i want to accomplish. So, i have these two selections stored: A and C. How do i begin to use the script you wrote? To get the result D? Can you please attach some screenshots? Can you please give me step by step instructions?

                                          also, as i tried to explain earlier, the selection C will always be part of or with the selection's D boundaries (or the be clear - part of the selection A)


                                          Untitled-2.jpgUntitled-4.jpgUntitled-5.jpgUntitled-3.jpg

                                          • 20. Re: Add selection as add and intersect commands combined
                                            c.pfaffenbichler Community Member

                                            Paste the text into a new file in ExtendScript Toolkit (part of Photoshop’s installation, Applications/Utilities/Adobe Utilities/ExtendScript Toolkit … and save it as a jsx-file into Photoshop’s Presets/Scripts-folder.

                                            After restarting Photoshop the Script should be available under File > Scripts and can be assigned a Keyboard Shortcut directly, recorded into an Action, be used in a Configurator-Panel or started from ExtendScript Toolkit directly.

                                            • 21. Re: Add selection as add and intersect commands combined
                                              Monstrik Community Member

                                              Dear Christoph

                                              please tell me what am i doing wrong... (please check the second picture)

                                              first i load "selection A"

                                              I open ExtendScript ToolKit and click on start running the script

                                              I get this warning [waiting; press esc to abort...]

                                               

                                               

                                              (by the way, what did you mean by saying that second selection should be one contiguous area?)

                                               

                                              Untitled-7.jpgUntitled-5.jpg

                                              • 22. Re: Add selection as add and intersect commands combined
                                                c.pfaffenbichler Community Member

                                                Make a Selection.

                                                Run the Script (the newly amended one from post 17).

                                                Make another Selection.

                                                Run the Script again.

                                                • 23. Re: Add selection as add and intersect commands combined
                                                  Monstrik Community Member

                                                  Christoph when you say "make a selection" do you mean load selection?

                                                  i mean the selections are already made.. I just need to use them to get what i want... Please explain

                                                  • 24. Re: Add selection as add and intersect commands combined
                                                    c.pfaffenbichler Community Member

                                                    The Script works with Selections, so you need to load the Channels as such.

                                                    One could adapt the Script to work based on Channels right away, but in your original post you spoke of Selections.

                                                    • 25. Re: Add selection as add and intersect commands combined
                                                      Monstrik Community Member

                                                      Christoph You are a Magician...!!!  I dont know how you did it but it works!!! It really does...!!! Thank you very much!!!