Saturday, 2 March 2013

Export Selection Individually (mostly for UDK)

Scenario:
  • Many objects in scene
  • Each object needs to be exported as FBX separately
  • Each object is named
Usage:
  • name your objects
  • select one or more geometry objects
  • run script
  • fbx files will be found in directory of max file in the folder "fbx"

Update: now supports one collision object per model, prefixed "UCX_"
Update: now exports with smoothing groups by default
Update: plays nicer with groups (ignoring the contents of groups and only exporting the group itself)
  
   
-- Mixescript snippet: export selection individually
-- exports each object in your selection on its own.

-- USAGE
-- name your objects
-- select one or more geometry objects
-- run script
-- fbx files will be found in directory of max file in the folder "fbx"

--SETTINGS
ShowCompletedMessage = True

if selection.count == 0 then 
  (
  messagebox("please select an object first.")
 )
else 
 (
  filepath = maxfilepath + "fbx\\"
  if doesFileExist filepath == false then (
   --messagebox("making new folder")
   makedir filepath
  )
  FBXExporterSetParam "SmoothingGroups" true
  
  objarray = getCurrentSelection()
  exportedcount = 0
  
  for obj in objarray do 
  (
   if (matchpattern obj.name pattern:"UCX*" == false) then
   (
    if (matchpattern obj.name pattern:"*-*") then
   (messagebox("object name may not contain hyphens"))
    else 
    (
     if isGroupMember obj == false then 
   (
    --Get original position and move to world zero
    originallocation = obj.pos
    obj.pos = [0,0,0]

    -- Reset xform
     ResetXForm selection
    macros.run "Modifier Stack" "Convert_to_Poly"

    -- Export
    select obj
    execute("colobj = $UCX_" + obj.name)
    if colobj != undefined then 
    (
     coloriginallocation = colobj.pos
     colobj.pos = [0,0,0]
     selectmore colobj
    )
    
    exportpath = maxfilepath + "fbx\\" + obj.name + ".FBX"
    redrawViews()  
    exportFile exportpath #noPrompt selectedOnly:true
    --alternatively, bring up dialogue to ensure settings
    --actionMan.executeAction 0 "40373"  -- File: Export Selected
    print ("exported " + obj.name)

     -- Restore to original position
    obj.pos = originallocation
    if colobj != undefined then 
    (
     colobj.pos = coloriginallocation
    )
    exportedcount += 1
   )
  )
 )
 )


  select objarray  
  redrawViews()  
  if ShowCompletedMessage then (messagebox("exported " + (exportedcount as string) + " objects successfully to " + maxfilepath + "fbx\\"))
 )
  

No comments:

Post a Comment