From 218438e63f0e2d295e85f0039aee7424bc58c2d7 Mon Sep 17 00:00:00 2001 From: aurel Date: Sat, 15 Mar 2014 14:39:01 +0100 Subject: [PATCH] Refactoring and adding render image and animation tasks. --- settings.gradle | 1 + .../{ => blender}/fbxconv/FbxConv.groovy | 4 +- .../blender/render/RenderAnimation.groovy | 42 +++++++++++++ .../eowise/blender/render/RenderImage.groovy | 59 +++++++++++++++++++ .../render/specs/RenderSceneSpec.groovy | 27 +++++++++ 5 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 settings.gradle rename src/main/groovy/com/eowise/{ => blender}/fbxconv/FbxConv.groovy (93%) create mode 100644 src/main/groovy/com/eowise/blender/render/RenderAnimation.groovy create mode 100644 src/main/groovy/com/eowise/blender/render/RenderImage.groovy create mode 100644 src/main/groovy/com/eowise/blender/render/specs/RenderSceneSpec.groovy diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..78c20b9 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'blender' \ No newline at end of file diff --git a/src/main/groovy/com/eowise/fbxconv/FbxConv.groovy b/src/main/groovy/com/eowise/blender/fbxconv/FbxConv.groovy similarity index 93% rename from src/main/groovy/com/eowise/fbxconv/FbxConv.groovy rename to src/main/groovy/com/eowise/blender/fbxconv/FbxConv.groovy index b0271a1..e30b0aa 100644 --- a/src/main/groovy/com/eowise/fbxconv/FbxConv.groovy +++ b/src/main/groovy/com/eowise/blender/fbxconv/FbxConv.groovy @@ -1,4 +1,4 @@ -package com.eowise.fbxconv +package com.eowise.blender.fbxconv import org.gradle.api.DefaultTask import org.gradle.api.file.FileCollection @@ -44,7 +44,7 @@ class FbxConv extends DefaultTask { String outputFile = file.name.replaceFirst(~/\.[^\.]+$/, '') + ".${format.toLowerCase()}" project.exec { commandLine 'fbx-conv' - args '-o', format, file + args '-f', '-o', format, file } project.copy { from file.parentFile diff --git a/src/main/groovy/com/eowise/blender/render/RenderAnimation.groovy b/src/main/groovy/com/eowise/blender/render/RenderAnimation.groovy new file mode 100644 index 0000000..248589d --- /dev/null +++ b/src/main/groovy/com/eowise/blender/render/RenderAnimation.groovy @@ -0,0 +1,42 @@ +package com.eowise.blender.render + +import com.eowise.blender.render.specs.RenderSceneSpec +import org.gradle.api.DefaultTask +import org.gradle.api.Task +import org.gradle.api.tasks.TaskAction + +/** + * Created by aurel on 12/03/14. + */ +class RenderAnimation extends DefaultTask { + + RenderSceneSpec spec; + + RenderAnimation() { + spec = new RenderSceneSpec() + } + + Task configure(Closure configureClosure) { + + project.configure(spec, configureClosure) + + return this; + } + + @TaskAction + def run() { + project.delete project.fileTree(dir: spec.blendFile.getParent(), include: '*.png') + project.delete spec.blendFile.getParent() + '/tmp' + + project.exec { + commandLine 'blender', '-b', spec.blendFile, '-F', 'PNG', '-S', spec.scene, '-s', start, '-e', end, '-a' + } + + project.copy { + from spec.blendFile.getParent() + '/tmp' + into spec.outputPath + include '*.png' + rename ~/([^\.]+)\.png/, spec.scene.toLowerCase() + '$1.png' + } + } +} \ No newline at end of file diff --git a/src/main/groovy/com/eowise/blender/render/RenderImage.groovy b/src/main/groovy/com/eowise/blender/render/RenderImage.groovy new file mode 100644 index 0000000..1be5857 --- /dev/null +++ b/src/main/groovy/com/eowise/blender/render/RenderImage.groovy @@ -0,0 +1,59 @@ +package com.eowise.blender.render + +import com.eowise.blender.render.specs.RenderSceneSpec +import org.gradle.api.DefaultTask +import org.gradle.api.Task +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction + +/** + * Created by aurel on 12/03/14. + */ +class RenderImage extends DefaultTask { + + RenderSceneSpec spec; + + RenderImage() { + spec = new RenderSceneSpec() + } + + @InputFile + File getBlendFile() { + return spec.blendFile + } + + @Input + String getScene() { + return spec.scene + } + + @OutputDirectory + File getOutputDirectory() { + return spec.outputPath + } + + @Override + Task configure(Closure configureClosure) { + + project.configure(spec, configureClosure) + + return this; + } + + @TaskAction + def run() { + + project.exec { + commandLine 'blender', '-b', getBlendFile(), '-o', "${temporaryDir}/${name}-####", '-F', 'PNG', '-S', getScene(), '-f', 1 + } + + project.copy { + from temporaryDir + into getOutputDirectory() + include "${name}-0001.png" + rename { fileName -> getScene().toLowerCase() + '.png'} + } + } +} diff --git a/src/main/groovy/com/eowise/blender/render/specs/RenderSceneSpec.groovy b/src/main/groovy/com/eowise/blender/render/specs/RenderSceneSpec.groovy new file mode 100644 index 0000000..df22ce0 --- /dev/null +++ b/src/main/groovy/com/eowise/blender/render/specs/RenderSceneSpec.groovy @@ -0,0 +1,27 @@ +package com.eowise.blender.render.specs + +/** + * Created by aurel on 15/03/14. + */ +class RenderSceneSpec { + + File blendFile + String scene + File outputPath + + public RenderScene() { + } + + def from(File file) { + blendFile = file + } + + def render(String sceneName) { + scene = sceneName + } + + def into(File path) { + outputPath = path + } + +}