sample\obaq\obaqme.hsp » Plain Format
#include "obaq.as" #include "hspda.as" #packopt name "obaqme" ; OBAQ Model Editor ; onitama 2009/12- ; goto *boot #deffunc toolinit maxdata=256 wx=800:wy=448+64 tlx=640:tly=0 dvx=16:dvy=16 bgid=4 toolmsg="Ready." dim fl,maxdata dim ax,maxdata dim ay,maxdata dim az,maxdata dim acol,maxdata aent=0 aedit=0 buffer bgid,tlx,wy color 0,0,64:boxf ix=tlx/dvx:iy=wy/dvy repeat iy if cnt&3 : color 64,64,255 : else : color 64,160,255 y=cnt*dvy:boxf 0,y,tlx,y loop repeat ix if cnt&3 : color 64,64,255 : else : color 64,160,255 x=cnt*dvx:boxf x,0,x,wy loop centerx=20 centery=16 cenx=centerx*dvx ceny=centery*dvy color 255,0,0 circle cenx-4,ceny-4,cenx+4,ceny+4 return #deffunc tooldraw redraw 0 pos 0,0:gmode 0,tlx,wy:gcopy bgid syscolor 15 boxf tlx,tly,wx,tly+64 color 0,0,0:sysfont 17:pos tlx+8,tly+8 mes toolmsg color 255,255,255 i=0:x=-1:y=-1:fx=-2:fy=-2 repeat if i>=aent : break xx=ax(i):yy=ay(i) i++ if x>=0 { line x,y,xx,yy if (fx=xx)&(fy=yy) : xx=-1 } else{ fx=xx:fy=yy ; 始点 } x=xx:y=yy loop color 255,255,255 if curx<tlx { boxf curx-4,cury-4,curx+4,cury+4 } redraw 1 return #deffunc toolcnv var myid ddim mdldata,1024 i=0 repeat aent mdldata(i)=(ax(cnt)-cenx)/dvx i++ mdldata(i)=(ay(cnt)-ceny)/dvy i++ loop qaddmodel myid, mdldata, i, 96.0, 20.0, 0.0, 1.0, 1.0, colsw_none return ;----------------------------------------------------------------------- #deffunc qvxcnv str _qvbfn qvxmax=aent*2 dim mdldata,qvxmax qvxent=0 repeat aent mdldata(qvxent)=(ax(cnt)-cenx)/dvx qvxent++ mdldata(qvxent)=(ay(cnt)-ceny)/dvy qvxent++ loop bsave _qvbfn,mdldata,qvxent*4 return ;----------------------------------------------------------------------- *boot ; ウインドゥサイズの設定 ; screen 0,640,480,0 cls 4 title "Sample" ; 初期設定 ; toolinit screen 1,wx,wy,0 title "OBAQ Model Editor ver0.1" syscolor 15 boxf tlx,tly,wx,wy objsize 120,24 pos tlx+16,tly+120 color 0,0,0:sysfont 17 button "TEST",*execobaq button gosub "SAVE",*datasave button gosub "LOAD",*dataload button gosub "CONVERT",*cnvbuild mes "\n※左回りで作成してください\n" button "END",*owari modflag=0 *toolmain if ginfo_act!=1 : goto *noact stick key,$40 if invclk { ; クリック無視 if ( key&$300 ) { tooldraw goto *noact } invclk=0 } if key&$40 { if modflag=0 : gosub *chkae toolmsg="Modify #"+aedit if key&4 { aedit++ if aedit>=aent : aedit-- } if key&$1 { aedit-- if aedit<0 : aedit=0 } if key&$100 : gosub *editaxis if key&$200 : gosub *delaxis curx=ax(aedit) cury=ay(aedit) modflag=1 } else { curx=mousex/dvx*dvx cury=mousey/dvy*dvy toolmsg="Add #"+aent if key&$100 : gosub *regaxis modflag=0 } tooldraw *noact await 12 ; 時間待ち goto *toolmain *chkae x=mousex/dvx*dvx y=mousey/dvy*dvy i=0 repeat if i>=aent : break if (ax(i)=x)&(ay(i)=y) : aedit=i i++ loop return *regaxis if curx>=tlx : return ax(aent)=curx ay(aent)=cury az(aent)=0 aent++ return *editaxis curx=mousex/dvx*dvx cury=mousey/dvy*dvy if curx>=tlx : return ax(aedit)=curx ay(aedit)=cury az(aedit)=0 return *delaxis x=mousex/dvx*dvx y=mousey/dvy*dvy if x!=curx|y!=cury : return i=aedit repeat if i>=aent : break ax(i)=ax(i+1) ay(i)=ay(i+1) az(i)=az(i+1) i++ loop aent-- return *cnvbuild invclk=1 dialog "qvb",17,"QVB Data" if stat=0 : return fname = refstr exname=getpath(fname,2) ; ファイル名の拡張子を取得 if exname="" : fname+=".qvb" ; 拡張子がなければ追加 ; qvxcnv fname ; dialog "["+getpath(fname,8)+"]を保存しました" ; return *datasave invclk=1 dialog "qvd",17,"OBAQ Vector Data" if stat=0 : return fname = refstr exname=getpath(fname,2) ; ファイル名の拡張子を取得 if exname="" : fname+=".qvd" ; 拡張子がなければ追加 ; vsave_start vsave_put aent vsave_put fl vsave_put ax vsave_put ay vsave_put az vsave_put acol vsave_end fname ; return *dataload invclk=1 dialog "qvd",16,"OBAQ Vector Data" if stat=0 : return fname = refstr ; vload_start fname vload_get aent vload_get fl vload_get ax vload_get ay vload_get az vload_get acol vload_end ; return *execobaq invclk=1 gsel 0,1 qreset ; OBAQの初期化 rot = 0.0 toolcnv my *main ; 描画メイン ; if ginfo_act=1 : gsel 1 : goto *toolmain redraw 0 ; 画面の更新を開始 color 0,0,0:boxf ; 画面をクリア qexec ; OBAQによるオブジェクトの更新 qdraw ; オブジェクトの描画 redraw 1 ; 画面の更新を終了 await 12 ; 一定時間待つ goto *main *owari end