# make animation avi from multiple odb files with the same base name

from abaqus import *
from abaqusConstants import *
import odbAccess
import animation
import annotationToolset
from odbAccess import *
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()


baseName = "inertia_weld"
#baseName = getInput('basename')
session.imageAnimationOptions.setValues(vpDecorations=OFF, timeScale=1, frameRate=30)
m=session.imageAnimation()
if m!=None :
  m.close()
movie = session.ImageAnimation(fileName=baseName+"_animation", format=AVI)
viewport = session.viewports['Viewport: 1']
viewport.makeCurrent()
viewport.restore()
viewport.setValues(origin=(0.0, -101.821662902832), 
              width=214.481246948242, height=209.527496337891)
remeshNumber = 0
totalTime = 0.0
cont = True
while cont:
  if remeshNumber == 0:
    fileName = baseName + ".odb"
  else:
    fileName = baseName + "_remesh_" + "%i" % (remeshNumber) + ".odb"
  try:
    odb = session.openOdb(name=fileName)
    viewport.setValues(displayedObject=odb)
    viewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF, ))
    viewport.odbDisplay.setPrimaryVariable(
      variableLabel='NT11', outputPosition=NODAL)
    viewport.odbDisplay.contourOptions.setValues(
      maxAutoCompute=OFF, maxValue=1300, minAutoCompute=OFF, minValue=0)
    viewport.view.setValues(cameraPosition=(45.8176,-0.182533, 180.4),
                            cameraTarget=(45.8176, -0.182533, 0))
    viewport.viewportAnnotationOptions.setValues(triad=OFF, 
                                                 title=OFF,
                                                 state=OFF,
                                                 statePosition=(50,99),
                                                 annotations=ON,
                                                 compass=OFF,
        legendFont='-*-verdana-medium-r-normal-*-*-100-*-*-p-*-*-*')
    countName = "Remesh counter: " + "%2i" % (remeshNumber) 
    countText = odb.userData.Text(name='remeshCount', text=countName,
                                                     offset=(145.0, 165.0))
    odb.userData.annotations['remeshCount'].setValues(font='-*-arial-medium-r-normal-*-*-140-*-*-p-*-*-*')
    viewport.plotAnnotation(annotation=countText)
    step = odb.steps['Weld step']
    frameCount = 0
    for frame in step.frames:
      frameCount = frameCount + 1
      stepTime = frame.frameValue
      timeName = "Time: " + "%5.2f" % (totalTime + stepTime) + "s"
      timeText = odb.userData.Text(name='timeText', text=timeName,
                                                      offset=(170.0, 170.0))
      odb.userData.annotations['timeText'].setValues(font='-*-arial-medium-r-normal-*-*-140-*-*-p-*-*-*')
      viewport.plotAnnotation(annotation=timeText)
      viewport.odbDisplay.setFrame(frame)
      try:
        viewport.odbDisplay.setDeformedVariable(variableLabel='UNEW')
      except:
        print "You must have UNEW created in odb ",fileName
      #Write all but the final frame, which is redundant with frame 0 of the next job
      if frameCount != len(step.frames):
        try:
          movie.writeFrame()
        except:
          pass
    remeshNumber = remeshNumber + 1
    totalTime = totalTime + stepTime
    session.odbs[fileName].close()
  except:
    cont = False
movie.close()
sys.exit()