当前位置:网站首页>【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建立节点发现节点
建立子节点如下
边栏推荐
- XCODE12 在使用模拟器(SIMULATOR)时编译错误的解决方法
- Weekly Report 2022-8-4
- Luogu: P2574 XOR的艺术 [线段树]
- MySQL database error The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)
- Thinking and summary of the efficiency of IT R&D/development process specification
- ECCV 2022 Oral Video Instance Segmentation New SOTA: SeqFormer & IDOL and CVPR 2022 Video Instance Segmentation Competition Champion Scheme...
- 基于 Kubernetes 的微服务项目整体设计与实现
- 【LeetCode】623. Add a row to the binary tree
- SQL语句查询字段内重复内容,并按重复次数加序号
- Creo 9.0 基准特征:基准坐标系
猜你喜欢
科普大佬说 | 港大黄凯斌老师带你解锁黑客帝国与6G的关系
让程序员崩溃的N个瞬间(非程序员误入)
【LeetCode】623. 在二叉树中增加一行
Overall design and implementation of Kubernetes-based microservice project
接口全周期的生产力利器Apifox
“充钱”也难治快手的“亏亏亏”?
CVPR 2022 | 将X光图片用于垃圾分割,港中大(深圳)探索大规模智能垃圾分类
How to make a puzzle in PS, self-study PS software photoshop2022, PS make a puzzle effect
工程制图知识点
复现一次循环和两次循环
随机推荐
六年团队Leader实战秘诀|程序员最重要的八种软技能 - 脸皮薄容易耽误事 - 自我营销
【LeetCode】623. 在二叉树中增加一行
DPU — 功能特性 — 管理系统的硬件卸载
Example of Noise Calculation for Amplifier OPA855
CCVR eases heterogeneous federated learning based on classifier calibration
Concurrent CAS
程序员的七种武器
Moonbeam团队发布针对整数截断漏洞的紧急安全修复
The Seven Weapons of Programmers
七夕给自己new一个chatRobot当对象
【LeetCode】623. Add a row to the binary tree
Luogu P4588: [TJOI2018]数学计算
Assembly language (8) x86 inline assembly
seata源码解析:事务状态及全局锁的存储
汇编语言(8)x86内联汇编
PAT Grade B-B1020 Mooncake(25)
pytorch余弦退火学习率CosineAnnealingLR的使用
Hbuilder 学习使用中的一些记录
【Excel实战】--图表联动demo_001
接口全周期的生产力利器Apifox