浅析在kanzi中使用插件建立子节点并实现相关功能
背景
在逐渐丰富的仪表需求中,越来越多的个性化表盘开发需求逐渐增加。kanzi的基本工具和节点无法满足容易月薪的需求。我球球了,别在提那些破需求了,我真做不来啊!根据用户心情自动变色汽车,你这然我咋玩啊!!! 奇怪这个字为什么会在这里
软件版本
软件名 | 版本号 |
---|---|
Kanzi | 3.9.4 |
Visual Studio | 2017 |
0X000 KANZI官方插件文档
在kanzi的文档中,已经教我们如何去制作一个简单的插件了。但是对插件中的函数的一些示例还是没有很好的进行说明。
kanzi官方文档链接 https://docs.kanzi.com/3.9.4/en/tutorials/api.html
0X001 调整工程设置使其能够调用我们的VS2017插件
这里由于我编译的是2017的debug版本的dll文件使用直接设置成debug
0X002 在渲染树下建立我们自己的插件节点
0X003 如何在插件节点下创建一个子节点
当我们创建好一个新的插件后我们可以在initialize函数中去搞事情(毕竟是demo我就喜欢在这里写)
//在插件create的时候会获取到domain大家可以把这个domain传入到initialize函数中备用
void Demo1::initialize(Domain* domain)
{
// Initialize base class.
Node3D::initialize();
//这里是去创建一个Model3D节点,
//第一个参数是传递过来的domain,
//第二个是名字(写插件的时候最好是带上插件名什么的,省着到时候冲突),
//第三个是这个节点的大小,
//第四个是颜色啥的。
Model3DSharedPtr cube = Model3D::createCube(domain, "Cube",1.0f,ColorRGBA(1.0,1.0,1.0,1.0));
//将我们刚刚创建的Model3D节点插入到我们的插件节点下。
this->addChild(cube);
}
0X004 上香
这里你要点上几根香,心中默念祖师爷万岁!
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
0X004 在kanzi中更新下插件
相信你自己肯定已经编译完成了,那我们就直接使用。
在插件节点中点击如下,更新下插件的使用。
0X005 看结果
这个时候我们就在Preview中看到了我们的插件创建出来的一个模型。
0X006 一个诡异的现象
细心的人都会发现虽然我们的mode显示了,但是呢~~~
居然没有在我们的节点下面创建出我们的子节点。
这是因为在插件中add进来的子节点是不会在studio中显示的。这意味着什么呢?如果你是创建了一个本身就没有效果的节点作为子节点。那你就不知道是否会创建成功。
0X007 我创建了一个节点,如果我想在找到这个节点我应该如何去做呢?
我来给出一个示例代码进行验证
//我还是比较喜欢写在这里,凑合看吧!哈哈哈
void Demo1::initialize(Domain* domain)
{
// Initialize base class.
Node3D::initialize();
Model3DSharedPtr cube = Model3D::createCube(domain, "Cube",1.0f,ColorRGBA(1.0,1.0,1.0,1.0));
this->addChild(cube);
//这里之前的是之前的代码了
//首先这个函数是一个kanzi打印log的函数,大家可以在log窗口看见我们打印出来的函数名。
//kzLogDebug(());
//这个函数是一个查找的函数,第一个参数是要查找的类型,第二个参数是路径。(这里只能去找下面的子节点)
//lookupNode<>()
//getName 这玩意我就不说了,看不懂请自觉反思
kzLogDebug((lookupNode<Model3D>("Cube")->getName()));
}
编译运行后我们就在log窗口中可以看到我们的插件下面子节点的名字了。
0X007 结束语
目前本人博客写的还很少,如果大家有那些建议可以发邮件给我。我会接受大家的建议。如果你有关于kanzi的问题也欢迎一起讨论。如果本文对你有帮助也欢迎点点赞。
个人邮箱:377644012@qq.com
PS:如果你有想要的代码段也可以告诉我没准下一次就更新你的代码段了。