Notifications
Clear all

[Closed] Max file watchfolder for render submition

Hey everyone I am trying to write a script that “watchs” a specified folder for .max files with cameras inside and renders it out.

3dsmax keeps crashing or endless looping on this.
I plan to release this free, so anyone can use it. but I need help to debug it.

take a look and let me know where the error is.

try (destroyDialog renderWatchFolder_tool) catch()
rollout renderWatchFolder_tool “Watch DOG – 4 xewinga Master” width:300 height:160
(
local printFileCount
local renderType
local renderFolder
local rFolder
local tempMap
local filePath
local renFolder
local doneRender
fn arrayToString arrayIn = (
stringedArray = “”
for i in arrayIn do (
append stringedArray (i as string)
)
stringedArray
)
fn fTime =(
glt =getLocalTime()
gltFormatted = (glt[4] as string)+ (glt[2] as string)+ (glt[1] as string)+ “_”+(glt[5] as string)+ (glt[6] as string)
return gltFormatted
)

fn renderFiles rFolder = ( —render type NETWORK or LOCAL INTEGER 1 or 2 — renderFolder is the watchfolder
if (((getFiles (rFolder + “*.max”)).count) > 0) then (
filesToRender = getFiles (rFolder +”*.max”)
for f in filesToRender do (
loadMaxFile f useFileUnits:true quiet:true
fileSerialNumber = timestamp() as string
out_log_file = maxFilePath+ (getFilenameFile maxFileName) + fileSerialNumber + “_ ERROR_LOG.txt”
out_log_file_name = createFile out_log_file
format “The following errors were found and fixed with the default settings: \n” to:out_log_file_name

def_saveDir_frames = (maxfilePath + fileSerialNumber +”_”+ (getFilenameFile maxFileName)+”_frames”)
makedir def_saveDir_frames all:true

—–what to do in the file
renderSceneDialog.close()

if (rendSaveFile == false) then(
format “Render Save File not Checked: %\n” rendSaveFile to:out_log_file_name
rendSaveFile = true
renderSceneDialog.update()
)

fileCams = for c in cameras where (classof c != Targetobject) and (findString c.name “render” != undefined) collect c
print fileCams

if ((fileCams.count) > 0) then (
for cam in fileCams do (
def_savePath_frames = def_saveDir_frames +”\”+(getFilenameFile maxFileName)+ fileSerialNumber +”_” + cam.name +”.png”
print cam.name
print def_savePath_frames
—render cam outputFile:def_savePath_frames
—vfbcontrol #saveallimage def_savePath_frames
rendOutputFilename = def_savePath_frames
renderSceneDialog.update()
renderSceneDialog.close()
viewport.setCamera cam

max quick render

)
)
/*
for c =1 to fileCams.count do (
def_savePath_frames = def_saveDir_frames +”\”+(getFilenameFile maxFileName)+”“+fileSerialNumber+”“+ fileCams[c].name +”.png”
print def_savePath_frames
—rendOutputFilename = def_savePath_frames
render fileCams[c] outputFile:def_savePath_frames

)
*/

close out_log_file_name

doneRender =(rFolder + “_rendered”)
renderedFile = (doneRender +”\” + (getFilenameFile maxfilename) +”_”+ fileSerialNumber +”_Rendered.max” )
saveMaxFile renderedFile useNewFile:true

resetMaxFile #noPrompt

deleteFile f

)

)
)

global theTimer = dotNetObject “System.Windows.Forms.Timer”

checkbutton bt_watch “START WATCHING!” width:250 height:60 checked:false tooltip:“Starts Watching!”
group “Directory to Watch:”
(
editText watch_path “Location:” labelOnTop:true text:“F:_TRASHRENDER”
button btn_browse “Browse…”
)

on btn_browse pressed do
(
filePath = getSavePath caption:“my title” initialDir:“F:_TRASHRENDER”
watch_path.text = filePath
makedir (watch_path.text + “_rendered”)
)
on bt_watch changed state do (

if state == true then(
renFolder = watch_path.text
makedir (renFolder + “_rendered”)
fn renderingTheFiles = (renderFiles renFolder)
dotNet.addEventHandler theTimer “Tick” renderingTheFiles
theTimer.interval = 1000
print “on”
theTimer.start()

bt_watch.text = “WATCHING BITCH”
)
else (
print “off”
theTimer.stop()

)
)

)
createdialog renderWatchFolder_tool

