#include "hgimg.as" ; ; DXFファイルにテマスチャを貼り付けるツール ; 1. DXFデータを読み込む ; 2. 貼り付けるテクスチャを読み込む(複数可) ; 3. コンボボックスでテクスチャの名前を選択 ; 4. マウスクリックした場所のポリゴンにテクスチャが貼られる ; (右クリックで貼り付け方向を回転します) ; 5. 貼り終わったらMXファイルとして保存 ; ; ※機能がショボいので各自拡張してください。 ; sdim fname,256 sdim optname,256 sdim s1,256 sdim s2,256 sdim work,256 sdim tools,256 if (hspstat&1) { ; debug中 work=curdir+"\\temp\\" tools=curdir+"\\" } else { ; exe時 work=exedir+"\\temp\\" tools=exedir+"\\" } fname = "none" ; fname = "ball.dxf" goto *boot *prinfo gsel 4 color 192,192,192 boxf 0,0,140,80 color 0,0,0 pos 8,8 mes ""+polys+"polys" return *cutfname ; fnameのpathを取り除く ; a=0:cuti=0 repeat peek a,fname,cnt if a=0 : break if a='\\' : cuti=cnt+1 loop strmid fname,fname,cuti,256 return *cutext ; s1の拡張子を取り除く ; a=0 strlen cuti,s1 if cuti=0 : return repeat cuti-- if cuti<0 : break peek a,s1,cuti if a='\\' : break if a='.' : poke s1,cuti,0 : break loop return *loadmx dialog "dxf",16,"dxfファイル" if stat=0 : goto *main fname=refstr goto *mload *loadbmp dialog "bmp",16,"bmpファイル" if stat=0 : goto *main s1=refstr texload s1 gosub *cutext fname=s1 gosub *cutfname texlist+=fname+"\n" gsel 4 objprm 0,texlist objprm 0,0 gsel 0 goto *main *allclr hgreset sdim texlist,1024 goto *main0 *alltex setmtex model,-1,seltex,0 goto *main *savemx dialog "mx",17,"mxファイル" if stat=0 : goto *main s1=refstr gosub *cutext mxtex texlist mxsave s1+".mx" goto *main *boot ; start ; ; screen 0,320,240,0 screen 0,640,480,0 cls 4 sdim texlist,1024 screen 4,140,280,8+4 title "tex painter" cls 1 objmode 1 pos 4,240 objsize 130,24 combox seltex,128,texlist pos 4,50 button "カメラリセット",*creset button "dxf読み込み",*loadmx button "テクスチャ読み込み",*loadbmp button "すべてに貼る",*alltex button "MXファイル書き出し",*savemx button "シーン初期化",*allclr button "終了",*owari *boot2 gsel 0 hgini goto *main0 *mload ; model load ; hgreset sdim texlist,1024 ; s1=fname gosub *cutext dxfload s1 ; モデルファイル読み込み model = stat ; (変数statにモデルIDが返される) modelshade model,1 regobj a,model gsel 0 ;palcopy 3 gosub *cutfname *main0 ; main loop ; selcpos objsetf3 0.0f, 0.0f, 20.0f selcang objsetf3 0.0f, 0.0f, 0.0f *main1 gosub *prinfo gsel 0:gmode 0,320,240 pos 0,0 color 255,255,255 axis="" dim scan,32 *main repeat hgdraw:a=stat getsync t1,0 if a { pos 0,0 ; mes "ID="+scan.0+"/MD="+scan.1+"/"+scan.2 ; selcpos:objgetstr axis ; mes "P="+axis ; selcang:objgetstr axis ; mes "A="+axis } hgsync 20 title "t"+t1+"/"+a stick k,127,1 if k&$100 { objscan2 scan,mousex,mousey a=scan.0 if scan.0>=0 { setmtex scan.2<<16+scan.1,scan.3,seltex,0 ;dialog "MD="+scan.1+"/NODE="+scan.3 } } if k&$200 { objscan2 scan,mousex,mousey a=scan.0 if scan.0>=0 { getmuv a,scan.2<<16+scan.1,scan.3 a.8=a.0:a.9=a.1 setmuv a.2,scan.2<<16+scan.1,scan.3 } } if k&64 { if k&16 : selcang : else : selang if k&1 : objaddf3 0.0f, -0.05f, 0.0f if k&4 : objaddf3 0.0f, 0.05f, 0.0f if k&2 : objaddf3 0.05f, 0.0f, 0.0f if k&8 : objaddf3 -0.05f, 0.0f, 0.0f } else { selcpos if k&1 : objaddf3 0.25f, 0.0f, 0.0f if k&4 : objaddf3 -0.25f, 0.0f, 0.0f if k&16 { if k&2 : objaddf3 0.0f, 0.0f, 0.25f if k&8 : objaddf3 0.0f, 0.0f, -0.25f } else { if k&2 : objaddf3 0.0f, 0.25f, 0.0f if k&8 : objaddf3 0.0f, -0.25f, 0.0f } } loop *creset selcpos objsetf3 0.0f, 0.0f, 20.0f selcang objsetf3 0.0f, 0.0f, 0.0f goto *main *owari end