|
GimpChat Member |
|
Joined: May 16, 2010 Posts: 14709 Location: USA
|
cli345 wrote: Rod wrote: How do i insure the created image is my layer size? mahvin wrote: ...how we can get the result to convert to the layer size we decide to use... I've just added a "Dimensions" parameter: Choose "According to Layer". Here is the new code: cl_circ_prerelease : # $1 : center x-coordinate # $2 : center y-coordinate # $3 : radius # $4 : stroke width
fill. stroke(d)=cut($4-abs(d/2),0,1);stroke(sqrt((x-$1)^2+(y-$2)^2)-$3) n. 0,255
cl_innerCirc_prerelease :
xC=$1 # center x-coordinate yC=$2 # center y-coordinate radi=$3 # big circle radius wid=$4 # stroke width nb=$5 # number of small circles lvl=$6 # number of levels
if $lvl>0 angl={pi/$nb} sinu={sin($angl)} ra={$radi/(1+1/$sinu)} ray={$radi/(1+$sinu)} +fill. 0 [-1]x{$nb-1} foreach[1--1] { num=$> xA={$ray*cos(2*$num*$angl)} yA={$ray*sin(2*$num*$angl)} cl_circ_prerelease {$xC+$xA},{$yC+$yA},$ra,$wid cl_innerCirc_prerelease {$xC+$xA},{$yC+$yA},$ra,$wid,$nb,{$lvl-1} } fi
#@gui ____<b>Rendering</b> #------------------ #@gui Tangential Circles (prerelease): cl_tangentialCircle_prerelease, cl_tangentialCircle_prerelease(1) #@gui : note = note("<small>Warning: This is a slow filter.</small>") #@gui : sep = separator() #@gui : note = note("<b>Drawing:</b>") #@gui : Big Circle Radius = float(100, 10, 500) #@gui : Dimensions = choice(0, "According to Radius", "According to Layer") #@gui : Stroke Width = float(1,0.5,10) #@gui : Number of Small Circles = int(5, 2, 20) #@gui : Number of Levels = int(1, 1, 4) #@gui : sep = separator() #@gui : note = note("<b>Colors:</b>") #@gui : Background Color = color(255,255,255) #@gui : Foreground Color = color(0,0,0) #@gui : sep = separator() #@gui : note = note("<b>Effects:</b>") #@gui : Effect = choice(0, "None", "Transparent Background", "Strange Polygon", "Multicolored", "Rainbow", "Double", "Colored Tube", "Red-Yellow Halo", "Blue-Cyan Halo") #@gui : sep = separator() #@gui : note = note("<small>Note: The preview might be much more aliased than the final result and some effects ignore colors.</small>") #@gui : sep = separator() #@gui : note = note("<small>Author: <i>Claude Lion</i>. Latest Update: <i>2022/09/11</i>.</small>") #@gui : note = note("<small>It uses filters of David Tschumperlé and Rod/GimpChat and an algorithm of Reptorian.</small>")
cl_tangentialCircle_prerelease:
radi,dime,wid,nb,lvl,backR,backG,backB,foreR,foreG,foreB,effect=$*
grow=3 biggerRadi={$radi*$grow}
rectWid={if($dime,w,$biggerRadi)} rectHei={if($dime,h,$biggerRadi)} chanNumb={if($effect,4,3)} $rectWid,$rectHei,1,$chanNumb,255
local.
xC={w/2} # center x-coordinate yC={h/2} # center y-coordinate
if $effect==1 backR,backG,backB=$foreR,$foreG,$foreB elif $effect>=7 backR,backG,backB=255,255,255 foreR,foreG,foreB=0,0,0 fi
foreA=255 backA={if($effect==1,0,255)}
cl_circ_prerelease. $xC,$yC,$radi,$wid cl_innerCirc_prerelease. $xC,$yC,$radi,$wid,$nb,$lvl
blend screen,1
n. 0,1 if $effect<=1 fill. [i*$foreR+(1-i)*$backR,i*$foreG+(1-i)*$backG,i*$foreB+(1-i)*$backB,i*$foreA+(1-i)*$backA] elif $effect==2 fx_rodilius. 15,1,0,$nb,90,0,1,0,0 n. 0,1 fill. [i*$foreR+(1-i)*$backR,i*$foreG+(1-i)*$backG,i*$foreB+(1-i)*$backB,i*$foreA+(1-i)*$backA] n. 0,255 elif $effect==3 fx_curvature 10,0,100,0,0 fx_gradient2rgb 0,0,100,0,0 apply_curve 1,0,0,16,240,255,255 fx_smooth_antialias. 15,0,1,0,50,50 fx_smooth_antialias. 50,50,2.5,0,50,50 elif $effect==4 fx_dog 1.4,1.5,0,0,0 fx_gradient2rgb 0,0,100,0,0 apply_curve 1,0,0,64,192,255,255 fx_smooth_antialias. 15,0,1,0,50,50 fx_smooth_antialias. 50,50,2.5,0,50,50 elif $effect==5 dog. 1.4,1.5 n. 0,255 elif $effect==6 fx_dog. 1.4,1.5,0,0,0 apply_curve. 1,0,0,16,0,255,255 cut. 0,255 fx_distance. 0,2,1,0 negate. [-1] [-1] fx_decompose_channels 8,1,1,0 l. # inspired by emboss_image of Reptorian +apply_curve. 1,0,0,240,16,255,255 l. b. 2.5 gradient2rgb. 0 n. 0,255 [-1] rgb2hsv[-2,-1] split[-2,-1] c l[-3--1] +[-3] {315} %[-3] 360 done l[-6--4] +[-3] {135} %[-3] 360 done l[-3--1] a c hsv2rgb s c done l[-6--4] a c hsv2rgb s c done rm[^-6,-3] negate.. / 2 +. 128 blend grainmerge,1 done to_rgb blend grainmerge,1 done fx_smooth_antialias. 15,0,1,0,50,50 fx_smooth_antialias. 50,50,2.5,0,50,50 sharpen 300 elif $effect>=7 fill. [i*$foreR+(1-i)*$backR,i*$foreG+(1-i)*$backG,i*$foreB+(1-i)*$backB,i*$foreA+(1-i)*$backA] remove_opacity. split. c rm. rm.. +fx_morphological. 0,2,10,"1,0,1; 0,1,0; 1,0,1",0,0,0,0 +fx_morphological. 0,2,20,"1,0,1; 0,1,0; 1,0,1",0,0,0,0 if $effect==8 reverse[-3,-1] fi a c fi done mv[-1] 0
Thank You! I was able to create a 375x375 circle by multiplying the # levels by Big Circle Radius. 3x125 I set my layer width and height to 375 and ran the filter with levels at 3 and Big Circle Radius at 125 and got an image very quickly. Exactly the width and height of my layer. This computation cannot be correct however because i ran the filter with 3 levels and 500 Big Circle Radius on a 1500x1500 radius and got an error. So i am not sure why it was not allowing those parameters. Thanks for the update! Quote: *** Error in ./cl_tangentialCircle_prerelease/ *** Command 'local': [instance(0,0,0,0,0000000000000000,non-shared)] gmic<float32>::assign(): Failed to allocate memory (15.3 Mio) for image (1000,1000,1,4). For these settings cl_tangentialCircle_prerelease 100,1,1,10,3,0,0,0,0,85,0,2
_________________
Edmund Burke nailed it when he said, "The only thing necessary for the triumph of evil is for good men to do nothing."
|
|