forked from bartvdbraak/blender
158 lines
4.3 KiB
Python
158 lines
4.3 KiB
Python
#!BPY
|
|
|
|
""" Registration info for Blender menus: <- these words are ignored
|
|
Name: 'Lightwave Motion (.mot)...'
|
|
Blender: 241
|
|
Group: 'Export'
|
|
Tip: 'Export Loc Rot Size chanels to a Lightwave .mot file'
|
|
"""
|
|
|
|
__author__ = "Daniel Salazar (ZanQdo)"
|
|
__url__ = ("blender", "blenderartists.org",
|
|
"e-mail: zanqdo@gmail.com")
|
|
__version__ = "16/04/08"
|
|
|
|
__bpydoc__ = """\
|
|
This script exports the selected object's motion channels to Lightwave
|
|
motion files (.mot).
|
|
|
|
Usage:
|
|
Run the script with one or more objects selected (any kind), frames exported
|
|
are between Start and End frames in Render buttons.
|
|
|
|
"""
|
|
|
|
# $Id$
|
|
# --------------------------------------------------------------------------
|
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
#
|
|
# Copyright (C) 2003, 2004: A Vanpoucke
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
#
|
|
# ***** END GPL LICENCE BLOCK *****
|
|
# --------------------------------------------------------------------------
|
|
import Blender as B
|
|
import math as M
|
|
#------------------------------------
|
|
#Declarados:
|
|
TotalCanales = 9
|
|
#------------------------------------
|
|
|
|
def FuncionPrincipal (Dir):
|
|
B.Window.WaitCursor(1)
|
|
ObjSelect = B.Object.GetSelected()
|
|
|
|
if not ObjSelect:
|
|
B.Draw.PupMenu('Select 1 or more objects, aborting.')
|
|
return
|
|
|
|
if not Dir.lower().endswith('.mot'):
|
|
Dir += '.mot'
|
|
|
|
|
|
SC = B.Scene.GetCurrent()
|
|
SCR = SC.getRenderingContext()
|
|
|
|
for ob in ObjSelect:
|
|
origName= NombreObjeto= ob.name
|
|
print '----\nExporting Object "%s" motion file...' % origName
|
|
|
|
FrameA = B.Get('curframe')
|
|
FrameP = B.Get('staframe')
|
|
FrameF = B.Get('endframe')
|
|
|
|
FrameRate = float(SCR.framesPerSec())
|
|
|
|
#---------------------------------------------
|
|
|
|
# Replace danger characters by '_'
|
|
for ch in ' /\\~!@#$%^&*()+=[];\':",./<>?\t\r\n':
|
|
NombreObjeto = NombreObjeto.replace(ch, '_')
|
|
|
|
# Check for file path extension
|
|
if len(ObjSelect) > 1:
|
|
DirN= '%s_%s.mot' % (Dir[:-4], NombreObjeto)
|
|
else:
|
|
DirN= Dir
|
|
|
|
# Open the file
|
|
File = open(DirN,'w')
|
|
File.write ('LWMO\n3\n\n') # 3 is the version number.
|
|
|
|
# number of channels
|
|
File.write ('NumChannels %i\n' % TotalCanales)
|
|
|
|
# ----------------------------
|
|
# Main Cycle
|
|
|
|
def CicloPrimario(NumCanal):
|
|
B.Set('curframe', FrameP)
|
|
|
|
File.write ('Channel %i\n{ Envelope\n %i\n' % (NumCanal, (FrameF - FrameP + 1)))
|
|
|
|
FrameA = FrameP
|
|
while FrameA < (FrameF + 1):
|
|
|
|
B.Set('curframe', FrameA)
|
|
|
|
mat= ob.mat # Worldspace matrix
|
|
|
|
if NumCanal == 0:
|
|
Val = mat.translationPart().x
|
|
elif NumCanal == 1:
|
|
Val = mat.translationPart().z
|
|
elif NumCanal == 2:
|
|
Val = mat.translationPart().y
|
|
elif NumCanal == 3:
|
|
Val = M.radians (-mat.toEuler().z)
|
|
elif NumCanal == 4:
|
|
Val = M.radians (-mat.toEuler().x)
|
|
elif NumCanal == 5:
|
|
Val = M.radians (-mat.toEuler().y)
|
|
elif NumCanal == 6:
|
|
Val = mat.scalePart().x
|
|
elif NumCanal == 7:
|
|
Val = mat.scalePart().z
|
|
elif NumCanal == 8:
|
|
Val = mat.scalePart().y
|
|
File.write (' Key %f %f 3 0 0 0 0 0 0\n' % (Val, (FrameA/FrameRate)))
|
|
|
|
FrameA += 1
|
|
# Ending Stuff
|
|
File.write (' Behaviors 1 1\n}\n')
|
|
|
|
NumObjetoActual = len(ObjSelect)
|
|
Iteraciones = 0
|
|
ProgBarVal = 0.0
|
|
while Iteraciones < TotalCanales:
|
|
CicloPrimario(Iteraciones)
|
|
|
|
# Start Progress Bar
|
|
B.Window.DrawProgressBar(ProgBarVal, origName)
|
|
ProgBarVal = (float(Iteraciones) / TotalCanales) * 0.98
|
|
Iteraciones += 1
|
|
|
|
B.Window.DrawProgressBar(1.0, '') # Done
|
|
print '\nDone, %s motion file location is:\n%s\n' % (origName, DirN)
|
|
B.Window.WaitCursor(0)
|
|
|
|
# Check if there are selected objects
|
|
def main():
|
|
B.Window.FileSelector(FuncionPrincipal, "Write .mot File", B.sys.makename(ext='.mot'))
|
|
|
|
if __name__=='__main__':
|
|
main()
|