------------------------------------------------------------------------------------------------------------------------------- -- Batch Render Assistant ------------------------------------------------------------------------------------------------------------------------------- -- Motif -- The max built-in tool Batch Render can only be operated in a single-selected way which in not very convenient. -- So I create this tool to help you manipulate Batch Render in a multi-selected way. -- Their interfaces are nearly the same. ------------------------------------------------------------------------------------------------------------------------------- -- Usage -- 1.Add new views of which count is based on the spinner value to the right of the Add button. -- 2.Hold down Shift or drag from the empty bottom space to multi-select items on the list. -- 3.Change the parameters of each selected Batch Render View at one time. -- 4.Change name by clicking and staying on the item you want then enter a new name. -- 5.Delete all Views at one time. -- Delete selected Views; delete invert selection of selected Views. -- -- 6.Save data to .brd file; open .brd file then create batch render view based on the data. -- -- 7.Double clicking left mouse button on the left part of the dialog can quickly widen the dialog and columns. -- Double clicking left mouse button on the right part of the dialog can quickly shorten the dialog and columns. -- 8.Holding down right mouse button and then moving mouse within the dialog area can quickly change the width of columns. -- 9.Holding down left mouse button and then moving mouse within the dialog area can drag the dialog as you drag it in the title area. ------------------------------------------------------------------------------------------------------------------------------- -- Max Version Requirment -- max 2009 and higher ------------------------------------------------------------------------------------------------------------------------------- -- Author Information -- author: Jausn (Chinese Name:Jin Xi) -- E-mail: ausn_shi@yahoo.com.cn ------------------------------------------------------------------------------------------------------------------------------- -- batch render assistant main rollout rollout batRendAssistRoll "Batch Render Assistant" width:542 height:495 ( -- interface ----------------------------------------------------------------------------------- ---- batch render list group GroupBox batRenListGb "Batch Render List" pos:[8,7] width:527 height:321 button openbatRenMgrBt "" pos:[16,27] width:10 height:18 toolTip:"Open Batch Render Manager" button scanBatBt "Scan" pos:[27,27] width:40 height:18 tooltip:"Scan Data of Batch Render" button addBatBt "Add" pos:[100,27] width:40 height:18 tooltip:"Add Batch Render View" spinner addNumSp "" pos:[140,28] width:45 height:16 type:#integer range:[1,100,1] button duplicateBatBt "Duplicate" pos:[188,27] width:66 height:18 tooltip:"Duplicate Batch Render View" button delBatBt "Delete" pos:[337,27] width:46 height:18 tooltip:"Delete Selected Batch Render View" button delInvertBatBt "Delete Invert" pos:[385,27] width:76 height:18 tooltip:"Delete Invert Batch Render View" button delAllBatBt "Delete All" pos:[463,27] width:64 height:18 tooltip:"Delete All Batch Render View" dotNetControl batRenLv "System.Windows.Forms.ListView" pos:[14,49] width:514 height:270 ---- batch render parameters group GroupBox batRenParaGb "Batch Render Parameters" pos:[8,336] width:527 height:122 checkbox batAllOnCkb "All On" pos:[16,354] width:60 height:16 checkbox overrideCkb "Override" pos:[147,354] width:75 height:16 spinner startFSp "Frame Start:" pos:[62,376] width:75 height:16 type:#integer range:[-50000,50000,0] spinner endFSp "Frame End:" pos:[190,376] width:75 height:16 type:#integer range:[-50000,50000,0] spinner widthSp "Width:" pos:[68,401] width:70 height:16 type:#integer range:[1,20000,1] spinner heightSp "Height:" pos:[194,401] width:72 height:16 type:#integer range:[1,20000,1] label camsLab "Camera:" pos:[315,353] width:38 height:16 dropDownList camsDdl "" pos:[360,350] width:168 height:22 label sceneStateLab "Scene State:" pos:[292,378] width:62 height:16 dropDownList sceneStateDdl "" pos:[360,375] width:168 height:22 label renPresetLab "Render Preset:" pos:[284,403] width:71 height:16 dropDownList renPresetDdl "" pos:[360,400] width:168 height:22 label pathLab "Output Path:" pos:[16,431] width:95 height:20 button pathBt "..." pos:[80,429] width:25 height:20 tooltip:"Save File" edittext pathEt "" pos:[105,429] width:423 height:20 readOnly:true ---- load save create and render button button loadBt "Load..." pos:[8,464] width:70 height:24 tooltip:"Load Data" button saveBt "Save..." pos:[90,464] width:70 height:24 tooltip:"Save Data" button createBt "Create" pos:[200,464] width:70 height:24 tooltip:"Create Batch Render" enabled:false checkbox net_Render "Net Render" pos:[300,474] width:120 height:16 button renderBatBt "Render" pos:[465,464] width:70 height:24 tooltip:"Start Render" -- variable ----------------------------------------------------------------------------------- ---- array ------ batch render parameters of the scene local batRensName = #(), batRensCam = #(), batRensSceneState = #(), batRensRange = #(), batRensSize = #(), batRensPath = #(), batRensChecked = #(), batRensPresets = #(), batRensOverride = #() local SelectedIndexs = #() local renPresetsName = #(),renPresetsPath = #() local camsName = #(),sceneStatesName = #() ---- drag dialog control local lMouseIsDown = false,lPos = [0,0],titleSize = [3,22] ---- drag right mouse button local rMouseIsDown = false,rPos = [0,0] -- function ----------------------------------------------------------------------------------- ---- collect ------ collect camera name in the scene fn collectDataOfCams camsName = ( append camsName "" for i in cameras do if classOf i != Targetobject do append camsName i.name sort camsName ) ------ collect data of scene state fn collectDataOfSceneStates sceneStatesName = ( append sceneStatesName "" for i = 1 to sceneStateMgr.GetCount() do ( local sceneSta = sceneStateMgr.GetSceneState i append sceneStatesName sceneSta ) sort sceneStatesName ) ------ collect data of render preset fn collectDataOfRenPresets renPresetsName renPresetsPath = ( append renPresetsName "" append renPresetsPath "" local presetFiles = getFiles (GetDir #maxroot + "renderpresets\\*.rps") for i in presetFiles do ( append renPresetsPath i append renPresetsName (getFilenameFile i) ) ) ------ collect data of batch render fn collectDataOfBatRen = ( -- clear array batRensName = #() batRensCam = #() batRensRange = #() batRensSceneState = #() batRensSize = #() batRensPath = #() batRensChecked = #() batRensPresets = #() -- collect data of batch render in the scene local batRenNum = batchRenderMgr.numViews for i = 1 to batRenNum do ( local batRen = batchRenderMgr.getView i append batRensName batRen.name try(append batRensCam batRen.camera.name) catch(append batRensCam "Viewport") append batRensSceneState batRen.sceneStateName append batRensRange ((((batRen.startFrame as integer)/TicksPerFrame) as string)+" - "+(((batRen.endFrame as integer)/TicksPerFrame) as string)) append batRensSize ((batRen.width as string)+"*"+(batRen.height as string)) append batRensPath batRen.outputFilename append batRensChecked batRen.enabled append batRensPresets (getFilenameFile batRen.presetFile) append batRensOverride batRen.overridePreset ) ) ---- create list view ------ initialize the list view fn initListView lv = ( -- common properties of list view lv.View = lv.View.Details lv.fullRowSelect = true lv.checkBoxes = true lv.HeaderStyle = lv.HeaderStyle.Nonclickable lv.LabelEdit = true lv.HideSelection = false local dNColor = dotNetClass "System.Drawing.Color" lv.foreColor = dNColor.fromARGB 185 185 185 lv.backColor = dNColor.fromARGB 75 75 75 -- add column with name and width lv.Columns.add "Name" 115 lv.Columns.add "Camera" 80 lv.Columns.add "Scene State" 115 lv.Columns.add "Range" 55 lv.Columns.add "Size" 55 lv.Columns.add "OutPut Path" 140 lv.Columns.add "Preset" 100 ) ------ fill the list items fn fillInSpreadSheet lv = ( -- add items to listView local theRange = #() for j = 1 to batRensName.count do ( -- First create a ListViewItem object with the name of batch render: li = dotNetObject "System.Windows.Forms.ListViewItem" batRensName[j] li.checked = batRensChecked[j] -- Then add all the sub-items with the desired string values: sub_li = li.SubItems.add batRensCam[j] sub_li = li.SubItems.add batRensSceneState[j] sub_li = li.SubItems.add batRensRange[j] sub_li = li.SubItems.add batRensSize[j] sub_li = li.SubItems.add batRensPath[j] sub_li = li.SubItems.add batRensPresets[j] append theRange li -- add the list item to the array ) lv.Items.AddRange theRange -- populate the ListView ) ---- save and load ------ save fn saveData outputBrd = ( local outputBrdFileStream = createfile outputBrd -- output name print "Name" to:outputBrdFileStream print batRensName to:outputBrdFileStream print "Name" to:outputBrdFileStream -- output camera print "Cam" to:outputBrdFileStream print batRensCam to:outputBrdFileStream print "Cam" to:outputBrdFileStream -- output scene state print "State" to:outputBrdFileStream print batRensSceneState to:outputBrdFileStream print "State" to:outputBrdFileStream -- output range print "Range" to:outputBrdFileStream print batRensRange to:outputBrdFileStream print "Range" to:outputBrdFileStream -- output size print "Size" to:outputBrdFileStream print batRensSize to:outputBrdFileStream print "Size" to:outputBrdFileStream -- output path print "Path" to:outputBrdFileStream print batRensPath to:outputBrdFileStream print "Path" to:outputBrdFileStream -- output checked print "Checked" to:outputBrdFileStream print batRensChecked to:outputBrdFileStream print "Checked" to:outputBrdFileStream -- output presets print "Presets" to:outputBrdFileStream print batRensPresets to:outputBrdFileStream print "Presets" to:outputBrdFileStream -- output override print "Override" to:outputBrdFileStream print batRensOverride to:outputBrdFileStream print "Override" to:outputBrdFileStream close outputBrdFileStream ) ------ load fn loadData inputBrd = ( -- clear array batRensName = #() batRensCam = #() batRensSceneState = #() batRensRange = #() batRensSize = #() batRensPath = #() batRensChecked = #() batRensPresets = #() batRensOverride = #() local data = #() -- store all data local inputBrdFileStream = openFile inputBrd while not eof inputBrdFileStream do ( local eachValue = readValue inputBrdFileStream append data eachValue ) close inputBrdFileStream -- key string position array local nameItems = #(), camItems = #(), stateItems = #(), rangeItems = #(), sizeItems = #(), pathItems = #(), checkedItems = #(), presetsItems = #(), overrideItems = #() -- collect key string position for i = 1 to data.count do case data[i] of ( "Name" :append nameItems i "Cam" :append camItems i "State":append stateItems i "Range":append rangeItems i "Size":append sizeItems i "Path":append pathItems i "Checked":append checkedItems i "Presets":append presetsItems i "Override":append overrideItems i ) -- collect name for i = (nameItems[1]+1) to (nameItems[2]-1) do append batRensName data[i] -- collect camera for i = (camItems[1]+1) to (camItems[2]-1) do append batRensCam data[i] -- collect scene state for i = (stateItems[1]+1) to (stateItems[2]-1) do append batRensSceneState data[i] -- collect range for i = (rangeItems[1]+1) to (rangeItems[2]-1) do append batRensRange data[i] -- collect size for i = (sizeItems[1]+1) to (sizeItems[2]-1) do append batRensSize data[i] -- collect path for i = (pathItems[1]+1) to (pathItems[2]-1) do append batRensPath data[i] -- collect checked for i = (checkedItems[1]+1) to (checkedItems[2]-1) do append batRensChecked data[i] -- collect presets for i = (presetsItems[1]+1) to (presetsItems[2]-1) do append batRensPresets data[i] -- collect override for i = (overrideItems[1]+1) to (overrideItems[2]-1) do append batRensOverride data[i] ) ---- set controls to enabled or not enabled ------ enabled fn setCtrlsToEnabled = ( addBatBt.enabled = true addNumSp.enabled = true duplicateBatBt.enabled = true delBatBt.enabled = true delInvertBatBt.enabled = true delAllBatBt.enabled = true batAllOnCkb.enabled = true overrideCkb.enabled = true startFSp.enabled = true endFSp.enabled = true widthSp.enabled = true heightSp.enabled = true camsDdl.enabled = true sceneStateDdl.enabled = true renPresetDdl.enabled = true pathBt.enabled = true saveBt.enabled = true renderBatBt.enabled = true ) ------ not enabled fn setCtrlsToNotEnabled = ( addBatBt.enabled = false addNumSp.enabled = false duplicateBatBt.enabled = false delBatBt.enabled = false delInvertBatBt.enabled = false delAllBatBt.enabled = false batAllOnCkb.enabled = false overrideCkb.enabled = false startFSp.enabled = false endFSp.enabled = false widthSp.enabled = false heightSp.enabled = false camsDdl.enabled = false sceneStateDdl.enabled = false renPresetDdl.enabled = false pathBt.enabled = false saveBt.enabled = false renderBatBt.enabled = false ) -- handler ----------------------------------------------------------------------------------- on batRendAssistRoll open do ( initListView batRenLv scanBatBt.pressed() ) ---- open batch render manager dialog on openbatRenMgrBt pressed do actionMan.executeAction -43434444 "4096" ---- scan data of batch render in the scene on scanBatBt pressed do ( setCtrlsToEnabled() createBt.enabled = false camsName = #() sceneStatesName = #() renPresetsName = #() renPresetsPath = #() collectDataOfCams camsName collectDataOfSceneStates sceneStatesName collectDataOfRenPresets renPresetsName renPresetsPath collectDataOfBatRen() camsDdl.items = camsName sceneStateDdl.items = sceneStatesName renPresetDdl.items = renPresetsName batRenlv.items.clear() fillInSpreadSheet batRenlv batRenListGb.text = "Batch Render List (" + batRensName.count as string + ")" batRenlv.Refresh() ) ---- add view on addBatBt pressed do ( for i = 1 to addNumSp.value do local newBat = batchRenderMgr.CreateView undefined scanBatBt.pressed() ) ---- duplicate view on duplicateBatBt pressed do ( -- get selected items of list view SelectedIndexs = #() for i = batRenlv.SelectedItems.count to 1 by -1 do append SelectedIndexs batRenlv.SelectedItems.Item[i-1].index -- duplicate batch render view for i in SelectedIndexs do batchRenderMgr.DuplicateView (i+1) scanBatBt.pressed() ) ---- delete batch render view ------ delete selected on delBatBt pressed do ( -- get selected items of list view SelectedIndexs = #() for i = batRenlv.SelectedItems.count to 1 by -1 do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- delete list view items theItem.Remove() ) -- delete batch render view for i in SelectedIndexs do batchRenderMgr.deleteView (i+1) batRenlv.Refresh() ) ------ delete invert on delInvertBatBt pressed do ( -- create an array containing all items' index local allIndex = #() for i = batRenlv.Items.count to 1 by -1 do append allIndex (i-1) -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index ) -- delete selected items for i in SelectedIndexs do deleteItem allIndex (findItem allIndex i) -- delete invert items of listView for i in allIndex do ( local theItem = batRenlv.Items.Item[i] theItem.Remove() ) -- delete batch render view for i in allIndex do batchRenderMgr.deleteView (i+1) batRenlv.Refresh() ) ------ Delete All on delAllBatBt pressed do ( local batRenNum = batchRenderMgr.numViews for i = batRenNum to 1 by -1 do batchRenderMgr.deleteView i scanBatBt.pressed() ) ---- set batch render view to on or off ------ set selected on batRenlv ItemCheck arg do ( local batRen = batchRenderMgr.getView (arg.index+1) case arg.CurrentValue.value__ of ( 0 : batRen.enabled = on 1 : batRen.enabled = off ) ) ------ set all on batAllOnCkb changed state do ( for i = 1 to batchRenderMgr.numViews do ( local batRen = batchRenderMgr.getView i case batAllOnCkb.state of ( on : batRen.enabled = on off : batRen.enabled = off ) ) scanBatBt.pressed() ) ---- edit label to rename batch render view on batRenlv AfterLabelEdit arg do ( local batRen = batchRenderMgr.getView (arg.Item+1) try(batRen.name = arg.Label) catch() ) ---- when select item of the list view show its parameters on batRenlv MouseClick arg do ( local item = batRenlv.GetItemAt arg.x arg.y local batRen = batchRenderMgr.getView (item.index+1) overrideCkb.state = batRen.overridePreset startFSp.value = batRen.startFrame endFSp.value = batRen.endFrame widthSp.value = batRen.width heightSp.value = batRen.height try(camsDdl.selection = findItem camsName batRen.camera.name) catch(camsDdl.selection=1) try(sceneStateDdl.selection = findItem sceneStatesName batRen.sceneStateName) catch(sceneStateDdl.selection=0) renPresetDdl.selection = findItem renPresetsPath batRen.presetFile pathEt.text = batRen.outputFilename ) ---- changed parameters ------ override on overrideCkb changed state do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do append SelectedIndexs batRenlv.SelectedItems.Item[i-1].index -- changed override state for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) case overrideCkb.state of ( on : batRen.overridePreset = on off : batRen.overridePreset = off ) ) ) ------ frame on startFSp changed value do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items local theRange = theItem.subItems.item[3].text theItem.subItems.item[3].text = (startFSp.value as string)+" -"+(filterString theRange "-")[2] ) -- change start frame for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.startFrame = startFSp.value ) ) on endFSp changed value do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items local theRange = theItem.subItems.item[3].text theItem.subItems.item[3].text = (filterString theRange "-")[1]+"- "+(endFSp.value as string) ) -- changed end frame for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.endFrame = endFSp.value ) ) ------ size on widthSp changed value do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items local theRange = theItem.subItems.item[4].text theItem.subItems.item[4].text = (widthSp.value as string)+"*"+(filterString theRange "*")[2] ) -- changed width for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.width = widthSp.value ) ) on heightSp changed value do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items local theRange = theItem.subItems.item[4].text theItem.subItems.item[4].text = (filterString theRange "*")[1]+"*"+(heightSp.value as string) ) -- changed height for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.height = heightSp.value ) ) ------ camera on camsDdl selected selection do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items if camsDdl.selected == "" then theItem.subItems.item[1].text = "Viewport" else theItem.subItems.item[1].text = camsDdl.selected ) -- changed camera for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) try(batRen.camera = getNodeByName camsDdl.selected) catch() ) ) ------ scene state on sceneStateDdl selected selection do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items theItem.subItems.item[2].text = sceneStateDdl.selected ) -- changed scene state for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.sceneStateName = sceneStateDdl.selected ) ) ------ render preset on renPresetDdl selected selection do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items theItem.subItems.item[6].text = renPresetDdl.selected ) -- changed render preset for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) batRen.presetFile = renPresetsPath[renPresetDdl.selection] ) ) ------ choose output path on pathBt pressed do ( local outputPath = getBitmapSaveFileName caption:"Save File" if outputPath != undefined do ( -- get selected items of list view SelectedIndexs = #() for i = 1 to batRenlv.SelectedItems.count do ( local theItem = batRenlv.SelectedItems.Item[i-1] append SelectedIndexs theItem.index -- change list view items theItem.subItems.item[5].text = outputPath ) -- changed output path for i in SelectedIndexs do ( local batRen = batchRenderMgr.getView (i+1) pathEt.text = outputPath batRen.outputFilename = outputPath ) ) ) ---- load and save ------ load on loadBt pressed do ( local inputBrd = getOpenFileName caption:"Load Batch Render Data" \ types:"BatchRenderData (*.brd)|*.brd" if inputBrd != undefined do ( setCtrlsToNotEnabled() createBt.enabled = true loadData inputBrd batRenlv.items.clear() fillInSpreadSheet batRenlv batRenListGb.text = "The Number of Batch Render Views in This Data File: " + batRensName.count as string batRenLv.refresh() ) ) ------ save on saveBt pressed do ( local outputBrd = getSaveFileName caption:"Save Batch Render Data" \ types:"BatchRenderData (*.brd)|*.brd" if outputBrd != undefined do saveData outputBrd ) ---- create batch render on createBt pressed do ( -- create batch render view for i = 1 to batRensName.count do ( local newBat = batchRenderMgr.CreateView undefined try(newBat.name = batRensName[i]) catch() try(newBat.camera = getNodeByName batRensCam[i]) catch() try(newBat.sceneStateName = batRensSceneState[i]) catch() try(newBat.startFrame = (filterString batRensRange[i] " - ")[1]) catch() try(newBat.endFrame = (filterString batRensRange[i] " - ")[2]) catch() try(newBat.width = (filterString batRensSize[i] "*")[1]) catch() try(newBat.height = (filterString batRensSize[i] "*")[2]) catch() try(newBat.outputFilename = batRensPath[i]) catch() try(newBat.overridePreset = batRensOverride[i]) catch() try(newBat.presetFile = batRensPresets[i]) catch() try(newBat.enabled = batRensChecked[i]) catch() ) scanBatBt.pressed() ) ---- start render on renderBatBt pressed do batchRenderMgr.Render() ---- resize dialog on batRendAssistRoll resized mousePos do ( -- resize dialog's size if batRendAssistRoll.width < 542 do batRendAssistRoll.width = 542 if batRendAssistRoll.height < 330 do batRendAssistRoll.height = 330 -- set batch render list size batRenListGb.width = batRendAssistRoll.width - 15 batRenListGb.height = batRendAssistRoll.height - 174 batRenlv.width = batRendAssistRoll.width - 28 batRenlv.height = batRendAssistRoll.height - 225 -- set batch render parameters position batRenParaGb.width = batRendAssistRoll.width - 15 batRenParaGb.pos.y = batRendAssistRoll.height - 159 batAllOnCkb.pos.y = batRendAssistRoll.height - 141 overrideCkb.pos.y = batRendAssistRoll.height - 141 startFSp.pos.y = batRendAssistRoll.height - 119 endFSp.pos.y = batRendAssistRoll.height - 119 widthSp.pos.y = batRendAssistRoll.height - 94 heightSp.pos.y = batRendAssistRoll.height - 94 camsLab.pos.y = batRendAssistRoll.height - 142 camsDdl.pos.y = batRendAssistRoll.height - 145 sceneStateLab.pos.y = batRendAssistRoll.height - 117 sceneStateDdl.pos.y = batRendAssistRoll.height - 120 renPresetLab.pos.y = batRendAssistRoll.height - 92 renPresetDdl.pos.y = batRendAssistRoll.height - 95 pathLab.pos.y = batRendAssistRoll.height - 64 pathBt.pos.y = batRendAssistRoll.height - 66 pathEt.pos.y = batRendAssistRoll.height - 66 -- set position of save load render button loadBt.pos.y = saveBt.pos.y = createBt.pos.y = renderBatBt.pos.y = batRendAssistRoll.height - 31 renderBatBt.pos.x = batRendAssistRoll.width - 77 -- set dropDownList width if batRendAssistRoll.width > 667 then camsDdl.width = renPresetDdl.width = sceneStateDdl.width = 293 else camsDdl.width = renPresetDdl.width = sceneStateDdl.width = batRendAssistRoll.width - 374 pathEt.width = batRendAssistRoll.width - 123 ) on batRendAssistRoll lbuttondblclk mousePos do if mousePos.x > 271 then ( -- change dialog width batRendAssistRoll.width = 900 -- change width of columns batRenlv.columns.item[0].width = 1.5*batRenlv.columns.item[0].width batRenlv.columns.item[1].width = 1.5*batRenlv.columns.item[1].width batRenlv.columns.item[2].width = 1.5*batRenlv.columns.item[2].width batRenlv.columns.item[5].width = 3*batRenlv.columns.item[5].width ) else ( batRendAssistRoll.width = 542 -- change width of columns batRenlv.columns.item[0].width = batRenlv.columns.item[0].width/1.5 batRenlv.columns.item[1].width = batRenlv.columns.item[1].width/1.5 batRenlv.columns.item[2].width = batRenlv.columns.item[2].width/1.5 batRenlv.columns.item[5].width = batRenlv.columns.item[5].width/3 ) ---- drag right mouse button to change width of columns on batRendAssistRoll rbuttondown pos do (rMouseIsDown = true ; rPos = pos) on batRendAssistRoll rbuttonup pos do rMouseIsDown = false ---- drag left mouse to move dialog on batRendAssistRoll lbuttondown pos do (lMouseIsDown = true ; lPos = pos + titleSize) on batRendAssistRoll lbuttonup pos do lMouseIsDown = false on batRendAssistRoll mouseMove pos do ( if lMouseIsDown do setDialogPos batRendAssistRoll (mouse.screenpos - lPos) -- change width of columns if rMouseIsDown do ( batRenlv.columns.item[0].width = batRenlv.columns.item[0].width+(pos.x-rPos.x)/15 batRenlv.columns.item[1].width = batRenlv.columns.item[1].width+(pos.x-rPos.x)/15 batRenlv.columns.item[2].width = batRenlv.columns.item[2].width+(pos.x-rPos.x)/15 batRenlv.columns.item[5].width = batRenlv.columns.item[5].width+(pos.x-rPos.x)/15 ) ) on net_Render changed state do ( --handle netrendering option case net_Render.state of ( on : batchRenderMgr.netRender = true off : batchRenderMgr.netRender = false ) ) ) try(destroyDialog batRendAssistRoll) catch() createDialog batRendAssistRoll \ style:#(#style_titlebar, #style_border, #style_sysmenu,#style_minimizebox,#style_resizing)