q1MC4D模型
q1MC4D模型
C4D爱好者经常通宵熬夜加班渲染,渲染到半夜电脑还开着,西技大神写了这个批渲染任务完成后可以自动关机的插件,有的时候晚上批渲染或者马上要出差,定一个渲染完成自动关机,就什么也不用担心了。
q1MC4D模型
q1MC4D模型
分享一下思路:q1MC4D模型
-1.判断批渲染任务里的任务状态和任务数量。
q1MC4D模型
-2.如果有任务在渲染,那么启动子线程去check状态。任务结束就执行关机。
q1MC4D模型
-3.还有一个情况,就是插件打开之后,还没有批渲染。所以这里设计一个checkbox的交互,当勾选上就开启子线程。取消勾选就关闭子线程。
q1MC4D模型
q1MC4D模型
获取批渲染任务状态 q1MC4D模型
创建一个GUI窗口,继承自GeDialog。然后初始化它的属性,使它获得批渲染的实例。分别拿到批渲染对象实例、批渲染任务数量和用于存放子线程的属性。
q1MC4D模型
q1MC4D模型
class AutoKill(gui.GeDialog):
q1MC4D模型
def __init__(self):
q1MC4D模型
self.br = c4d.documents.GetBatchRender()
q1MC4D模型
self.num = self.br.GetElementCount()
q1MC4D模型
self.th = None
q1MC4D模型
q1MC4D模型
创建GUI的各个组件,将checkbox和说明文字添加到GUI窗口中。设置对其关系和默认尺寸。
q1MC4D模型
q1MC4D模型
def CreateLayout(self):
q1MC4D模型
self.SetTitle("批渲染自动关机设置")
q1MC4D模型
if self.GroupBegin(0, c4d.BFH_CENTER | c4d.BFH_CENTER, cols=1, rows=3, title="批渲染自动关机"):
q1MC4D模型
self.GroupBorderSpace(10, 10, 10, 10)
q1MC4D模型
self.AddCheckbox(self.KILL_ID, c4d.BFH_LEFT, initw=0, inith=0, name="勾选:将执行渲染完成后自动关机\n取消勾选或关闭窗口:将取消自动关机设置。")
q1MC4D模型
self.GroupEnd()
q1MC4D模型
return True
q1MC4D模型
q1MC4D模型
通过遍历所有任务得到批渲染状态的自定义函数isRener。
q1MC4D模型
q1MC4D模型
def isRender(br):
q1MC4D模型
num = br.GetElementCount()
q1MC4D模型
try:
q1MC4D模型
for i in range(num):
q1MC4D模型
if br.GetElementStatus(i) == c4d.RM_PROGRESS:
q1MC4D模型
return True
q1MC4D模型
return False
q1MC4D模型
except IndexError:
q1MC4D模型
return False
q1MC4D模型
q1MC4D模型
c4d.RM_PROGRESS是批渲染的状态常量。状态等于这个值意味着这个任务正在渲染。
q1MC4D模型
q1MC4D模型
绑定checkbox的状态 q1MC4D模型
当checkbox被修改的时候,获取checkbox的值,并获取批渲染实例的状态。
q1MC4D模型
如果checkbox的值为True,则创建子线程,并将批渲染实例的状态传给子线程后,启动子线程。
q1MC4D模型
如果checkbox的值为False,则关闭子线程。
q1MC4D模型
这样设置的好处是可以把一些列的判断都在子线程类里去判断,不需要在GUI类里面重复判断逻辑,主体思路清晰。
q1MC4D模型
q1MC4D模型
def Command(self, message_id, msg):
q1MC4D模型
if message_id == self.KILL_ID:
q1MC4D模型
status = self.GetBool(self.KILL_ID)
q1MC4D模型
status_render = isRender(self.br) and self.br.IsRendering()
q1MC4D模型
if status:
q1MC4D模型
self.th = KillThread(self,status_render)
q1MC4D模型
self.th.Start()
q1MC4D模型
else:
q1MC4D模型
if self.th is not None:
q1MC4D模型
self.th.End()
q1MC4D模型
q1MC4D模型
为了避免窗口被误操作,给GUI窗口加上销毁GUI的保险,如果GUI的线程属性存在,则关闭该线程。
q1MC4D模型
q1MC4D模型
def DestroyWindow(self):
q1MC4D模型
if self.th is not None:
q1MC4D模型
self.th.End()
q1MC4D模型
q1MC4D模型
接下来写子线程要执行的逻辑。
q1MC4D模型
q1MC4D模型
子线程逻辑 q1MC4D模型
先把子线程类搭起来。输入GUI窗口对象和批渲染当前状态。
q1MC4D模型
q1MC4D模型
class KillThread(c4d.threading.C4DThread):
q1MC4D模型
def __init__(self,dialog,status):
q1MC4D模型
self.br = c4d.documents.GetBatchRender()
q1MC4D模型
self.num = self.br.GetElementCount()
q1MC4D模型
self.dialog = dialog
q1MC4D模型
self.status = status
q1MC4D模型
self.first = True
q1MC4D模型
q1MC4D模型
然后逻辑分两种情况:q1MC4D模型
-1.批渲染任务先启动了,关机插件后启动的。
q1MC4D模型
-2.关机插件先启动了,批渲染任务后启动的。
q1MC4D模型
q1MC4D模型
def Main(self):
q1MC4D模型
if self.status:
q1MC4D模型
# 批渲染任务先启动
q1MC4D模型
pass
q1MC4D模型
else:
q1MC4D模型
# 批渲染任务后启动
q1MC4D模型
pass
q1MC4D模型
q1MC4D模型
1)批渲染先启动q1MC4D模型
从GUI子类传进来的当前状态self.status为True,每一秒都与新的状态比对。如果新的批渲染状态为False意味着已经结束渲染。
q1MC4D模型
q1MC4D模型
def Main(self):
q1MC4D模型
if self.status:
q1MC4D模型
# 批渲染任务先启动
q1MC4D模型
while self.IsRunning():
q1MC4D模型
time.sleep(1)
q1MC4D模型
new_status = isRender(self.br) and self.br.IsRendering()
q1MC4D模型
if not new_status:
q1MC4D模型
self.dialog.SetBool(self.dialog.KILL_ID, False)
q1MC4D模型
close()
q1MC4D模型
break
q1MC4D模型
if self.TestBreak():
q1MC4D模型
break
q1MC4D模型
else:
q1MC4D模型
# 批渲染任务后启动
q1MC4D模型
pass
q1MC4D模型
q1MC4D模型
2)插件工具先启动,即checkbox被勾选上而批渲染还没有点击渲染。q1MC4D模型
插件工具先启动则GUI子类传进来的批渲染状态为False。然后每秒钟比对批渲染的状态,一旦批渲染被开启,将self.status设置为True。接着继续对比批渲染任务是否停止,一旦停止则执行关机。
q1MC4D模型
q1MC4D模型
def Main(self):
q1MC4D模型
if self.status:
q1MC4D模型
while self.IsRunning():
q1MC4D模型
time.sleep(1)
q1MC4D模型
new_status = isRender(self.br) and self.br.IsRendering()
q1MC4D模型
if not new_status:
q1MC4D模型
self.dialog.SetBool(self.dialog.KILL_ID, False)
q1MC4D模型
close()
q1MC4D模型
break
q1MC4D模型
if self.TestBreak():
q1MC4D模型
break
q1MC4D模型
else:
q1MC4D模型
while self.IsRunning():
q1MC4D模型
time.sleep(1)
q1MC4D模型
new_status = isRender(self.br) and self.br.IsRendering()
q1MC4D模型
if (self.status != new_status) and self.first:
q1MC4D模型
self.status = new_status
q1MC4D模型
self.first = False
q1MC4D模型
elif (self.status != new_status) and (not self.first):
q1MC4D模型
self.first = True
q1MC4D模型
close()
q1MC4D模型
break
q1MC4D模型
if self.TestBreak():
q1MC4D模型
break
q1MC4D模型
q1MC4D模型
自定义关机的函数close,首先要得到管理员权限,然后判断系统类型。
q1MC4D模型
q1MC4D模型
def run_as_admin():
q1MC4D模型
if ctypes.windll.shell32.IsUserAnAdmin():
q1MC4D模型
return True
q1MC4D模型
script = sys.argv[0]
q1MC4D模型
ctypes.windll.shell32.ShellExecuteW(None, "auto_kill", sys.executable, script, None, 1)
q1MC4D模型
return True
q1MC4D模型
q1MC4D模型
def close():
q1MC4D模型
if os.name == 'nt':
q1MC4D模型
run_as_admin()
q1MC4D模型
os.system('shutdown -s -t 0')
q1MC4D模型
elif os.name == 'posix':
q1MC4D模型
os.system('shutdown now -h')
q1MC4D模型
q1MC4D模型
以上就是实现C4D批渲染自动关机的分享。
q1MC4D模型
q1MC4D模型
【脚本安装】q1MC4D模型
1.将AutoKill文件夹放置在C4D的plugins文件夹下即可。
q1MC4D模型
2.安装好之后启动C4Dshift+F12打开【命令管理器】,在搜索 框中输入AutoKill。
q1MC4D模型
3.将词条拖入C4D的窗口合适的位置,并保存窗口布局方便使用。
q1MC4D模型
4.也可以设置快捷键。
q1MC4D模型
q1MC4D模型
【使用步骤】 q1MC4D模型
1.将要批量渲染的参数在设置好后开始批量渲染。
q1MC4D模型
2.点击插件弹出如下对话框,勾选即可开启自动关机功能。
q1MC4D模型
3.取消勾选或关闭窗口都将停用自动关机功能。
q1MC4D模型
q1MC4D模型
【版本信息】C4D R19及以上。
q1MC4D模型
【作者信息】西技大神
C4D插件:C4D批渲染后自动关机插件AutoKill v1.0(批渲染,c4d关机,渲染关机,自动关机,AutoKill,plugin),版本为AutoKill v1.0,分类属于渲染辅助,软件语言为中文,支持PC(Windows) , MAC(Mac OS)系统平台,安装好的插件会出现在CINEMA 4D软件的其它位置位置,附件大小约197.66 KB,下载方式为本地下载。更多不错渲染辅助下载,尽在C4D模型-C4D.COM。
[使用声明]:《C4D批渲染后自动关机插件AutoKill v1.0》插件仅供个人或学生测试试用,商业用途请前往插件官网购买正版。该插件严禁商用、传播或转载,请在下载后24小时内予以删除。渲染辅助插件来源于网络,如果侵犯了你的权利,请提供作品书面证明,请联系网站客服:2427120@qq.com删除下架处理。