Ahh... autoformatting... this should be easier to read... (sorry) def create_border(image, selection_type='rectangle', size=1): is_selection, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image) if is_selection: if size < 1: size = 1 if selection_type =='rectangle': pdb.gimp_rect_select(image, x1+size, y1+size, (x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, False, 0) elif selection_type == 'ellipse': pdb.gimp_ellipse_select(image, x1+size, y1+size, (x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, True, False, 0) else: gimp.message("Please make a selection...") def test_plugin(image, drawable): image.undo_group_start() # A rectangular selecion with default settings... create_border(image) # Ellipse with custom settings... Uncomment to activate #create_border(image, selection_type='ellipse', size=3) # Fill pdb.gimp_edit_fill(drawable, 0) pdb.gimp_selection_none(image) image.undo_group_end() On 09/24/2010 06:18 PM, Jerry Baker wrote: > Calculating a new selection from the current selection would be faster > (I think): > > def create_border(image, selection_type='rectangle', size=1): > is_selection, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image) > > if is_selection: > if size< 1: > size = 1 > if selection_type =='rectangle': > pdb.gimp_rect_select(image, x1+size, y1+size, > (x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, False, 0) > elif selection_type == 'ellipse': > pdb.gimp_ellipse_select(image, x1+size, y1+size, > (x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, True, False, 0) > else: > gimp.message("Please make a selection...") > > def test_plugin(image, drawable): > image.undo_group_start() > > create_border(image) # A rectangular selecion with default > settings... > #create_border(image, selection_type='ellipse', size=3) # Or > Ellipse with custom settings... > > # Fill > pdb.gimp_edit_fill(drawable, 0) > pdb.gimp_selection_none(image) > > image.undo_group_end() > > On 09/24/2010 10:19 AM, Ofnuts wrote: >> Hi, >> >> My code needs to do a one-pixel-wide selection, at distance "x" from the >> current selection. This looks a lot like a border selection except that >> the border selection creates at best a two-pixel wide ribbon and I only >> want one (but if I'm wrong, please tell me how to :-) >> >> So far my code goes like this: >> >> # Selects pixels that are between x and x+1 pixels from >> # the original selection. Bumping the selection by one >> # each time doesn't work, a small circle degenerates into >> # a square with rounded corners instead of a big circle. >> def select_ribbon(self,image,selection,dist): >> pdb.gimp_selection_load(selection) >> pdb.gimp_selection_grow(image,dist+1) >> outer=pdb.gimp_selection_save(image) >> pdb.gimp_selection_load(selection) >> pdb.gimp_selection_grow(image,dist) >> inner=pdb.gimp_selection_save(image) >> pdb.gimp_channel_combine_masks(outer,inner,CHANNEL_OP_SUBTRACT,0,0) >> pdb.gimp_selection_load(outer) >> image.remove_channel(outer) >> image.remove_channel(inner) >> >> That works, but can be slow (especially since it's at the core of a >> loop). Is there any better way? Or useless code to jettison? >> >> Next improvement is to create a 3-pixels selection and feather it one >> pixel. Anything to be wary of? >> >> -- >> Ofnuts >> >> _______________________________________________ >> Gimp-developer mailing list >> Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx >> https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer > _______________________________________________ > Gimp-developer mailing list > Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx > https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer _______________________________________________ Gimp-developer mailing list Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer