zoukankan      html  css  js  c++  java
  • NODE BASED PROCEDURAL TASK :: VVGRAPH

    特性:

    1,随时查看节点的内部定义

    2,类houdini的local variable/global variable功能

    3,支持界面表达式paramexpression,方便引用其他节点界面值

    4,随时查看节点里面的流动的attributes

    5,支持用bash语法访问全局环境变量,局部变量

    6,后台 支持覆盖节点参数值,支持多节点执行,支持添加环境变量

    7,类Houdini bypass, current

    8,暴露一部分API,方便操作graph node scene

    9,完全分离运行线程,进程分离

    10,快捷键大部分参考Houdini/Katana的风格来,按Y键断开链接,按e/p 显示节点参数界面,tab键创建节点

    11,插件结构

    12,cached network

    13,plugin API超级友好

    14,轻量级

    LOGIC:

    RELEASE 0.01:

    KATANA WINDOWS:

     

     Ubuntu:

    KATANA LINUX

     一个测试FFMPEG (先合成序列,转成微信支持得编码)

     exrs to video

     /mnt/lagrange_proj/course/WaterFlood/comp/V006

    有需要我联系方式的WECHAT/QQ:617207388

    --------------------------------------------- WIP ------------------------------------------------------

    -----NODE BASED  PROCEDURAL TASK-----

    以前写过好多次,但是都没写完....主要是节点树的执行过程.这次打算好好写完。

    这次目的是写一个 类似houdini sop下的 管理过程

    目的是把大量流程中的杂乱比如后台处理,Arnold->Render->ffmepg合成视频等等 基于任务的东东,放到节点平台,这样可以完整的procedural the task

    而且数据从左到右流动.节点树递归反向分析,等待退栈建立正确的节点执行顺序.去重建立节点缓存。

    可以观看视频演示:Rlease v0.01 : https://vimeo.com/316527592  

    WIP_01:

    WIP_02:初步实现tabview,还有点击tab键创建节点。

    1,看这个tab键出来的选择创建节点的面板,完全按照Houdini的设计方式,

    从Factory里读到节点的描述,真正点击的时候才创建真正的UI节点和他的delegate节点。

    2,在Python中factory完全就是个list,根本就不用创建什么复杂的类型,里面直接塞N个{节点描述字典},

    也可以直接全部创建为字典描述,不过 这样节点注册的完  工厂里的节点描述 是没顺序的。

    支持像Nuke 一样的快捷键D: 把节点bypass/ on the fly 查看节点的所有核心属性

     Sticky Node: TODO:Fix the focus event......

    修复focus event, 当你在打字的时候请别影响别的选择的Node.......

     

     WIP: dot 节点仅仅只连接

     

    化繁去简,节点参数界面简单映射:

    Production Ready:

    一套自定义的command 创建模块:

    比如CMDStart节点:

    # A cmd start engine
    class CmdStart(Stream_Node):
        def __init__(self):
            super(CmdStart, self).__init__()
            self.outputPortColor = [30, 255, 150]
            self.color = [170, 255, 200]
            self.haveInput = False
            self.haveOutput = True
    
            self.appendAttributeMapping('executable')
            self.appendAttributeMapping('args')
    
        def cookMyNode(self):
            exec_path = self.evalParam('executable')
            self.gdp.addAttribute('executable', exec_path)
            self.gdp.addAttribute('args', [])
            Message("Create Attribute:>>%s<< in the node%s, the excutable is:%s" % ("executable",self.name, exec_path))
    
        @staticmethod
        def creator():
            return CmdStart()
    
    
    CmdStartSignal = {}
    CmdStartSignal['name'] = 'UniversalCommandStart'
    CmdStartSignal['typeName'] = 'CMDStart'
    CmdStartSignal['creator'] = CmdStart.creator
    CmdStartSignal['paramsContainer'] = CmdStartParams
    CmdStartSignal['flavor'] = 'Universal Command'
    CmdStartSignal['context'] = 0x01
    
    
    # EXPORT ALL PLUGINS
    EXPORTS_PLUGINS = [CmdStartSignal,
                       CmdEndSignal,
                       BuildingArgChainSignal,
                       BuildingDopArgChainSignal,
                       AppendDopArgChainSignal,
                       IOWriteTextSignal,
                       IOReadTextSignal]

     CMDEnd:

    class CmdEnd(Stream_Node):
        def __init__(self):
            super(CmdEnd, self).__init__()
            self.outputPortColor = [30, 255, 150]
            self.color = [170, 255, 200]
            self.haveInput = True
            self.haveOutput = False
            self.appendAttributeMapping('executable')
            self.appendAttributeMapping('args')
    
        def cookMyNode(self):
            self.copyInput()
            exec = self.gdp.getAttributeValue('executable')
            args = self.gdp.getAttributeValue('args')
            for arg in args:
                exec += (" " + arg)
            Message("building command line is :%s"%(exec))
            os.system(exec)
    
        @staticmethod
        def creator():
            return CmdEnd()
    
    CmdEndSignal = {}
    CmdEndSignal['name'] = 'UniversalCommandEnd'
    CmdEndSignal['typeName'] = 'CMDEnd'
    CmdEndSignal['creator'] = CmdEnd.creator
    CmdEndSignal['paramsContainer'] = None
    CmdEndSignal['flavor'] = 'Universal Command'
    CmdEndSignal['context'] = 0x01

    Bug Fix, QProcess replace the os.system()

    描述katana后台

    Add JIT Support

    发现一个致命的问题,如果要在python中使用QProcess 显示正确的进程消息:因为QByteArray->不能直接decode.不如QString方便.可是python没这个玩意啊

    可以使用:

    def printStdOut():
        readSize = self.bytesAvailable()
        readData = self.read(readSize)
    # 也可以未decode('cp936')
    print(readData.data().decode('gb2312'))

     直接显示正确.... 

    Finally: 

    例如ping -t 127.0.0.1

    无敌的后台:

  • 相关阅读:
    爬虫的一般步骤
    微风轻轻起
    vim
    kali wifi (not complete!)
    virtualenv python3
    kali google
    kali set proxy and system upgrade
    kali下安在vim
    数据导入导出(关系型数据库==非关系型数据库)
    redis常见错误
  • 原文地址:https://www.cnblogs.com/gearslogy/p/10012159.html
Copyright © 2011-2022 走看看