2 Replies

Could you first format the code so that it is at least readable? Do you think anyone would want to “debug” this mess?

try (destroyDialog renderWatchFolder_tool)
catch ()
rollout renderWatchFolder_tool“ Watch DOG – 4 xewinga Master” width: 300 height: 160(
local printFileCount local renderType local renderFolder local rFolder local tempMap local filePath local renFolder local doneRender fn arrayToString arrayIn = (
stringedArray = “”
for i in arrayIn do(
append stringedArray(i as string)
)
stringedArray
) fn fTime = (
glt = getLocalTime() gltFormatted = (glt[4] as string) + (glt[2] as string) + (glt[1] as string) + “_” + (glt[5] as string) + (glt[6] as string) return gltFormatted
)

    fn renderFiles rFolder = (—render type NETWORK or LOCAL INTEGER 1 or 2— renderFolder is the watchfolder
        if (((getFiles(rFolder + “ * .max”)).count) > 0) then(
            filesToRender = getFiles(rFolder + "*.max") for f in filesToRender do(
                loadMaxFile f useFileUnits: true quiet: true fileSerialNumber = timestamp() as string out_log_file = maxFilePath + (getFilenameFile maxFileName) + fileSerialNumber + “_ ERROR_LOG.txt” out_log_file_name = createFile out_log_file format“ The following errors were found and fixed with the
                default settings: \n” to: out_log_file_name

                def_saveDir_frames = (maxfilePath + fileSerialNumber + "_" + (getFilenameFile maxFileName) + "_frames") makedir def_saveDir_frames all: true

                -- -- - what to do inthe file
                renderSceneDialog.close()

                if (rendSaveFile == false) then(
                    format“ Render Save File not Checked: % \n” rendSaveFile to: out_log_file_name rendSaveFile = true renderSceneDialog.update()
                )

                fileCams =
                for c in cameras where(classof c != Targetobject) and(findString c.name“ render” != undefined) collect c print fileCams

                if ((fileCams.count) > 0) then(
                        for cam in fileCams do(
                            def_savePath_frames = def_saveDir_frames + "\"+(getFilenameFile maxFileName)+ fileSerialNumber +"
                            _ " + cam.name +".png "
                            print cam.name print def_savePath_frames— render cam outputFile: def_savePath_frames— vfbcontrol# saveallimage def_savePath_frames rendOutputFilename = def_savePath_frames renderSceneDialog.update() renderSceneDialog.close() viewport.setCamera cam

                            max quick render

                        )
                    )
                    /*
                    for c =1 to fileCams.count do (
                    def_savePath_frames = def_saveDir_frames +"\"+(getFilenameFile maxFileName)+""+fileSerialNumber+""+ fileCams[c].name +".png"
                    print def_savePath_frames
                    —rendOutputFilename = def_savePath_frames
                    render fileCams[c] outputFile:def_savePath_frames

                    )
                    */
                close out_log_file_name

                doneRender = (rFolder + “_rendered”) renderedFile = (doneRender + "\" + (getFilenameFile maxfilename) +"
                    _ "+ fileSerialNumber +"
                    _Rendered.max " )
                    saveMaxFile renderedFile useNewFile: true

                    resetMaxFile# noPrompt

                    deleteFile f

                )

            )
        )

        global theTimer = dotNetObject“ System.Windows.Forms.Timer”

        checkbutton bt_watch“ START WATCHING!”width: 250 height: 60 checked: false tooltip: “Starts Watching!”
        group“ Directory to Watch: ”
        (
            editText watch_path“ Location: ”labelOnTop: true text: “F: _TRASHRENDER” button btn_browse“ Browse…”
        )

        on btn_browse pressed do
            (
                filePath = getSavePath caption: “my title” initialDir: “F: _TRASHRENDER” watch_path.text = filePath makedir(watch_path.text + “_rendered”)
            )
        on bt_watch changed state do(

            if state == true then(
                renFolder = watch_path.text makedir(renFolder + “_rendered”) fn renderingTheFiles = (renderFiles renFolder) dotNet.addEventHandler theTimer“ Tick” renderingTheFiles theTimer.interval = 1000 print“ on” theTimer.start()

                bt_watch.text = “WATCHING BITCH”
            )
            else(
                print“ off” theTimer.stop()

            )
        )

    ) createdialog renderWatchFolder_tool