NB. OpGLN_Bezier1.ijs 2014/2/1 by T.N. NB. Bezier line freely changed with mouse action NB. mouse down, move, then mouse up => new Bezier line will be drawn NB. referred from OpenGL_curve.ijs in [lab] [demo] [opengl symple] wr =: 1!:2&2 require 'gl3' require 'gl2' A=: noun define pc a closeok; xywh 0 0 200 200;cc g isigraph ws_clipchildren ws_clipsiblings rightmove bottommove; pas 0 0; rem form end; ) run=: a_run a_run=: verb define wd A glaRC'' R =: 0 0 0 N =: 30 CTRLP =: _4 _4 0 _2 4 0 2 _4 0 4 4 0 wd 'pshow;ptop' ) a_g_char =: verb define R =: 360 | R + 2 * 'xyz' = 0 { sysdata R =: 360 | R - 2 * 'XYZ' = 0 { sysdata N =: N + 2 * 'N' = 0 { sysdata N =: N - 2 * 'n' = 0 { sysdata glpaintx'' ) a_g_size=:verb define wh=.glqwh'' glViewport 0 0,wh glMatrixMode GL_PROJECTION glLoadIdentity'' if. i{CTRLC glVertex i{CTRLV glEnd'' i =. i + 1 end. NB. glColor 1 0 0 1 NB. glBegin GL_POINTS NB. glVertex 4 3$ctrlpoints NB. glEnd'' ) NB. mouse action =============================== a_g_mbldown=: 3 : 0 d=. ". sysdata x=.(0{d) * 1000 % (2{d) y=.(1{d) * 1000 % (3{d) X0 =: _5 + x % 100 NB. mouse start coord. X Y0 =: _5 + y % 100 NB. mouse start coord. Y ) a_g_mmove=: 3 : 0 d=.". sysdata if. -.4{d do. return. end. x=.(0{d) * 1000 % (2{d) y=.(1{d) * 1000 % (3{d) ) a_g_mblup=: 3 : 0 d=. ". sysdata x=.(0{d) * 1000 % (2{d) y=.(1{d) * 1000 % (3{d) X =: _5 + x % 100 NB. mouse end coord. X Y =: _5 + y % 100 NB. mouse end coord. Y bez_change '' ) NB. change Bezier curve NB. global: X0, Y0, X, Y bez_change =: 3 : 0 XX =. X0 + (_0.2, 0.2) YY =. Y0 + (_0.5, 0.5) TCP =. }:"(1) 4 3$CTRLP i =. 0 while. i < 4 do. test =. , @( (XX & between) ` (YY & between)/. ) i{TCP if. 1 = */ test do. TV =. i end. i =. i + 1 end. NB. wr 'i: ', ": TV NB. wr TV { TCP NB. wr $ TV { TCP TCQ =. (X, Y) TV } TCP TCQ =. TCQ ,"(1) 0 CTRLP =: , TCQ glpaintx '' ) NB. CinC J Phrases p.32 =================================== NB. 5 CC 5 13 => 1, 15 CC 5 13=> 0 CC =: ({.@] <: [) *. ([ <: {:@]) NB. 5 13 between 10 + i.7 => 1 1 1 1 0 0 0 between =: CC~"(1 0) NB. test 1st value(4) between 5 and 9, 2nd value(11) between 10 and 13, yes:1 no:0 NB. , @( ((5 9)&between) ` ((10 13)&between)/. ) 4 11 => 0 1 NB. , @( ((5 9)&between) ` ((10 13)&between)/. ) 6 11 => 1 1 NB. , @( ((5 9)&between) ` ((10 13)&between)/. ) 10 11 => 0 1 NB. , @( ((5 9)&between) ` ((10 13)&between)/. ) 10 14 => 0 0