Sending Empty Params, along with a comma delimited value (RGB in this case)

Sannyasin Brahmanathaswami brahma at hindu.org
Tue Oct 18 03:55:54 EDT 2016


Given this command + function (see below) where

a)  you want to trigger it with "send" or "dispatch"
b) you only want to pass 1, or perhaps 2 or 3 values to the params, and these are RGB values which are *also* comma separated (therein lies the problem)

How can you pass

someEmptyParams ,,,,

along with an RGB value?

use case:

I would like to tweak gradients, run time… but not necessarily all gradient props.
The algorithm here (perhaps there is a completely different/better approach) is to set some defaults and if e.g I just pass "red" then we get a radial gradient with a white center and a red exterior.

So I would like to be able to just do something like

send "setRamp ("255,0,0")  to grc "gradientBkgnd"   # which has a behavior

and let the gradient take all the other values as defaults. Of course I presume we can't expect the command to magically know that the singular param you are sending should fill the spot for the 4th parameter.

So, I tried this

send "setRamp ,,,,red,,"  # which of course fails because ramp second color must be an RGB value

this

send "setRamp ,,," & "255,0,0" & ",,," to grc colorMeditationBkgnd # also fails
# Because the RGB values are comma separated also and return params like this:

setRamp "","","","255","0","0","","",""

HQ sent me a solution but requires explicitly declaring all the empty params in advance

put "" into pStart
put "" into pEnd
put "" in pColor1 # defaults to white-center
put "255,0,0" into pColor2
put  "" into pAlpha1
put "" into pAlpha2

send " setRamp pStart,pEnd,pColor1,pColor2,pAlpha1,pAlpha2"  to grc "gradientBkgnd" # which has the behavior below

But I would like to find a way to not have to declare those empty params when most if the time I just want to send 1 value over to pColor2

Any ideas? I guess this conundrum has two possible parts

1) constructing   a string for the send command with multiple params where some of the values are also comma delimited.
2) some magic to a pass a single declared value over to the command function as if it were the #4 parameter  in a way that will leave all the others empty.

command setRamp pStart,pEnd,pColor1,pColor2,pAlpha1,pAlpha2
                   set the fillgradient["ramp"] of me to     setfillRamp(pStart,pEnd,pColor1,pColor2,pAlpha1,pAlpha2)
end setRamp

# defaults are declared as constants at the top of the behavior:

function setFillRamp pStartPosition,pEndPosition,pColor1, pColor2,pAlpha1,pAlpha2
          if pStartPosition is empty then put kDefaultStart into pStartPosition
          if pEndPosition is empty then put kDefaultEnd into pEndPosition
          if pColor1 is empty then put kPureWhite into pColor1
          if pColor2 is empty then put kPureBlack into pColor2
          if pAlpha1 is empty then put kDefaultOpacity into pAlpha1
          if pAlpha2 is empty then put kDefaultOpacity into pAlpha2
          put(pStartPosition & comma & pColor1 & comma & pAlpha1) into tGradientRamp
          put cr &(pEndPosition & comma & pColor2 & comma & pAlpha2) after tGradientRamp
          return tGradientRamp
end setFillRamp

Possibly we need yet another interim function to set up the empty defaults first.

if the number of params is 1 then

put "" into pStart
put "" into pEnd
put "" in pColor1 # defaults to white-center
put (word 2 of the params) into pColor2
put  "" into pAlpha1
put "" into pAlpha2

end if

but it gets tricky if you start sending say, 2-3 params… probably easiest to find a way to construct the string where internal params include comma delimited RGB values.



BR



More information about the use-livecode mailing list