再度サイズ、モード、色が同じ設定が使われた場合
既に完成されてるのをコピーする
モジュールをmod_gradf.hspって名前で保存したとして
#module "mod_gradf" #define gradf_bufid 1234 //バッファID(適当なIDから使用開始) #undef gradf #deffunc gradf int p1,int p2,int p3,int p4,int p5,int p6,int p7 if f=0 {sdim ppp,12*1000:f=1}//1000個まで保持 pp=str(( (p3*65536) | p4 + ( (p6<<1) - p7 ) ) <<1 | $80000000 | p5) //サイズ、モード、色で固有のIDを作る(本当に固有IDになってるかは不明) i=instr(ppp,0,pp) //既に登録されてるか検索 sizx=abs(p3) sizy=abs(p4) if p3<0 {x=p1+p3}else{x=p1} if p4<0 {y=p2+p4}else{y=p2} if i<0{//登録無し id_bak=ginfo(3) buffer gradf_bufid+idmax,sizx,sizy memset ppp,' ',12,12*idmax memcpy ppp,pp, strlen(pp),12*idmax+12-strlen(pp)//ID登録 c1_rgb=p6 c2_rgb=p7 c1_r=peek(c1_rgb,2) c1_g=peek(c1_rgb,1) c1_b=peek(c1_rgb,0) r=peek(c2_rgb,2)-c1_r g=peek(c2_rgb,1)-c1_g b=peek(c2_rgb,0)-c1_b if p5 { d=1.0/sizy repeat sizy,(p4<0) color d*r*cnt+c1_r,d*g*cnt+c1_g,d*b*cnt+c1_b if p4>0 {line sizx,cnt,0,cnt}else{line sizx,sizy-cnt,0,sizy-cnt} loop }else{ d=1.0/sizx repeat sizx,(p3<0) color d*r*cnt+c1_r,d*g*cnt+c1_g,d*b*cnt+c1_b if p3>0 {line cnt,sizy,cnt,0}else{line sizx-cnt,sizy,sizx-cnt,0} loop } gsel id_bak i=idmax idmax++ if idmax=1000 {idmax=0}//登録が1000超えたら最初に戻す }else{//登録有り i/12 //ID一つが12文字なので } pos x,y gcopy gradf_bufid+i,0,0,sizx,sizy return #global
使用例
#cmpopt optprm 0 //HSP3.31RC1なら必要ないみたい #runtime "hsplet3" #include "mod_gradf.hsp" repeat 5 rgb(cnt)=(rnd(256)<<16) +(rnd(256)<<8)+rnd(256) loop repeat 3 xy(cnt)=10+rnd(10)*30 loop repeat redraw 0 repeat 30 gradf rnd(400),rnd(300),xy(rnd(3)),xy(rnd(3)),rnd(2),rgb(rnd(5)),rgb(rnd(5)) loop redraw 1 await 15 loop