当前位置:网站首页>【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建立节点发现节点
建立子节点如下
边栏推荐
- Happens-before rules for threads
- How to make a puzzle in PS, self-study PS software photoshop2022, PS make a puzzle effect
- seata源码解析:TM RM 客户端的初始化过程
- 画法几何及工程制图考试卷A卷
- 【 a daily topic 】 1403. The increasing order of the sequence, boy
- Comprehensively explain what is the essential difference between GET and POST requests?Turns out I always misunderstood
- openpyxl to manipulate Excel files
- ts/js 函数传参带函数写法
- eKuiper Newsletter 2022-07|v1.6.0:Flow 编排 + 更好用的 SQL,轻松表达业务逻辑
- 基因数据平台
猜你喜欢

Three solutions to solve cross-domain in egg framework

使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)

Creo 9.0 基准特征:基准平面

Weekly Report 2022-8-4

seata源码解析:TM RM 客户端的初始化过程

Comprehensively explain what is the essential difference between GET and POST requests?Turns out I always misunderstood

pytorch余弦退火学习率CosineAnnealingLR的使用

链表中的数字相加----链表专题

How to make pictures clear in ps, self-study ps software photoshop2022, simple and fast use ps to make photos clearer and more textured

深度学习21天——卷积神经网络(CNN):天气识别(第5天)
随机推荐
欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(上)
基因数据平台
让硬盘更快,让系统更稳定
MySQL内部函数介绍
Dynamic memory development (C language)
pytorch余弦退火学习率CosineAnnealingLR的使用
XCODE12 在使用模拟器(SIMULATOR)时编译错误的解决方法
Xcode 12 ld: symbol(s) not found for architecture armv64
PAT乙级-B1021 个位数统计(15)
The difference between beautiful MM and ordinary MM
工程制图知识点
Excuse me if you want to write data in mysql, with flink - connector - JDBC directly is ok, but I'm in the f
PAT Grade B-B1020 Mooncake(25)
国际原子能机构总干事称乌克兰扎波罗热核电站安全形势堪忧
ECCV 2022 Oral 视频实例分割新SOTA:SeqFormer&IDOL及CVPR 2022 视频实例分割竞赛冠军方案...
放大器OPA855的噪声计算实例
哪个是你爱情的颜色?
There is only one switch, how to realize the nqa of master-slave automatic switching
openpyxl操作Excel文件
Dry goods!Generative Model Evaluation and Diagnosis