• 【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建立节点发现节点
    在这里插入图片描述
    建立子节点如下
    在这里插入图片描述

  • 相关阅读:
    【因果推断python】41_异质干预效应1
    webpack学习
    淘宝扭蛋机小程序:现在是否是最佳开发时机?
    动作捕捉系统用于苹果采摘机器人
    Python 中的类与继承
    使用 Python 和 OpenCV 制作反应游戏
    Google Earth Engine APP(GEE)—查看亚马逊平原的1984——至今的每一景影像
    已知起始点坐标、目的地方位角,计算沿着测地线飞行一定距离到达的目的地坐标
    基于人脸识别的情绪社区(Python+Django+Mysql+Keras,tensorflow)
    毕业设计-基于Unity的餐厅经营游戏的设计与开发(附源码、开题报告、论文、答辩PPT、演示视频,带数据库)
  • 原文地址:https://blog.csdn.net/weixin_43940314/article/details/126165936