|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
Objectcommon:Generic
common:Coloring
common:DirectColoring
reb:REB_ImageTrapsColoring
class
An Orbit Traps variant with the addition of trapped image import.
The formula provides for the import of images which are trapped according to
the trap shape, trap mode and trap coloring used. Internally the the regular
trap coloring and the image trap coloring are treated as separate layers which
can be merged by the usual merge options. The image import plugin is a ColorTrap
type, and any other ColorTrap type can be used in its slot.
class REB_ImageTrapsColoring(common.ulb:DirectColoring) {
; An Orbit Traps variant with the addition of trapped image import.
; <p>
; The formula provides for the import of images which are trapped according to
; the trap shape, trap mode and trap coloring used. Internally the the regular
; trap coloring and the image trap coloring are treated as separate layers which
; can be merged by the usual merge options. The image import plugin is a ColorTrap
; type, and any other ColorTrap type can be used in its slot.
$define debug
public:
import "common.ulb"
import "dmj5.ulb"
; constructor
func REB_ImageTrapsColoring(Generic pparent)
DirectColoring.DirectColoring(pparent)
m_TrapSelect = new @f_trapselect(this)
fTransform = new @transform(this)
m_TrapShape = new @f_trapshape(this)
m_ImageTrapMode = new @f_trapmode(this)
fTransfer = new @transfer(this)
fDTransfer = new @dtransfer(this)
m_ImageTrapColoring = new @f_trapcoloring(this)
m_TrapShape.SetThreshold(@p_threshold)
m_ImageTrapMode.SetThreshold(@p_threshold)
if @f_trapcolor != ColorTrapNoColor
float athresh = @p_athreshold+0.001
m_ImageTrapMode.SetAThreshold(athresh)
else
m_ImageTrapMode.SetAThreshold(@p_athreshold)
endif
m_TrapTexture = new @f_traptexture(this)
m_MergeColor = new @f_colormerge(this)
m_TrapColor = new @f_trapcolor(this)
m_img = new @f_image(0)
m_empty = m_img.GetEmpty()
endfunc
; Initialize the coloring formula
func Init(complex pz, complex ppixel)
DirectColoring.Init(pz,ppixel)
m_TrapSelectSequence = m_TrapSelect.InitDefault()
fTransform.init(pz)
fTransfer.init(pz)
m_ImageTrapMode.Init(pz)
m_TrapShape.Init(pz)
m_TrapTexture.Init(pz)
m_TrapColor.Init(pz)
endfunc
; call for each iterated point
func Iterate(complex pz)
DirectColoring.Iterate(pz)
m_TrapSelectSequence = m_TrapSelect.Iterate(m_TrapSelectSequence)
if ((@f_trapselect == DMJ_TrapSelect && m_TrapSelectSequence > 0.5) \
|| m_TrapSelectSequence > @p_trapselectthreshold)
complex m_zr = fTransform.Iterate(pz)
float pdistance = m_TrapShape.iterate(m_zr)
complex pdcomplex = 0
if @v_imagetraps >= 103
pdcomplex = m_TrapShape.GetTransformedPoint()
if @dtype == "Manhattan"
pdistance = abs(real(m_zr-pdcomplex))^real(@mp) + \
abs(imag(m_zr-pdcomplex))^imag(@mp)
elseif @dtype == "Bray Curtis"
pdistance = pdistance*(abs(real(m_zr-pdcomplex)) + abs(imag(m_zr-pdcomplex)))/ \
((abs(real(m_zr+pdcomplex)) + abs(imag(m_zr+pdcomplex))))
elseif @dtype == "Canberra"
pdistance = pdistance*abs(real(m_zr-pdcomplex))/(abs(real(m_zr)) + abs(real(pdcomplex))) + \
abs(imag(m_zr-pdcomplex))/(abs(imag(m_zr)) + abs(imag(pdcomplex)))
elseif @dtype == "Minkovsky"
pdistance = (abs(real(m_zr-pdcomplex))^@ex + \
abs(imag(m_zr-pdcomplex))^@ex)^(1/@ex)
elseif @dtype == "Chebychev"
pdistance = abs(real(m_zr-pdcomplex))
if pdistance < abs(imag(m_zr-pdcomplex))
pdistance = abs(imag(m_zr-pdcomplex))
endif
endif
endif
complex tx = m_TrapShape.GetTransformedPoint()
if @shapeflavor == 1
pdistance = pdistance + cabs(tx)
endif
fdTransfer.SetTransformed(tx)
fdTransfer.SetUnTransformed(m_zr)
pdistance = fTransfer.Iterate(pdistance)
pdistance = fdTransfer.Iterate(pdistance)
if @v_imagetraps < 101
m_img = new @f_image(0)
m_empty = m_img.GetEmpty()
endif
color pcolor = @colorempty
if @v_imagetraps >= 101
if @f_trapcolor == ColorTrapNoColor
m_empty = true
else
pcolor = m_TrapColor.Iterate(m_zr)
m_empty = false
endif
else
if !m_empty
complex m_zi = (0,1)^(@iangle/90.0)
complex m_zs = (0,1)^(@sangle/90.0)
complex pzrs = pz
; offset
if !@itile
pzrs = pzrs+@ioffset
endif
; aspect ratio
pzrs = real(pzrs) + flip(imag(pzrs)*@iaspect)
; rotation
pzrs = pzrs*m_zi
; skew
pzrs = real(pzrs)*m_zs + flip(imag(pzrs))
float width = m_img.getWidth()
float height = m_img.getHeight()
if @itile
pzrs = (pzrs+#width/2+flip(#height/2))*@scale*#width
complex c = @adjx-2*((real(pzrs) % (width-1))/width) + \
flip(@adjy-2*((imag(pzrs) % (height-1))/height))
pcolor = m_img.getColor(c)
else
pcolor = m_img.getColor(pzrs*@scale)
endif
else
pcolor = @colorempty
endif
endif
float ptexture = 0
if !@p_textureposttransform
; ptexture = m_TrapTexture.Iterate(m_zr)
ptexture = m_TrapTexture.Iterate(pz)
if @texflavor == 1
ptexture = cabs(m_trapTexture.GetTransformedPoint())
elseif @texflavor == 2
ptexture = ptexture + cabs(m_trapTexture.GetTransformedPoint())
endif
ptexture = ptexture*@p_texturestrength
else
ptexture = m_TrapShape.GetTextureValue()
ptexture = ptexture + m_TrapTexture.Iterate(tx)
ptexture = (ptexture + m_TrapTexture.GetTextureValue()) * @p_texturestrength
endif
if @weighttodist && (@f_traptexture != DMJ_TrapShapeFlat)
ptexture = ptexture/(@dweight + 1/(1e-10+pdistance^@dpower))
endif
if @weighttothresh && (@f_traptexture != DMJ_TrapShapeFlat)
ptexture = ptexture*((@p_Threshold-pdistance)/@p_Threshold)^@tpower
if ptexture < 0
ptexture = 0
endif
endif
if !fTransform.IsSolid()
m_ImageTrapMode.Iterate(m_zr, tx, pdistance,ptexture,pcolor)
else
m_ImageTrapMode.IterateSilent()
endif
else
fTransform.IterateSilent()
m_TrapShape.IterateSilent()
fTransfer.IterateSilent()
fdTransfer.IterateSilent()
m_ImageTrapMode.IterateSilent()
m_TrapTexture.IterateSilent()
endif
endfunc
; call in the final section of the ucl to get final coloring results.
color func Result(complex pz)
m_ImageTrapMode.Result()
color final_color = m_ImageTrapColoring.CResult(m_ImageTrapMode)
if @v_imagetraps >= 102 && @v_imageTraps < 105
if @ahue
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
hue(final_color))
elseif @alum
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
lum(final_color))
elseif @asat
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
sat(final_color))
endif
endif
if @v_imageTraps >= 105
if @ahue
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
hue(final_color)*alpha(final_color/6))
endif
if @alum
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
lum(final_color)*alpha(final_color))
endif
if @asat
final_color = hsla(hue(final_color), sat(final_color), lum(final_color), \
sat(final_color)*alpha(final_color))
endif
endif
color merge_color = gradient(m_ImageTrapColoring.Result(m_ImageTrapMode))
m_Solid = @usesolid && m_ImageTrapMode.IsSolid()
float opacity = 0
color temp = rgba(0,0,0,0)
if @nmerge == 1 || m_empty
temp = merge_color
merge_color = final_color
final_color = temp
endif
if !m_empty
opacity = @opacity
else
opacity = 1
endif
color rcolor = m_MergeColor.FullMerge(merge_color, final_color, opacity)
if @v_imageTraps >= 105
float br = (0.5-@p_bright)*2
int sign = 0
if br < 0
sign = -1
else
sign = 1
endif
br = br^2*sign
float cr = (@p_contrast-0.5)*2
if cr < 0
sign = -1
else
sign = 1
endif
cr = cr^2*sign+1
float st = (0.5-@p_sat)*2
if st < 0
sign = -1
else
sign = 1
endif
st = st^2*sign*2
float hu = @p_hue*6
float rd = red(rcolor)-br
float gr = green(rcolor)-br
float bl = blue(rcolor)-br
if rd > 1
rd = 1
endif
if gr > 1
gr = 1
endif
if bl > 1
bl = 1
endif
if rd < 0
rd = 0
endif
if gr < 0
gr = 0
endif
if bl < 0
bl = 0
endif
rcolor = rgba(rd,gr,bl,alpha(rcolor))
rd = red(rcolor)^cr
gr = green(rcolor)^cr
bl = blue(rcolor)^cr
rcolor = rgba(rd,gr,bl,alpha(rcolor))
float satval = sat(rcolor)-st
if satval > 1
satval = 1
endif
if satval < 0
satval = 0
endif
rcolor = hsla(hue(rcolor), satval, lum(rcolor), alpha(rcolor))
float hueval = (hue(rcolor)+hu) % 6
rcolor = hsla(hueval, sat(rcolor), lum(rcolor), alpha(rcolor))
endif
if @p_poster
float rd = floor(red(rcolor)*@p_chan)/@p_chan + 0.5/@p_chan
float gr = floor(green(rcolor)*@p_chan)/@p_chan + 0.5/@p_chan
float bl = floor(blue(rcolor)*@p_chan)/@p_chan + 0.5/@p_chan
rcolor = rgba(rd,gr,bl,alpha(rcolor))
endif
if @p_gray
float gry = 0.3 * red(rcolor)+ 0.59 * green(rcolor) + 0.11 * blue(rcolor)
rcolor = rgba(gry,gry,gry,alpha(rcolor))
endif
if @p_solar
float rd = red(rcolor)
float gr = green(rcolor)
float bl = blue(rcolor)
if rd > @p_thresh
rd = 1-rd
endif
if gr > @p_thresh
gr = 1-gr
endif
if bl > @p_thresh
bl = 1-bl
endif
rcolor = rgba(rd,gr,bl,alpha(rcolor))
endif
if @p_bw
float gry = 0.3 * red(rcolor)+ 0.59 * green(rcolor) + 0.11 * blue(rcolor)
if gry < @p_bwt
rcolor = rgba(0,0,0,alpha(rcolor))
else
rcolor = rgba(1,1,1,alpha(rcolor))
endif
endif
return rcolor
endfunc
; Is the coloring solid? - used by the coloring ucl.
bool func IsSolid()
return m_Solid
endfunc
protected:
Generator m_TrapSelect
TrapShape m_TrapShape
UserTransform fTransform
Transfer fTransfer
TransferDistanceVariants fDTransfer
ImageTrapMode m_ImageTrapMode
ImageTrapColoring m_ImageTrapColoring
TrapShape m_TrapTexture
ImageImport m_img
ColorTrap m_TrapColor
DefaultColorMerge m_MergeColor
int m_image_width
int m_image_height
float m_ratio
bool m_empty
float m_TrapSelectSequence
default:
title = "Image Traps"
int param v_imagetraps
caption = "Version (Image Traps)"
default = 105
hint = "This version parameter is used to detect when a change has been made to the formula that is incompatible with the previous version. When that happens, this field will reflect the old version number to alert you to the fact that an alternate rendering is being used."
visible = @v_imagetraps < 105
endparam
heading
text = "This coloring formula combines classical orbit traps with color \
objects, including images."
endheading
float param version
caption = "version parameter"
default = 1.0
visible = false
endparam
heading
caption = "Trap Parameters"
endheading
Generator param f_trapselect
caption = "Trap Iteration"
default = DMJ_TrapSelect
expanded = false
endparam
float param p_trapselectthreshold
caption = "Threshold"
default = 0.5
hint = "When using a Generator other than a TrapSelect type, values could range anywhere from 0 to 1. This threshold sets which values will be interpreted as 'do not trap' and which will be interpreted as 'trap'."
visible = (@f_trapselect != DMJ_TrapSelect)
endparam
UserTransform param transform
caption = "Trap Position"
default = TrapTransformMod
expanded = false
hint = "Transforms the orbit values from the fractal formula before they \
are passed to the trap shape."
endparam
TrapShape param f_trapshape
caption = "Trap Shape"
default = REB_TrapShapeBifolium
endparam
param shapeflavor
caption = "Shape flavor"
default = 0
enum = "flavor 1" "flavor 2"
endparam
param dtype
caption = "Distance metric"
default = 3
enum = "Bray Curtis" "Canberra" "Chebychev" "Euclidian" \
"Manhattan" "Minkovsky"
visible = @v_imagetraps >= 103
endparam
complex param mp
caption = "Manhattan power"
default = (1,1)
visible = @v_imagetraps >= 103 && @dtype == "Manhattan"
endparam
float param ex
caption = "Minkovsky param"
default = 0.5
visible = @v_imagetraps >= 103 && @dtype == "Minkovsky"
endparam
Transfer param transfer
caption = "Trap Transfer"
expanded = false
default = TrapTransfer
hint = "Provides additional options to scale and transform the distance \
that the trap shape returns."
endparam
TransferDistanceVariants param dtransfer
caption = "Custom Transfer"
expanded = false
default = TransferDistanceVariants
hint = "Provides additional options to scale and transform the distance \
that the trap shape returns."
endparam
ImageTrapMode param f_trapmode
caption = "Trap Mode"
default = ImageTrapModeClosest
endparam
float param p_threshold
caption = "Trap Threshold"
default = 0.25
hint = "This is the overall size or thickness of the trap area. (Some trap modes may not use the threshold value.)"
visible = (@f_trapmode == ImageTrapModeWithThreshold)
endparam
float param p_athreshold
caption = "Alpha Threshold"
default = 0.0
hint = "This is the overall size or thickness of the trap area. (Some trap modes may not use the threshold value.)"
visible = (@f_trapmode == ImageTrapModeWithThreshold)
endparam
bool param usesolid
caption = "Use Solid Color"
default = false
endparam
TrapShape param f_traptexture
caption = "Trap Texture"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change the shape of the trap but may change its coloring."
endparam
bool param p_textureposttransform
caption = "Use Transformed Coordinate"
default = false
hint = "If checked, texturing will be based on the final transformed coordinate used in the trap shape (i.e. it will follow the trap shape, rather than being separate from it)."
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
bool param weighttodist
caption = "Weight by Distance"
default = false
visible = !@weighttothresh && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
bool param weighttothresh
caption = "Weight by Threshold"
default = false
visible = !@weighttodist && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
float param p_texturestrength
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers will increase the effect of the texture. A value of 0 will remove the effects of the texture."
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
float param dweight
caption = "Distance weight"
default = 1.0
visible = @weighttodist && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
float param dpower
caption = "Distance power"
default = 1.0
visible = @weighttodist && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
float param tpower
caption = "Threshold power"
default = 1.0
visible = @weighttothresh && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
param texflavor
caption = "Texture flavor"
default = 0
enum = "flavor 1" "flavor 2" "flavor 3"
visible = (@f_traptexture != DMJ_TrapShapeFlat)&& !@p_textureposttransform
endparam
ImageTrapColoring param f_trapcoloring
caption = "Trap Color Mode"
default = ImageTrapColoringDistance
endparam
heading
caption = "Images and Colorings"
endheading
ColorTrap param f_trapcolor
caption = "Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @v_imagetraps >= 101
endparam
ImageImport param f_image
caption = "Image"
default = ImageImport
visible = @v_imagetraps < 101
endparam
float param scale
caption = "Image scale"
default = 1
min = 0
hint = "Changes the scale of the image."
visible = @v_imagetraps < 101
endparam
float param adjx
caption = "Tile adj x"
default = 0.99
min = 0.9
max = 1.1
visible = @v_imagetraps < 101
endparam
float param adjy
caption = "Tile adj y"
default = 0.999
min = 0.9
max = 1.1
visible = @v_imagetraps < 101
endparam
complex param ioffset
caption = "Image offset"
default = (0,0)
visible = !@itile && @v_imagetraps < 101
endparam
float param iaspect
caption = "Image aspect"
default = 1.0
visible = @v_imagetraps < 101
endparam
float param iangle
caption = "Image rotation"
default = 0
hint = "Rotates the image"
visible = @v_imagetraps < 101
endparam
float param sangle
caption = "Image skew"
default = 0
hint = "Skews the image"
visible = @v_imagetraps < 101
endparam
bool param itile
caption = "Tile the image"
default = false
visible = @v_imagetraps < 101
endparam
color param colorempty
caption = "No Image Color"
default = rgba(1,1,1,0)
visible = @f_trapcolor == ColorTrapNoColor
endparam
heading
caption = "Color Merging"
endheading
DefaultColorMerge param f_colormerge
caption = "Color Merge"
default = DefaultColorMerge
endparam
param nmerge
caption = "Merge order"
default = 0
enum = "Image on Top" "Image on Bottom"
endparam
float param opacity
caption = "Merge Opacity"
default = 1.0
endparam
heading
text = "Make image transparent by: "
visible = @v_imagetraps >= 102 && @f_trapcolor != ColorTrapNoColor
endheading
bool param ahue
caption = "Hue value"
default = false
visible = ((@v_imagetraps >= 102 && @v_imagetraps < 105 && !@alum && !@asat) || \
@v_imagetraps >= 105) && @f_trapcolor != ColorTrapNoColor
endparam
bool param alum
caption = "Luminance value"
default = false
visible = ((@v_imagetraps >= 102 && @v_imagetraps < 105 && !@ahue && !@asat) || \
@v_imagetraps >= 105) && @f_trapcolor != ColorTrapNoColor
endparam
bool param asat
caption = "Saturation value"
default = false
visible = ((@v_imagetraps >= 102 && @v_imagetraps < 105 && !@alum && !@ahue) || \
@v_imagetraps >= 105) && @f_trapcolor != ColorTrapNoColor
endparam
heading
caption = "Special Effects"
endheading
float param p_bright
caption = "Brightness"
default = 0.5
min = 0
max = 1
visible = @v_imagetraps >= 105
endparam
float param p_contrast
caption = "Contrast"
default = 0.5
min = 0
max = 1
visible = @v_imagetraps >= 105
endparam
float param p_sat
caption = "Saturation"
default = 0.5
min = 0
max = 1
visible = @v_imagetraps >= 105
endparam
float param p_hue
caption = "Hue"
default = 0.0
min = 0
max = 1
visible = @v_imagetraps >= 105
endparam
bool param p_gray
caption = "Grayscale"
default = false
endparam
bool param p_solar
caption = "Solarize"
default = false
endparam
float param p_thresh
caption = "Threshold"
default = 0.5
visible = @p_solar
endparam
bool param p_poster
caption = "Posterize"
default = false
endparam
int param p_chan
caption = "Colors per channel"
default = 4
min = 2
visible = @p_poster
endparam
bool param p_bw
caption = "Black and White"
default = false
endparam
float param p_bwt
caption = "Threshold"
default = 0.5
min = 0
max = 1
visible = @p_bw
endparam
}
| Constructor Summary | |
|---|---|
REB_ImageTrapsColoring()
|
|
REB_ImageTrapsColoring(Generic pparent)
constructor |
|
| Method Summary | |
|---|---|
void |
Init(complex pz,
complex ppixel)
Initialize the coloring formula |
boolean |
IsSolid()
Is the coloring solid? - used by the coloring ucl. |
void |
Iterate(complex pz)
call for each iterated point |
color |
Result(complex pz)
call in the final section of the ucl to get final coloring results. |
| Methods inherited from class common:Coloring |
|---|
GetPixel, IsGradient |
| Methods inherited from class common:Generic |
|---|
GetParent |
| Methods inherited from class Object |
|---|
|
| Constructor Detail |
|---|
public REB_ImageTrapsColoring(Generic pparent)
public REB_ImageTrapsColoring()
| Method Detail |
|---|
public void Init(complex pz,
complex ppixel)
Init in class DirectColoringpz - first value for the sequence; for a normal coloring formula, this will be #zppixel - seed value for the sequence; for a normal coloring formula, this will be #pixelpublic void Iterate(complex pz)
Iterate in class DirectColoringpz - next value in the sequence; corresponds to #z in a coloring formulapublic color Result(complex pz)
Result in class DirectColoringpublic boolean IsSolid()
IsSolid in class DirectColoring
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||