• 【zeno】为zeno增加子模块/新节点的最小化的例子


    说明

    本文旨在建立一个zeno的最小化的自定义节点(子模块)。

    最终,你将看见自己新建的子节点
    在这里插入图片描述
    这里我建立的子模块名字为PBD

    1. git设置

    自己fork一下zeno,然后把源换成自己的远程仓库,然后自己新建一个branch
    这是为了保证自己随意写BUG(bushi),不影响其他部分。

    2. 在projects的目录下面新建文件夹并添加3个文件

    在这里插入图片描述
    其下有这PBD.h PBD.cpp, CMakeLists.txt, .gitignore四个文件
    (gitignore只是用来告诉git哪些不需要纳入版本管理的,就不讲了)

    3. 在projects/PBD/CMakeLists.txt中写

    在这里插入图片描述
    增加这一行

    target_sources(zeno PRIVATE PBD.cpp PBD.h)
    
    • 1

    没错就这一行

    4. 在projects/CMakeLists.txt中增加

    在这里插入图片描述

    在这里插入图片描述
    没错就增加这一行

    5. 在PBD.h和PBD.cpp中写自己的类

    我们最终要的是编译出一个新的节点

    一个模板

    PBD.h

    #pragma once
    
    #if defined (_MSC_VER)
    #undef max
    #undef min
    #define NOMINMAX
    #endif
    
    // disable some warnings on Windows
    #if defined (_MSC_VER)
        __pragma(warning (push))
        __pragma(warning (disable : 4244))
        __pragma(warning (disable : 4457))
        __pragma(warning (disable : 4458))
        __pragma(warning (disable : 4389))
        __pragma(warning (disable : 4996))
    #elif defined (__GNUC__)
        _Pragma("GCC diagnostic push")
        _Pragma("GCC diagnostic ignored \"-Wconversion\"")
        _Pragma("GCC diagnostic ignored \"-Wsign-compare\"")
        _Pragma("GCC diagnostic ignored \"-Wshadow\"")
    #endif
    
    
    //=============================================================
    class PBD
    {
    public:
        PBD();
    };
    
    #if defined (_MSC_VER)
        __pragma(warning (pop))
    #elif defined (__GNUC__)
        _Pragma("GCC diagnostic pop")
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    PBD.cpp

    #include 
    #include "PBD.h"
    
    namespace zeno {
        struct PBD : zeno::INode {
            virtual void apply() override {
                
            }
        };
        ZENDEFNODE(PBD, {
             {
                {}
             },
             {
             },
             {},
             {
                 "PBD"
             },
        });
    
    
    } // namespace zeno
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    解释一下:
    zeno.h这个头文件包含了大部分所需要的工具类

    然后在zeno这个命名空间里写两部分:

    1. 类PBD的方法定义
    2. 类PBD在GUI中对应的节点

    类PBD:
    zeno写类用的是struct而不是class(其实也没啥大区别,不知道为什么他们这么用)
    然后继承INode类(前面的zeno::也是命名空间)
    然后重写一个虚函数apply

    对应节点
    采用ZENDEFNODE这个宏。来将后台代码绑定到GUI上

    6. 开启CMake编译宏

    更改build/CMakeCache.txt
    或者利用VS Code的CMake插件编译
    在这里插入图片描述

    在这里插入图片描述

    编译运行和最终效果

    编译运行

    选择如下配置,然后点击运行(那个三角形)
    在这里插入图片描述

    结果

    按tab建立节点发现节点
    在这里插入图片描述
    建立子节点如下
    在这里插入图片描述

  • 相关阅读:
    PCIe系列专题之二:2.7 Flow Control的实现过程
    门牌制作-蓝桥杯?-Lua 中文代码解题第3题
    【JavaEE&Spring】认识Spring
    384.打乱数组
    【机器学习】这3种特征分箱方法,一定要理解掌握
    一键自动化博客发布工具,用过的人都说好(51cto篇)
    [Numpy] 创建数组
    应对数据爆炸时代,揭秘向量数据库如何成为AI开发者的新宠,各数据库差异对比
    数字经济发展,助力企业数字化转型升级
    如何在您的 Weblogic 应用程序上配置 HTTPS SSL?
  • 原文地址:https://blog.csdn.net/weixin_43940314/article/details/126165936