// // 文字列を円筒形の3Dデータに加工します // PAINT { SelectScreen(1) ; Line(0,0,SCR_X,0,14) ; Line(0,1,SCR_X,1,7) ; Line(0,52,SCR_X,52,14) ; Line(0,53,SCR_X,53,7) ; Set3DCenter(WIN_X/2,WIN_Y/2,1000) ; } INIT { SetFont("MS ゴシック",0) ; call("MakeData") ; SetButtonCheck("ID_ry",1) ; Set3DWorldPosZ(1,2000) ; timer_flag = 1 ; col = 2 ; type = 0 ; rx = 0 ; ry = 1 ; rz = 0 ; sp = 10 ; } CREATE { SetWinColor(15) ; SubScreen(SCR_X,SCR_Y) ; memo_max = 4000 ; Data("buf",memo_max,9) ; Create3DPack(1,memo_max) ; SetTimer(100) ; Menu("ファイル(&F)") ; PopupMenuEX("IMWプログラム作成","ID_program") ; PopupMenuEX("座標データをファイルに保存","SaveData") ; PopupMenuEX("---","ID") ; PopupMenuEX("アプリケーションの終了(&X)","ID_end") ; CreateControl(60,"編集文字列","ID_static",8,9,60,16) ; CreateControl(101,"サ ン プ ル","ID_edit",72,6,202,18) ; CreateControl(60,"色コード","ID_static",8,32,48,16) ; CreateControl(101,"2","ID_col",72,30,20,18) ; CreateControl(0,"データ作成","ID_make",200,28,74,20) ; CreateControl(51,"回転の設定","ID_group",300,4,400,42) ; CreateControl(60,"奥行き位置","ID_static",316,24,60,16) ; CreateControl(101,"2000","ID_okuyuki",380,22,40,18) ; CreateControl(20,"X軸回転","ID_rx",466,24,72,16) ; CreateControl(20,"Y軸回転","ID_ry",538,24,72,16) ; CreateControl(20,"Z軸回転","ID_rz",610,24,72,16) ; CreateControl(100,"","ID_text",0,0,0,0) ; } // 軸回転のチェックボックス ID_rx{ rx = (rx+1)%2 ; SetButtonCheck("ID_rx",rx) ; } ID_ry{ ry = (ry+1)%2 ; SetButtonCheck("ID_ry",ry) ; } ID_rz{ rz = (rz+1)%2 ; SetButtonCheck("ID_rz",rz) ; } // 奥行き設定 ID_okuyuki{ Reset3DPos(1) ; Set3DWorldPosZ(1,GetEditData("ID_okuyuki")) ; } Message { SelectScreen(1) ; Print(300,200,0,16,32,3,"処理中...") ; } // 0.1 秒ごとに実行 TIMER { if(timer_flag == 0){ return ; } SelectScreen(0) ; Box(0,0,SCR_X,SCR_Y,7,7) ; Print(8,38,0,8,16,12,"編集文字列を加工します") ; Print(8,58,0,8,16,12,"45バイトで1周になります") ; Print(8,78,0,8,16,12,"データ数:") ; PrintData(90,78,0,8,16,12,0,pos) ; Set3DLocalRotateX(1,rx*10) ; Set3DLocalRotateY(1,ry*10) ; Set3DLocalRotateZ(1,rz*10) ; Draw3DPack(1) ; CopyBMP(0,0,30,SCR_X,SCR_Y-30,1,0,60,SCR_X,SCR_Y-30,0) ; } // データ作成ボタン ID_make { call("MakeData") ; Reset3DPos(1) ; Set3DWorldPosZ(1,GetEditData("ID_okuyuki")) ; } // データ作成サブルーチン MakeData { call("Message") ; SelectScreen(0) ; SetPal(0,70,70,70) ; Box(0,0,SCR_X,SCR_Y,0,0) ; SetPal(0,0,0,0) ; col = GetEditData("ID_col") ; if(col > 15){ col = 1 ; } if(col < 0){ col = 1 ; } Print(0,0,0,8,16,col,"ID_edit") ; Print(1,0,0,8,16,col,"ID_edit") ; wide = GetEditLength("ID_edit") * 8 ; // 文字の総幅 round = 0 ; // 開始角度 r = 300 ; // 半径 kaku = 1 ; // 1こまの角度 size = (r*2*PI)/360 * kaku ; // 1こまのサイズ Clear3DPack(1) ; x = 0 ; y = 0 ; pos = 0 ; loop(16){ loop(wide){ cr = GetPixelR(x,y) ; cg = GetPixelG(x,y) ; cb = GetPixelB(x,y) ; if(cg != 70){ x1 = cos(round)*r ; // 上 z1 = sin(round)*r ; y1 = (y-8) * size ; x2 = cos(round+kaku)*r ; // 右上 z2 = sin(round+kaku)*r ; y2 = (y-8) * size ; x3 = cos(round)*r ; // 下 z3 = sin(round)*r ; y3 = (y-8) * size + size ; Add3DPack(1,x2,y2,z2,x3,y3,z3,x1,y1,z1,cr,cg,cb) ; Add3DPack(1,x3,y3,z3,x2,y2,z2,x2,y3,z2,cr,cg,cb) ; buf(pos,0) = x2 ; buf(pos,1) = y2 ; buf(pos,2) = z2 ; buf(pos,3) = x3 ; buf(pos,4) = y3 ; buf(pos,5) = z3 ; buf(pos,6) = x1 ; buf(pos,7) = y1 ; buf(pos,8) = z1 ; buf(pos+1,0) = x3 ; buf(pos+1,1) = y3 ; buf(pos+1,2) = z3 ; buf(pos+1,3) = x2 ; buf(pos+1,4) = y2 ; buf(pos+1,5) = z2 ; buf(pos+1,6) = x2 ; buf(pos+1,7) = y3 ; buf(pos+1,8) = z2 ; if(pos >= memo_max){ MessBox("使用パーツ数が限界です","エラー",0,0) ; return ; } pos = pos + 2 ; } x = x + 1 ; round = round + kaku ; } x = 0 ; y = y + 1 ; round = 0 ; } } // アプリケーションの終了メニュー ID_end{ end ; } // IMWプログラム作成メニュー ID_program { timer_flag = 0 ; call("Message") ; AllSelectEdit("ID_text") ; ClearEdit("ID_text") ; SetEditText("ID_text","TIMER") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","{") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","SelectScreen(0) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Box(0,0,WIN_X,WIN_Y,7,7) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Set3DCenter(WIN_X/2,WIN_Y/2,1000) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Set3DLocalRotateY(0,10) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Draw3DPack(0) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","CopyBMP(0,0,0,WIN_X,WIN_Y,1,0,0,WIN_X,WIN_Y,0) ;") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","}") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","INIT") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","{") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Set3DWorldPosZ(0,2000) ; ") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","}") ; SetEditCodeRet("ID_text") ; // 改行 SetEditText("ID_text","CREATE") ; SetEditCode("ID_text",13) ; SetEditCode("ID_text",10) ; // 改行 SetEditText("ID_text","{") ; SetEditCode("ID_text",13) ; SetEditCode("ID_text",10) ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","SubScreen(SCR_X,SCR_Y) ;") ; SetEditCode("ID_text",13) ; SetEditCode("ID_text",10) ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","SetTimer(100) ;") ; SetEditCode("ID_text",13) ; SetEditCode("ID_text",10) ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Create3DPack(0,4000) ;") ; SetEditCode("ID_text",13) ; SetEditCode("ID_text",10) ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","// 下記に色の値を設定してください") ; SetEditCodeRet("ID_text") ; // 改行 SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","r = 0 ; g = 0 ; b = 255 ; p = 0 ;") ; SetEditCodeRet("ID_text") ; // 改行 n = 0 ; loop(pos){ SetEditCode("ID_text",9) ; // タブ SetEditText("ID_text","Add3DPack(p,") ; SetEditData("ID_text",buf(n,0),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,1),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,2),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,3),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,4),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,5),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,6),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,7),0) ; SetEditText("ID_text",",") ; SetEditData("ID_text",buf(n,8),0) ; SetEditText("ID_text",",") ; SetEditText("ID_text","r,g,b) ;") ; SetEditCodeRet("ID_text") ; // 改行 n = n + 1 ; } SetEditText("ID_text","}") ; SetEditCodeRet("ID_text") ; // 改行 AllSelectEdit("ID_text") ; ClipEdit("ID_text") ; MessBox("データをクリップボードへコピーしました","IMWプログラム作成",0,0) ; timer_flag = 1 ; } // 座標データをファイルに保存メニュー SaveData { timer_flag = 0 ; n = OpenFileWriteDlg("座標データの保存") ; if(n == 0){ text_flag = 0 ; return ; } // キャンセル Save3DPack(1) ; CloseFile ; timer_flag = 1 ; }