2012年1月26日木曜日

MAXScript ファイルにバイナリ形式のデータを書き出す


-- Floatの大きな値
BIG_FLOAT = 1.0e32

-- AABB
struct AABB
(
 vMin,
 vMax
)

-- AABBを取得
fn GetAABB =
(
 local v = AABB()
 v.vMin = [ BIG_FLOAT, BIG_FLOAT, BIG_FLOAT ]
 v.vMax = [-BIG_FLOAT, -BIG_FLOAT, -BIG_FLOAT]
 return v
)

-- binStreamにPoint3を書き込む
fn WritePoint3 bstream v =
(
 WriteFloat bstream v.x
 WriteFloat bstream v.y
 WriteFloat bstream v.z
)

-- ファイルにAABBの値を書き込む
fn WriteAabbToFile filePath aabb =
(
 file = fopen filePath "wb"
 
 WritePoint3 file aabb.vMin
 WritePoint3 file aabb.vMax 
 
 fclose file
)


-- ファイルにデータを書き込むテスト
fname = "test.bin"   -- ファイル名
fdir = (GetDir #export)  -- ファイルを書き込むディレクトリ

fpath = fdir + "\\" + fname

aabb = GetAABB()

aabb.vMin.x = 8.0
aabb.vMax.z = 0.0

WriteAabbToFile fpath aabb