Fantastic sample! Just added to the IM samples.
If you need graphics speed I suggest you do use OpenGL:
http://luagl.sourceforge.net/
Thanks,
Scuri
On Mon, Jan 13, 2014 at 8:36 PM, Victor Bombi <[email protected]> wrote:
> Hello,
>
> this is a sample i have made for testing cdCanvas and image.
> You only have to set the path for your image file.
>
> I am mailing this for two reasons:
> 1- I would like to have a sample like this one for learning some im and cd
> functions that were not in the examples folder
> 2- I would like to know if something could be done better (a faster
> alternative...)
>
> -------------------------------------Sample begins
> require"imlua"
> require"cdlua"
> require"cdluaim"
> require"iuplua"
> require"iupluacd"
> require"imlua_process"
>
> filename =
>
> [[C:\LUA\im-3.8.2_Win32_dllw4_lib\im-3.8.2_Examples\im\html\examples\flower.jpg]]
> --set your file
>
> anchosc = 500 -- window width
> heightfac=math.sqrt(3)*0.5;
>
> image=im.FileImageLoad(filename)
> cnv = iup.canvas{rastersize = anchosc .."x".. anchosc*heightfac, border =
> "NO"}
>
> function cnv:map_cb() -- the CD canvas can only be created when the
> IUP canvas is mapped
> self.canvas = cd.CreateCanvas(cd.IUP, self)
> self.canvas:Background(cd.BLACK)
> end
>
> mouseX,mouseY=0,0
> nostatus=(" "):rep(10)
> function cnv:motion_cb(x,y,status)
> if status == nostatus then
> mouseX = x
> mouseY = y
> iup.Update(cnv)
> end
> end
>
> function EQTriangle(can,len,mode)
> mode = mode or cd.FILL
> can:Begin(mode)
> can:Vertex(0,0)
> can:Vertex(len,0)
> can:Vertex(len*0.5,0.5*len*math.sqrt(3))
> can:End()
> end
>
> function clip(val,mini,maxi)
> return math.max(mini,math.min(val,maxi))
> end
> function linearmap(v,s,e,ds,de)
> return ((de-ds)*(v-s)/(e-s)) + ds
> end
> function imResize(im1,w,h)
> local im2 = im.ImageCreateBased(im1,w,h)
> im.ProcessResize(im1,im2,3)
> return im2
> end
> function MaskTriang(img,size)
> local im2 = img:Clone()
> im2:AddAlpha()
> local imcv = im2:cdCreateCanvas()
> EQTriangle(imcv,size,cd.CLIP)
> imcv:Clip(cd.CLIPPOLYGON)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
> imcv:Kill()
> return im2
> end
> function Teselate(img,size)
> local im2 = im.ImageCreateBased(img,size*2,size*2)
> local imcv = im2:cdCreateCanvas()
> --local ident = imcv:GetTransform()
> --print("imcv:GetTransformation",imcv.GetTransform,ident)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:TransformTranslate(1.5*size, size*0.5*math.sqrt(3))
> imcv:TransformRotate(120)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:Transform({1,0,0,1,0,0}) --reset identity
> imcv:TransformTranslate(1.5*size, size*0.5*math.sqrt(3))
> imcv:TransformRotate(-120)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:TransformScale(1,-1)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:Kill()
> img:Destroy()
> return im2
> end
> function EndTeselate(img,size)
> local im2 = im.ImageCreateBased(img,size*2,size*2)
> local imcv = im2:cdCreateCanvas()
>
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:TransformTranslate(1.5*size, size*0.5*math.sqrt(3))
> imcv:TransformRotate(-120)
> imcv:TransformScale(1,-1)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:Transform({1,0,0,1,0,0}) --reset identity
> imcv:TransformRotate(120)
> imcv:TransformScale(1,-1)
> img:cdCanvasPutImageRect(imcv, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imcv:Kill()
> img:Destroy()
> return im2
> end
>
> function cnv:action()
>
> local width = anchosc
> local lado = clip(mouseX,10,width)
>
> self.canvas:Activate()
>
> local size = lado
> local imm = imResize(image,size,size)
> local im2 = MaskTriang(imm,size)
> while size < width do
> im2 = Teselate(im2,size)
> size = size * 2
> end
> im2 = EndTeselate(im2,size)
> im2:cdCanvasPutImageRect(self.canvas, 0, 0, 0, 0, 0, 0, 0, 0)
>
> imm:Destroy()
> im2:Destroy()
> end
>
> dlg = iup.dialog{cnv}
>
> function dlg:close_cb()
> image:Destroy()
> cnv.canvas:Kill()
> self:destroy()
> return iup.IGNORE -- because we destroy the dialog
> end
>
> dlg:show()
> iup.MainLoop()
> -------------------------Sample ends
>
> Best Regards
> victor bombi
>
>
>
>
> ------------------------------------------------------------------------------
> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> Critical Workloads, Development Environments & Everything In Between.
> Get a Quote or Start a Free Trial Today.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> _______________________________________________
> Iup-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users