Files
2025-09-29 00:52:08 +02:00

967 lines
29 KiB
Plaintext
Executable File

--//////////////////////////////////////////////////////////////////////////////
-- ogreExporter.cpp
-- Author : Doug Perkowski - OC3 Entertainment, Inc.
-- Start Date : December 10th, 2007
-- Copyright : (C) 2007 OC3 Entertainment, Inc.
--//////////////////////////////////////////////////////////////////////////////
--********************************************************************************
-- *
-- This script is released under the *
-- Creative Commons Attribution 3.0 United States License *
-- http://creativecommons.org/licenses/by/3.0/us/ *
-- *
--********************************************************************************
FxOgreMaxExporterDialog = newRolloutFloater "FxOgre" 400 800
FxOgreObject = FxOgre();
-- We have 3 identical animation GUIs, so abstract this functionality into functions
-- that can be used by all 3.
function animRefresh roll isEnabled =
(
roll.anims.selection = 0
roll.animName.text = ""
roll.sampleFrames.text = 1 as String
roll.sampleSeconds.text = (1.0 / frameRate ) as String
if roll.rangeType.state == 1 then
(
if roll.rangeUnit.state == 2 then
(
roll.start.text = ((animationRange.start as float) / 4800 ) as String
roll.stop.text = ((animationRange.end as float) / 4800 ) as String
)
else
(
roll.start.text = ((animationRange.start as integer) / TicksPerFrame ) as String
roll.stop.text = ((animationRange.end as integer) / TicksPerFrame ) as String
)
)
if isEnabled then
(
roll.grp1.enabled = true
roll.add.enabled = true
roll.delete.enabled = true
roll.rangeType.enabled = true
roll.rangeUnit.enabled = true
roll.sampleBy.enabled = true
roll.anims.enabled = true
roll.animName.enabled = true
if roll.rangeType.state == 2 then
(
roll.start.enabled = true
roll.stop.enabled = true
)
else
(
roll.start.enabled = false
roll.stop.enabled = false
)
if roll.sampleBy.state == 2 then
(
roll.sampleSeconds.enabled = true
roll.sampleFrames.enabled = false
)
else
(
roll.sampleSeconds.enabled = false
roll.sampleFrames.enabled = true
)
)
else
(
roll.grp1.enabled = false
roll.add.enabled = false
roll.delete.enabled = false
roll.rangeType.enabled = false
roll.rangeUnit.enabled = false
roll.sampleBy.enabled = false
roll.sampleFrames.enabled = false
roll.sampleSeconds.enabled = false
roll.anims.enabled = false
roll.animName.enabled = false
roll.start.enabled = false
roll.stop.enabled = false
)
)
function rangeTypeChange roll =
(
if roll.rangeType.state == 1 then
(
if roll.rangeUnit.state == 2 then
(
roll.start.text = ((animationRange.start as float) / 4800 ) as String
roll.stop.text = ((animationRange.end as float) / 4800 ) as String
)
else
(
roll.start.text = ((animationRange.start as integer) / TicksPerFrame ) as String
roll.stop.text = ((animationRange.end as integer) / TicksPerFrame ) as String
)
roll.start.enabled = false
roll.stop.enabled = false
)
else
(
roll.start.enabled = true
roll.stop.enabled = true
)
)
function rangeUnitChange roll =
(
tempStart = roll.start.text as float
tempStop = roll.stop.text as float
if roll.rangeUnit.state == 2 then
(
roll.start.text = (tempStart * TicksPerFrame / 4800 ) as String
roll.stop.text = (tempStop * TicksPerFrame / 4800 ) as String
)
else
(
roll.start.text = ((tempStart * 4800 / TicksPerFrame + .5) as integer )as String
roll.stop.text = ((tempStop * 4800 / TicksPerFrame + .5) as integer ) as String
)
)
function sampleByChange roll =
(
if roll.sampleBy.state == 1 then
(
roll.sampleFrames.enabled = true
roll.sampleSeconds.enabled = false
)
else
(
roll.sampleFrames.enabled = false
roll.sampleSeconds.enabled = true
)
)
function getSkelAnims =
(
animNames = #()
numClips = FxOgreObject.get_numClips_skelClipList()
for i = 0 to (numClips - 1) do
(
name = FxOgreObject.get_name_skelClipList(i)
append animNames name
)
return animNames
)
function getBSAnims =
(
animNames = #()
numClips = FxOgreObject.get_numClips_BSClipList()
for i = 0 to (numClips - 1) do
(
name = FxOgreObject.get_name_BSClipList(i)
append animNames name
)
return animNames
)
function getVertAnims =
(
animNames = #()
numClips = FxOgreObject.get_numClips_vertClipList()
for i = 0 to (numClips - 1) do
(
name = FxOgreObject.get_name_vertClipList(i)
append animNames name
)
return animNames
)
rollout MeshRollout "Mesh" width:350 height:215
(
checkbox exportVBA "Include vertex bone assignments" pos:[9,47] width:221 height:18
editText meshFilename "" pos:[3,137] width:328 height:22 enabled:false
label meshFilenameLabel "Mesh Filename" pos:[7,120] width:218 height:17
checkbox exportMesh "Export Mesh" pos:[9,11] width:159 height:18
checkbox useSharedGeom "Use Shared Geometry" pos:[9,29] width:159 height:18 checked:false
checkbox exportVertNorm "Include vertex normals" pos:[9,66] width:221 height:18
checkbox exportVertCol "Include diffuse vertex colors" pos:[9,84] width:221 height:18
checkbox exportTexCoord "Include texture coordinates" pos:[9,102] width:221 height:18
checkbox buildEdges "Build edges list (for shadows)" pos:[10,162] width:221 height:18
checkbox buildTangents "Build tangent vectors" pos:[10,180] width:221 height:18
fn refresh =
(
exportMesh.checked = FxOgreObject.get_exportMesh()
useSharedGeom.checked = FxOgreObject.get_useSharedGeom();
exportVBA.checked = FxOgreObject.get_exportVBA();
exportVertNorm.checked = FxOgreObject.get_exportVertNorm();
exportVertCol.checked = FxOgreObject.get_exportVertCol();
buildEdges.checked = FxOgreObject.get_buildEdges();
buildTangents.checked = FxOgreObject.get_buildTangents();
MeshFilename.text = FxOgreObject.get_meshFilename()
if exportMesh.checked then
(
useSharedGeom.enabled = true
exportVBA.enabled = true
exportVertNorm.enabled = true
exportVertCol.enabled = true
exportTexCoord.enabled = true
meshFilename.enabled = true
meshFilenameLabel.enabled = true
buildEdges.enabled = true
buildTangents.enabled = true
)
else
(
useSharedGeom.enabled = false
exportVBA.enabled = false
exportVertNorm.enabled = false
exportVertCol.enabled = false
exportTexCoord.enabled = false
meshFilename.enabled = false
meshFilenameLabel.enabled = false
buildEdges.enabled = false
buildTangents.enabled = false
)
)
on MeshRollout open do
(
refresh()
)
on exportVBA changed state do
(
if exportVBA.checked then
FxOgreObject.set_exportVBA("on");
else
FxOgreObject.set_exportVBA("off");
)
on exportMesh changed state do
(
if exportMesh.checked then
(
FxOgreObject.set_exportMesh("on");
useSharedGeom.enabled = true
exportVBA.enabled = true
exportVertNorm.enabled = true
exportVertCol.enabled = true
exportTexCoord.enabled = true
meshFilename.enabled = true
meshFilenameLabel.enabled = true
buildEdges.enabled = true
buildTangents.enabled = true
)
else
(
FxOgreObject.set_exportMesh("off");
useSharedGeom.enabled = false
exportVBA.enabled = false
exportVertNorm.enabled = false
exportVertCol.enabled = false
exportTexCoord.enabled = false
meshFilename.enabled = false
meshFilenameLabel.enabled = false
buildEdges.enabled = false
buildTangents.enabled = false
)
)
on useSharedGeom changed state do
(
if useSharedGeom.checked then
FxOgreObject.set_useSharedGeom("on");
else
FxOgreObject.set_useSharedGeom("off");
)
on exportVertNorm changed state do
(
if exportVertNorm.checked then
FxOgreObject.set_exportVertNorm("on");
else
FxOgreObject.set_exportVertNorm("off");
)
on exportVertCol changed state do
(
if exportVertCol.checked then
FxOgreObject.set_exportVertCol("on");
else
FxOgreObject.set_exportVertCol("off");
)
on exportTexCoord changed state do
(
if exportTexCoord.checked then
FxOgreObject.set_exportTexCoord("on");
else
FxOgreObject.set_exportTexCoord("off");
)
on buildEdges changed state do
(
if buildEdges.checked then
FxOgreObject.set_buildEdges("on");
else
FxOgreObject.set_buildEdges("off");
)
on buildTangents changed state do
(
if buildTangents.checked then
FxOgreObject.set_buildTangents("on");
else
FxOgreObject.set_buildTangents("off");
)
)
rollout MaterialsRollout "Materials" width:350 height:168
(
editText materialFilename "" pos:[11,49] width:328 height:22 enabled:false
label MaterialFilenameLabel "Material Filename" pos:[11,32] width:218 height:17 enabled:false
checkbox exportMaterial "Export Materials to Ogre .material file" pos:[11,10] width:284 height:18
editText matPrefix "" pos:[15,117] width:328 height:22 enabled:false
label matPrefixLabel "Material name prefix" pos:[20,96] width:218 height:17 enabled:false
checkbox copyTextures "Copy texture files to output dir" pos:[11,146] width:271 height:21
fn refresh =
(
exportMaterial.checked = FxOgreObject.get_exportMaterial()
copyTextures.checked = FxOgreObject.get_copyTextures()
MaterialFilename.text = FxOgreObject.get_materialFilename()
matPrefix.text = FxOgreObject.get_matPrefix()
if exportMaterial.checked then
(
MaterialFilename.enabled = true
MaterialFilenameLabel.enabled = true
copyTextures.enabled = true
matPrefix.enabled = true
matPrefixLabel.enabled = true
)
else
(
MaterialFilename.enabled = false
matPrefix.enabled = false
MaterialFilenameLabel.enabled = false
matPrefixLabel.enabled = false
copyTextures.enabled = false
)
)
on MaterialsRollout open do
(
refresh()
)
on exportMaterial changed state do
(
if exportMaterial.checked then
(
FxOgreObject.set_exportMaterial("on");
materialFilename.enabled = true;
materialFilenameLabel.enabled = true;
matPrefix.enabled = true;
matPrefixLabel.enabled = true;
copyTextures.enabled = true;
)
else
(
FxOgreObject.set_exportMaterial("off");
materialFilename.enabled = false;
materialFilenameLabel.enabled = false;
matPrefix.enabled = false;
matPrefixLabel.enabled = false;
copyTextures.enabled = false;
)
)
on copyTextures changed state do
(
if copyTextures.checked then
FxOgreObject.set_copyTextures("on");
else
FxOgreObject.set_copyTextures("off");
)
)
rollout ScenesRollout "Scene" width:350 height:168
(
editText sceneFilename "" pos:[11,49] width:328 height:22 enabled:false
label SceneFilenameLabel "Scene Filename" pos:[11,32] width:218 height:17 enabled:false
checkbox exportScene "Export mesh, cameras and lights to .scene file" pos:[11,10] width:300 height:18
fn refresh =
(
exportScene.checked = FxOgreObject.get_exportScene()
SceneFilename.text = FxOgreObject.get_sceneFilename()
if exportScene.checked then
(
SceneFilename.enabled = true
SceneFilenameLabel.enabled = true
)
else
(
SceneFilename.enabled = false
SceneFilenameLabel.enabled = false
)
)
on ScenesRollout open do
(
refresh()
)
on exportScene changed state do
(
if exportScene.checked then
(
FxOgreObject.set_exportScene("on");
sceneFilename.enabled = true;
sceneFilenameLabel.enabled = true;
)
else
(
FxOgreObject.set_exportScene("off");
sceneFilename.enabled = false;
sceneFilenameLabel.enabled = false;
)
)
)
rollout SkeletonRollout "Skeleton" width:400 height:367
(
checkbox exportSkeleton "Export skeleton" pos:[11,10] width:335 height:18
editText skeletonFilename "" pos:[28,63] width:292 height:25
label skeletonFilenameLabel "Skeleton Filename" pos:[28,46] width:183 height:17
checkbox exportSkelAnims "Export animations (requires export of skeleton)" pos:[28,93] width:335 height:18
checkbox skelBB "Include animations in bounding box" pos:[47,112] width:335 height:18
checkbox normalizeScale "Normalize scale" pos:[28,28] width:335 height:18
groupBox grp1 "Animation Clips" pos:[5,142] width:388 height:201
button add "Add / Edit" pos:[13,309] width:73 height:25
button delete "Delete" pos:[12,279] width:73 height:25
radioButtons rangeType "Time Range" pos:[217,157] width:166 height:30 labels:#("Timer", "Start/End") columns:2
radioButtons rangeUnit "" pos:[211,246] width:175 height:16 labels:#("Frames", "Seconds") columns:2
editText start "start" pos:[243,194] width:90 height:25
editText stop "stop" pos:[243,218] width:90 height:25
radioButtons sampleBy "Sample by:" pos:[201,277] width:175 height:30 labels:#("Frames", "Seconds") columns:2
editText sampleFrames "" pos:[205,311] width:58 height:25
editText sampleSeconds "" pos:[291,311] width:61 height:25
listBox anims "" pos:[19,164] width:158 height:6
editText animName "" pos:[93,312] width:88 height:25
fn refresh =
(
exportSkeleton.checked = FxOgreObject.get_exportSkeleton()
exportSkelAnims.checked = FxOgreObject.get_exportSkelAnims()
normalizeScale.checked = FxOgreObject.get_normalizeScale()
skeletonFilename.text = FxOgreObject.get_skeletonFilename()
skelBB.checked = FxOgreObject.get_skelBB()
shouldEnableAnimations = false
if exportSkeleton.checked then
(
skeletonFilename.enabled = true
skeletonFilenameLabel.enabled = true
exportSkelAnims.enabled = true
normalizeScale.enabled = true
if exportSkelAnims.checked then
(
shouldEnableAnimations = true
skelBB.enabled = true
)
)
else
(
skeletonFilename.enabled = false
skeletonFilenameLabel.enabled = false
exportSkelAnims.enabled = false
skelBB.enabled = false
normalizeScale.enabled = false
)
anims.items = getSkelAnims()
animRefresh SkeletonRollout shouldEnableAnimations
)
on SkeletonRollout open do
(
refresh()
)
on exportSkeleton changed state do
(
shouldEnableAnimations = false
if exportSkeleton.checked then
(
FxOgreObject.set_exportSkeleton("on");
skeletonFilename.enabled = true
skeletonFilenameLabel.enabled = true
exportSkelAnims.enabled = true
normalizeScale.enabled = true
if exportSkelAnims.checked then
(
shouldEnableAnimations = true
skelBB.enabled = true
)
)
else
(
FxOgreObject.set_exportSkeleton("off");
skeletonFilename.enabled = false
skeletonFilenameLabel.enabled = false
exportSkelAnims.enabled = false
normalizeScale.enabled = false
skelBB.enabled = false
)
animRefresh SkeletonRollout shouldEnableAnimations
)
on exportSkelAnims changed state do
(
if exportSkelAnims.checked then
(
FxOgreObject.set_exportSkelAnims("on");
skelBB.enabled = true
animRefresh SkeletonRollout true
)
else
(
skelBB.enabled = false
FxOgreObject.set_exportSkelAnims("off");
animRefresh SkeletonRollout false
)
)
on skelBB changed state do
(
if skelBB.checked then
FxOgreObject.set_skelBB("on");
else
FxOgreObject.set_skelBB("off");
)
on normalizeScale changed state do
(
if normalizeScale.checked then
FxOgreObject.set_normalizeScale("on");
else
FxOgreObject.set_normalizeScale("off");
)
on add pressed do
(
startTemp = start.text as float
stopTemp = stop.text as float
rateTemp = sampleSeconds.text as float
if rangeUnit.state == 1 then
(
startTemp = startTemp / frameRate
stopTemp = stopTemp / frameRate
)
if sampleBy.state == 1 then
(
rateTemp = (sampleFrames.text as float) / frameRate
)
FxOgreObject.add_skelClipList animName.text startTemp stopTemp rateTemp
anims.items = getSkelAnims()
anims.selection = 0
animName.text = ""
)
on delete pressed do
(
newIndex = anims.selection;
if newIndex == FxOgreObject.get_numClips_skelClipList() then
if newIndex > 0 then
newIndex = newIndex - 1
FxOgreObject.remove_skelClipList (anims.selection - 1)
anims.items = getSkelAnims()
anims.selection = 0
animName.text = ""
)
on rangeType changed stat do
(
rangeTypeChange SkeletonRollout
)
on rangeUnit changed stat do
(
rangeUnitChange SkeletonRollout
)
on sampleBy changed stat do
(
sampleByChange SkeletonRollout
)
on anims selected sel do
(
sampleBy.state = 1
rangeUnit.state = 2
rangeType.state = 2
start.enabled = true
stop.enabled = true
start.text = (FxOgreObject.get_start_skelClipList (anims.selection - 1) ) as String
stop.text = (FxOgreObject.get_stop_skelClipList (anims.selection - 1) ) as String
sampleSeconds.text = (FxOgreObject.get_rate_skelClipList (anims.selection - 1) ) as String
sampleFrames.text = ((FxOgreObject.get_rate_skelClipList (anims.selection - 1) * frameRate ) as Integer ) as String
animName.text = anims.selected
)
)
rollout BlendShapesRollout "Blend Shapes" width:350 height:130
(
checkbox exportBlendShapes "Export blend shapes (to mesh file)" pos:[10,10] width:335 height:18
checkbox exportBSAnims "Export animations" pos:[47,50] width:335 height:18
checkbox bsBB "Include blendshapes in bounding box" pos:[10,31] width:335 height:18
groupBox grp1 "Animation Clips" pos:[5,80] width:388 height:201
button add "Add / Edit" pos:[13,247] width:73 height:25
button delete "Delete" pos:[12,217] width:73 height:25
radioButtons rangeType "Time Range" pos:[217,95] width:166 height:30 labels:#("Timer", "Start/End") columns:2
radioButtons rangeUnit "" pos:[211,184] width:175 height:16 labels:#("Frames", "Seconds") columns:2
editText start "start" pos:[243,132] width:90 height:25
editText stop "stop" pos:[243,156] width:90 height:25
radioButtons sampleBy "Sample by:" pos:[201,215] width:175 height:30 labels:#("Frames", "Seconds") columns:2
editText sampleFrames "" pos:[205,250] width:60 height:25
editText sampleSeconds "" pos:[291,250] width:60 height:25
listBox anims "" pos:[19,102] width:158 height:6
editText animName "" pos:[93,250] width:88 height:25
fn refresh =
(
exportBlendShapes.checked = FxOgreObject.get_exportBlendShapes()
exportBSAnims.checked = FxOgreObject.get_exportBSAnims()
bsBB.checked = FxOgreObject.get_bsBB()
shouldEnableAnimations = false
if exportBlendShapes.checked then
(
exportBSAnims.enabled = true
bsBB.enabled = true
if exportBSAnims.checked then
shouldEnableAnimations = true
)
else
(
exportBSAnims.enabled = false
bsBB.enabled = false
)
anims.items = getBSAnims()
animRefresh BlendShapesRollout shouldEnableAnimations
)
on BlendShapesRollout open do
(
refresh()
)
on exportBlendShapes changed state do
(
shouldEnableAnimations = false
if exportBlendShapes.checked then
(
FxOgreObject.set_exportBlendShapes("on");
exportBSAnims.enabled = true
bsBB.enabled = true
if exportBSAnims.checked then
shouldEnableAnimations = true
)
else
(
FxOgreObject.set_exportBlendShapes("off");
exportBSAnims.enabled = false
bsBB.enabled = false
)
animRefresh BlendShapesRollout shouldEnableAnimations
)
on exportBSAnims changed state do
(
if exportBSAnims.checked then
(
FxOgreObject.set_exportBSAnims("on");
animRefresh BlendShapesRollout true
)
else
(
FxOgreObject.set_exportBSAnims("off");
animRefresh BlendShapesRollout false
)
)
on bsBB changed state do
(
if bsBB.checked then
FxOgreObject.set_bsBB("on");
else
FxOgreObject.set_bsBB("off");
)
on add pressed do
(
startTemp = start.text as float
stopTemp = stop.text as float
rateTemp = sampleSeconds.text as float
if rangeUnit.state == 1 then
(
startTemp = startTemp / frameRate
stopTemp = stopTemp / frameRate
)
if sampleBy.state == 1 then
(
rateTemp = (sampleFrames.text as float) / frameRate
)
FxOgreObject.add_BSClipList animName.text startTemp stopTemp rateTemp
anims.items = getBSAnims()
anims.selection = 0
animName.text = ""
)
on delete pressed do
(
newIndex = anims.selection;
if newIndex == FxOgreObject.get_numClips_BSClipList() then
if newIndex > 0 then
newIndex = newIndex - 1
FxOgreObject.remove_BSClipList (anims.selection - 1)
anims.items = getBSAnims()
anims.selection = 0
animName.text = ""
)
on rangeType changed stat do
(
rangeTypeChange BlendShapesRollout
)
on rangeUnit changed stat do
(
rangeUnitChange BlendShapesRollout
)
on sampleBy changed stat do
(
sampleByChange BlendShapesRollout
)
on anims selected sel do
(
sampleBy.state = 1
rangeUnit.state = 2
rangeType.state = 2
start.enabled = true
stop.enabled = true
start.text = (FxOgreObject.get_start_BSClipList (anims.selection - 1) ) as String
stop.text = (FxOgreObject.get_stop_BSClipList (anims.selection - 1) ) as String
sampleSeconds.text = (FxOgreObject.get_rate_BSClipList (anims.selection - 1) ) as String
sampleFrames.text = ((FxOgreObject.get_rate_BSClipList (anims.selection - 1) * frameRate ) as Integer ) as String
animName.text = anims.selected
)
)
rollout VertAnimsRollout "Vertex Animations" width:350 height:130
(
checkbox exportVertAnims "Export vertex animations to mesh file" pos:[10,10] width:340 height:18
checkbox vertBB "Include animations in bounding box" pos:[28,31] width:335 height:18
groupBox grp1 "Animation Clips" pos:[5,60] width:388 height:201
button add "Add / Edit" pos:[13,227] width:73 height:25
button delete "Delete" pos:[12,197] width:73 height:25
radioButtons rangeType "Time Range" pos:[217,75] width:166 height:30 labels:#("Timer", "Start/End") columns:2
radioButtons rangeUnit "" pos:[211,164] width:175 height:16 labels:#("Frames", "Seconds") columns:2
editText start "start" pos:[243,112] width:90 height:25
editText stop "stop" pos:[243,136] width:90 height:25
radioButtons sampleBy "Sample by:" pos:[201,195] width:175 height:30 labels:#("Frames", "Seconds") columns:2
editText sampleFrames "" pos:[205,230] width:60 height:25
editText sampleSeconds "" pos:[291,230] width:60 height:25
listBox anims "" pos:[19,82] width:158 height:6
editText animName "" pos:[93,230] width:88 height:25
fn refresh =
(
exportVertAnims.checked = FxOgreObject.get_exportVertAnims()
vertBB.checked = FxOgreObject.get_vertBB()
shouldEnableAnimations = false
if exportVertAnims.checked then
(
shouldEnableAnimations = true
vertBB.enabled = true
)
else
(
vertBB.enabled = false
)
anims.items = getVertAnims()
animRefresh VertAnimsRollout shouldEnableAnimations
)
on VertAnimsRollout open do
(
refresh()
)
on exportVertAnims changed state do
(
if exportVertAnims.checked then
(
FxOgreObject.set_exportVertAnims("on");
vertBB.enabled = true
animRefresh VertAnimsRollout true
)
else
(
vertBB.enabled = false
FxOgreObject.set_exportVertAnims("off");
animRefresh VertAnimsRollout false
)
)
on vertBB changed state do
(
if vertBB.checked then
FxOgreObject.set_vertBB("on");
else
FxOgreObject.set_vertBB("off");
)
on add pressed do
(
startTemp = start.text as float
stopTemp = stop.text as float
rateTemp = sampleSeconds.text as float
if rangeUnit.state == 1 then
(
startTemp = startTemp / frameRate
stopTemp = stopTemp / frameRate
)
if sampleBy.state == 1 then
(
rateTemp = (sampleFrames.text as float) / frameRate
)
FxOgreObject.add_vertClipList animName.text startTemp stopTemp rateTemp
anims.items = getVertAnims()
anims.selection = 0
animName.text = ""
)
on delete pressed do
(
newIndex = anims.selection;
if newIndex == FxOgreObject.get_numClips_vertClipList() then
if newIndex > 0 then
newIndex = newIndex - 1
FxOgreObject.remove_vertClipList (anims.selection - 1)
anims.items = getVertAnims()
anims.selection = 0
animName.text = ""
)
on rangeType changed stat do
(
rangeTypeChange VertAnimsRollout
)
on rangeUnit changed stat do
(
rangeUnitChange VertAnimsRollout
)
on sampleBy changed stat do
(
sampleByChange VertAnimsRollout
)
on anims selected sel do
(
sampleBy.state = 1
rangeUnit.state = 2
rangeType.state = 2
start.enabled = true
stop.enabled = true
start.text = (FxOgreObject.get_start_vertClipList (anims.selection - 1) ) as String
stop.text = (FxOgreObject.get_stop_vertClipList (anims.selection - 1) ) as String
sampleSeconds.text = (FxOgreObject.get_rate_vertClipList (anims.selection - 1) ) as String
sampleFrames.text = ((FxOgreObject.get_rate_vertClipList (anims.selection - 1) * frameRate ) as Integer ) as String
)
)
rollout CommonParametersRollout "Common Parameters" width:350 height:145
(
radioButtons exportAll "Export:" pos:[13,10] width:75 height:46 labels:#("all ", "selected") default:1 columns:1
radioButtons exportWorldCoords "Coordinate Space:" pos:[129,10] width:60 height:46 labels:#("world", "object") default:1 columns:1
radioButtons yUpAxis "UpAxis:" pos:[255,10] width:60 height:46 labels:#("Y", "Z") default:1 columns:1
editText lum "Scale All by: " pos:[18,64] width:275 height:21
dropDownList animType "" pos:[127,90] width:166 height:24 items:#("Skeleton / Blendshape", "Vertex")
label animTypeLabel "Animation Type:" pos:[16,90] width:101 height:20
fn refresh =
(
if FxOgreObject.get_exportWorldCoords() then
exportWorldCoords.state = 1
else
exportWorldCoords.state = 2
if FxOgreObject.get_yUpAxis() then
yUpAxis.state = 1
else
yUpAxis.state = 2
if FxOgreObject.get_exportAll() then
exportAll.state = 1
else
exportAll.state = 2
lum.text = FxOgreObject.get_lum() as string
if animType.text == "Vertex" then
(
FxOgreObject.set_exportSkeleton "off"
FxOgreObject.set_exportBlendShapes "off"
VertAnimsRollout.exportVertAnims.enabled = true
SkeletonRollout.exportSkeleton.enabled = false
BlendShapesRollout.exportBlendShapes.enabled = false
)
else
(
FxOgreObject.set_exportVertAnims "off"
VertAnimsRollout.exportVertAnims.enabled = false
SkeletonRollout.exportSkeleton.enabled = true
BlendShapesRollout.exportBlendShapes.enabled = true
)
SkeletonRollout.refresh()
BlendShapesRollout.refresh()
VertAnimsRollout.refresh()
)
on CommonParametersRollout open do
(
refresh()
)
on exportAll changed stat do
(
if exportAll.state == 1 then
FxOgreObject.set_exportAll("on")
else
FxOgreObject.set_exportAll("off")
)
on exportWorldCoords changed stat do
(
if exportWorldCoords.state == 1 then
FxOgreObject.set_exportWorldCoords("on")
else
FxOgreObject.set_exportWorldCoords("off")
)
on yUpAxis changed stat do
(
if yUpAxis.state == 1 then
FxOgreObject.set_yUpAxis("on")
else
FxOgreObject.set_yUpAxis("off")
)
on animType selected stat do
(
refresh()
)
on lum entered text do
FxOgreObject.set_lum(lum.text as float);
)
function refreshControls =
(
CommonParametersRollout.refresh()
MeshRollout.refresh()
MaterialsRollout.refresh()
SkeletonRollout.refresh()
BlendShapesRollout.refresh()
VertAnimsRollout.refresh()
ScenesRollout.refresh()
)
rollout MainRollout "Main"
(
button defaultButton "Default" pos:[20,10] width:110 height:25
button refreshButton "Refresh" pos:[140,10] width:110 height:25
button clearPathButton "Clear Paths" pos:[260,10] width:110 height:25
button exportButton "Export" pos:[140,40] width:110 height:25
on exportButton pressed do
(
exportString = MeshRollout.meshFilename.text
bIsLegal = pathConfig.isLegalPath exportString
if exportString == "" then
bIsLegal = false
if bIsLegal then
FxOgreObject.fxogremaxexport()
else
(
exportString = getSaveFileName caption:"Save Ogre .MESH File" types:"Mesh(*.MESH)|*.MESH|"
if exportString != undefined then
(
FxOgreObject.set_meshFilename exportString
FxOgreObject.fxogremaxexport()
)
)
refreshControls()
)
on clearPathButton pressed do
(
FxOgreObject.set_meshFilename ""
FxOgreObject.set_skeletonFilename ""
FxOgreObject.set_materialFilename ""
FxOgreObject.set_animFilename ""
FxOgreObject.set_camerasFilename ""
FxOgreObject.set_particlesFilename ""
FxOgreObject.set_matPrefix ""
FxOgreObject.set_texOutputDir ""
FxOgreObject.set_sceneFilename ""
refreshControls()
)
on refreshButton pressed do
refreshControls()
on defaultButton pressed do
(
FxOgreObject.reset_params()
refreshControls()
)
)
addrollout MainRollout FxOgreMaxExporterDialog
addrollout CommonParametersRollout FxOgreMaxExporterDialog
addrollout MeshRollout FxOgreMaxExporterDialog
addrollout MaterialsRollout FxOgreMaxExporterDialog
addrollout ScenesRollout FxOgreMaxExporterDialog
addrollout SkeletonRollout FxOgreMaxExporterDialog
addrollout BlendShapesRollout FxOgreMaxExporterDialog
addrollout VertAnimsRollout FxOgreMaxExporterDialog