Sorting lines on colour (color for some)
BNig
bernd.niggemann at uni-wh.de
Fri Sep 19 08:05:42 EDT 2014
Hi Mike,
I like your idea to use styledText very much. It turns out that for the
backgroundColor of a line it is not too bad to handle.
-------------------------------------------
local sCounter = 0
local sStyles = ""
on mouseUp
put 0 into sCounter
put the styledText of field "fData" into sStyles
sort lines of field "fData" numeric ascending by myColor(each)
end mouseUp
function myColor
add 1 to sCounter
put sStyles[sCounter]["style"]["backgroundColor"] into tRGB
if tRGB = "" then -- no backgroundColor
return 0
end if
return item 1 of tRGB -- test for redness
-- or do anything you want with R,G,B
end myColor
------------------------------------------------
the real problem starts when you have the RGB value. What do you want to
sort if it is a generic handler for all sorts of colors (e.g. any line of
the colorNames)
I made a version where I use Raney's conversion from RGB to HSV, then you
can sort by Color (H=Hue), Saturation(S) and "Blackness" (V=Value).
But still it is not what one expects. It sorts alright but it all depends on
how you want your colors sorted.
That makes a sort by backgroundColor (RGB value) less useful.
Kind regards
Bernd
Scott Raney's RGB to HSV is in stack revColorChooser which on my Mac is in
Livecode bundle
Contents->Tools->Toolset-> revcolorchooser.rev
in the script of group "HSV", there is also the other way around HSV to RGB.
here is RGB to HSV
-------------------------------------------
function RGBtoHSV r, g, b
local maxv, minv, diff, s, rc, gc, bc, h
set the numberFormat to "0.###############"
put r / 255 into r
put g / 255 into g
put b / 255 into b
put max(r,g,b) into maxv
put min(r,g,b) into minv
put maxv - minv into diff
if maxv <> 0 and diff <> 0 then
put diff / maxv into s
put (maxv - r) / diff into rc
put (maxv - g) / diff into gc
put (maxv - b) / diff into bc
if r = maxv then put bc - gc into h
else if g = maxv then put 2 + rc - bc into h
else if b = maxv then put 4 + gc - rc into h
multiply h by 60
if h < 0 then
add 360 to h
end if
else
put 0 into s
put 0 into h
end if
return round(h),round(s * 100),round(maxv * 100)
end RGBtoHSV
--------------------------------------
--
View this message in context: http://runtime-revolution.278305.n4.nabble.com/Sorting-lines-on-colour-color-for-some-tp4683418p4683474.html
Sent from the Revolution - User mailing list archive at Nabble.com.
More information about the use-livecode
mailing list