当前位置:网站首页>【zeno】为zeno增加子模块/新节点的最小化的例子
【zeno】为zeno增加子模块/新节点的最小化的例子
2022-08-05 09:13:00 【beidou111】
说明
本文旨在建立一个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)
没错就这一行
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
PBD.cpp
#include <zeno\zeno.h>
#include "PBD.h"
namespace zeno {
struct PBD : zeno::INode {
virtual void apply() override {
}
};
ZENDEFNODE(PBD, {
{
{
}
},
{
},
{
},
{
"PBD"
},
});
} // namespace zeno
解释一下:
zeno.h这个头文件包含了大部分所需要的工具类
然后在zeno这个命名空间里写两部分:
- 类PBD的方法定义
- 类PBD在GUI中对应的节点
类PBD:
zeno写类用的是struct而不是class(其实也没啥大区别,不知道为什么他们这么用)
然后继承INode类(前面的zeno::也是命名空间)
然后重写一个虚函数apply
对应节点
采用ZENDEFNODE这个宏。来将后台代码绑定到GUI上
6. 开启CMake编译宏
更改build/CMakeCache.txt
或者利用VS Code的CMake插件编译

编译运行和最终效果
编译运行
选择如下配置,然后点击运行(那个三角形)
结果
按tab建立节点发现节点
建立子节点如下
边栏推荐
- flink cdc支持从oracle dg库同步吗
- Hundred lines of code launch red hearts, why programmers lose their girlfriends!
- sphinx matches the specified field
- Happens-before rules for threads
- 按钮上显示值的轮流切换
- 十一道家常小菜详细攻略[图文并茂]
- pytorch余弦退火学习率CosineAnnealingLR的使用
- 如何实现按键的短按、长按检测?
- Excuse me, guys, is it impossible to synchronize two databases in real time using Flink SQL CDC?
- 明天去订票,准备回家咯~~
猜你喜欢

网页直接访问链接不让安全中心拦截

工程制图试题

js 图形操作一(兼容pc、移动端实现 draggable属性 拖放效果)

How to replace colors in ps, self-study ps software photoshop2022, replace one color of a picture in ps with another color

苹果官网商店新上架Mophie系列Powerstation Pro、GaN充电头等产品

基于 Kubernetes 的微服务项目整体设计与实现

Hundred lines of code launch red hearts, why programmers lose their girlfriends!

2.4G无线收发模块的应用

Assembly language (8) x86 inline assembly

百行代码发射红心,程序员何愁命不中女朋友!
随机推荐
【LeetCode】623. 在二叉树中增加一行
工程制图试题
Neuron Newsletter 2022-07|新增非 A11 驱动、即将支持 OPC DA
如何实现按键的短按、长按检测?
嵌入式实操----基于RT1170 移植memtester做SDRAM测试(二十五)
express hot-reload
六年团队Leader实战秘诀|程序员最重要的八种软技能 - 脸皮薄容易耽误事 - 自我营销
代码审计—PHP
leetcode 剑指 Offer 10- I. 斐波那契数列
接口全周期的生产力利器Apifox
百行代码发射红心,程序员何愁命不中女朋友!
为什么我推荐使用智能化async?
Creo 9.0 基准特征:基准点
tensorflow.keras cannot introduce layers
Excuse me if you want to write data in mysql, with flink - connector - JDBC directly is ok, but I'm in the f
使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)
How to replace colors in ps, self-study ps software photoshop2022, replace one color of a picture in ps with another color
thinkPHP5 实现点击量(数据自增/自减)
JS syntax usage
PAT乙级-B1021 个位数统计(15)