Here's "A Select Zigzag" letting specifying wave-length, wave-height.
#!/usr/bin/env python
# Author: (Tin Tran)
# Created On: 2024.08.03
# My own grunty bot/script that will take select alternating diagonals
# to delete from top layer to reveal lower layer to create plaid-patterns.
# Spawned/Inspired by my http://plaid-patterns.com javascript plaid designer.
#
#
# License: Whatever GIMP's License is.
# Revisions:
# Rel 0.10: Initial Version
from gimpfu import *
import random
import math
import os
def select_zigzag(image,layer,wavelength,waveheight):
waveheight = waveheight/2; #only take half because we're dealing with math.sin
coords1 = [];
coords2 = [];
count = 0;
for x in range(0,layer.width+wavelength,wavelength/2):
if (count % 2 == 0):
y = -waveheight*4;
else:
y = -waveheight*2;
count += 1; #alternate zig and zag
coords1.append(x)
coords1.append(y)
coords2.append(x)
coords2.append(y+waveheight);
coords2r = []
for i in range(len(coords2)-1,-1,-2):
coords2r.append(coords2[i-1])
coords2r.append(coords2[i])
coords = coords1+coords2r;
pdb.gimp_selection_none(image)
for i in range(-waveheight*2,layer.height,waveheight*2):
for j in range(0,len(coords),2):
coords[j+1] += waveheight*2;
pdb.gimp_image_select_polygon(image,CHANNEL_OP_ADD,len(coords),coords)
register(
"python_fu_select_zigzag",
"description",
"longer description",
"author name",
"copyright name",
"2024.10.24",
"A Select Zigzag",
"RGB*", # Alternately use RGB, RGB*, GRAY*, INDEXED etc.
[
#INPUT BEGINS
(PF_IMAGE, "image", "Image", None),
(PF_DRAWABLE, "layer", "Drawable", None),
(PF_INT, "wavelength", "Wave-Length (pixels):",50),
(PF_INT, "waveheight", "Wave-Height (pixels):",25),
#INPUT ENDS
],
[],
select_zigzag,
menu="<Image>/Python-Fu")
main()
# Below is all the example input types for INPUTS for the plug-in which can be cut and pasted into #INPUT BEGINS section and edited to taste (found online years back that I didn't want to constantly look up)
# Since GIMP is free anyways, I thought it would be handy here for me to CUT and PASTE, CHANGE, USE.
# (PF_INT, "p0", "_INT:", 0), # PF_INT8, PF_INT16, PF_INT32 similar but no difference in Python.
# (PF_FLOAT, "p02", "_FLOAT:", 3.141),
# (PF_STRING, "p03", "_STRING:", "foo"), # alias PF_VALUE
# (PF_TEXT, "p04", "TEXT:", "bar"),
# # PF_VALUE
# # Pick one from set of choices
# (PF_OPTION,"p1", "OPTION:", 0, ["0th","1st","2nd"]), # initially 0th is choice
# (PF_RADIO, "p16", "RADIO:", 0, (("0th", 1),("1st",0))), # note bool indicates initial setting of buttons
# # PF_RADIO is usually called a radio button group.
# # SLIDER, ADJUSTMENT types require the extra parameter of the form (min, max, step).
# (PF_TOGGLE, "p2", "TOGGLE:", 1), # initially True, checked. Alias PF_BOOL
# # PF_TOGGLE is usually called a checkbox.
# (PF_SLIDER, "p3", "SLIDER:", 0, (0, 100, 10)),
# (PF_SPINNER, "p4", "SPINNER:", 21, (1, 1000, 50)), # alias PF_ADJUSTMENT
# # Pickers ie combo boxes ie choosers from lists of existing Gimp objects
# (PF_COLOR, "p14", "_COLOR:", (100, 21, 40) ), # extra param is RGB triple
# # PF_COLOUR is an alias by aussie PyGimp author lol
# (PF_IMAGE, "p15", "IMAGE:", None), # should be type gimp.image, but None works
# (PF_FONT, "p17", "FONT:", 0),
# (PF_FILE, "p18", "FILE:", 0),
# (PF_BRUSH, "p19", "BRUSH:", 0),
# (PF_PATTERN, "p20", "PATTERN:", 0),
# (PF_GRADIENT, "p21", "GRADIENT:", 0),
# (PF_PALETTE, "p22", "PALETTE:", 0),
# (PF_LAYER, "p23", "LAYER:", None),
# (PF_CHANNEL, "p24", "CHANNEL:", None), # ??? Usually empty, I don't know why.
# (PF_DRAWABLE, "p25", "DRAWABLE:", None),
# # Mostly undocumented, but work
# (PF_VECTORS, "p26", "VECTORS:", None),
# (PF_FILENAME, "p27", "FILENAME:", 0),
# (PF_DIRNAME, "p28", "DIRNAME:", 0)
# # PF_REGION might work but probably of little use. See gimpfu.py.