16、Kanzi插件——通过Kanzi Engine插件创建自定义动作+代码解析
一、创建自定义动作
当收到燃油变化的消息时,相应动作代码整体如下
class PLUGINDEMO_API Plugindemo : public kanzi::Node3D
{
public://字符串属性static kanzi::PropertyType<kanzi::string> StringProperty;//引用节点的字符串static kanzi::PropertyType<kanzi::string> NodeRefByStringProperty;//引用预设件的字符串static kanzi::PropertyType<kanzi::string> PrefabRefByStringProperty;//引用预设件的共享指针static kanzi::PropertyType<kanzi::ResourceSharedPtr> PrefabRefBySharedPtrProperty;//引用材质的共享指针static kanzi::PropertyType<kanzi::ResourceSharedPtr> MaterialRefBySharedPtrProperty;KZ_METACLASS_BEGIN(Plugindemo, Node3D, "MyNode")//将属性类型添加到类元数据。KZ_METACLASS_PROPERTY_TYPE(StringProperty)KZ_METACLASS_PROPERTY_TYPE(NodeRefByStringProperty)KZ_METACLASS_PROPERTY_TYPE(PrefabRefByStringProperty)KZ_METACLASS_PROPERTY_TYPE(PrefabRefBySharedPtrProperty)KZ_METACLASS_PROPERTY_TYPE(MaterialRefBySharedPtrProperty)KZ_METACLASS_MESSAGE_TYPE(OnFuelLevelChangedMessage)KZ_METACLASS_MESSAGE_TYPE(FuelIndicatorUpdateLevelMessage)//新加代码KZ_METACLASS_END()static kanzi::PropertyTypeEditorInfoSharedPtr makeEditorInfo();// Represents message arguments of FuelIndicator.OnFuelLevelChanged message type.class OnFuelLevelChangedMessageArguments : public MessageArguments{public:KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN(OnFuelLevelChangedMessageArguments, MessageArguments, "On Fuel Level Changed Message Arguments")KZ_METACLASS_END()};// Define the message type of the FuelIndicator.OnFuelLevelChanged message.static kanzi::MessageType<OnFuelLevelChangedMessageArguments> OnFuelLevelChangedMessage;void onFuelLevelChanged(int fuelLevel){OnFuelLevelChangedMessageArguments messageArguments;dispatchMessage(OnFuelLevelChangedMessage, messageArguments);}// Represents the message arguments of the FuelIndicator.UpdateLevel message.class FuelIndicatorUpdateLevelMessageArguments : public MessageArguments//新加代码{public:KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN(FuelIndicatorUpdateLevelMessageArguments, MessageArguments, "Fuel Indicator Update Level Message Arguments")KZ_METACLASS_PROPERTY_TYPE(FuelIndicatorLevelProperty)KZ_METACLASS_END()// The property type which represents the value of the Fuel Indicator node.static PropertyType<int> FuelIndicatorLevelProperty;// Returns the value of the Fuel Indicator message argument.int getFuelIndicatorLevel(){return getArgument(FuelIndicatorLevelProperty);}};//新加代码// The message type of the FuelIndicator.UpdateLevel message.static MessageType<FuelIndicatorUpdateLevelMessageArguments> FuelIndicatorUpdateLevelMessage;//新加代码// The message handler for the FuelIndicator.UpdateLevel message.// Shows the level of the Fuel Indicator in a 3D 文本块 (Text Block 3D) node.void fuelIndicatorUpdateLevelHandler(FuelIndicatorUpdateLevelMessageArguments& arguments){// Get the level of the Fuel Indicator node.m_currentLevel += arguments.getFuelIndicatorLevel();}//新加代码// Creates a Plugindemo.static PlugindemoSharedPtr create(kanzi::Domain* domain, kanzi::string_view name);protected:// Constructor.explicit Plugindemo(kanzi::Domain* domain, kanzi::string_view name):kanzi::Node3D(domain, name),m_currentLevel(0){}void initialize();private:int m_currentLevel;
};
新加的static变量的初始化代码如下
PropertyType<int> Plugindemo::FuelIndicatorUpdateLevelMessageArguments::FuelIndicatorLevelProperty(kzMakeFixedString("Plugindemo.intProperty"), 666, 0, false,KZ_DECLARE_EDITOR_METADATA(metadata.displayName = "intProperty";
));MessageType<Plugindemo::FuelIndicatorUpdateLevelMessageArguments> Plugindemo::FuelIndicatorUpdateLevelMessage
(kzMakeFixedString("Message.FuelIndicator.UpdateLevel"),KZ_DECLARE_EDITOR_METADATA(// Set the name of the message the way you want to show it in Kanzi Studio.metadata.displayName = "Update Level";// Show the message in the actions dropdown menu.metadata["Listenable"] = "False";)
);
同时需在cpp中的初始化动作中添加消息处理的成员函数,类似QT中的connect
void Plugindemo::initialize()
{// Initialize base class.Node3D::initialize();addMessageHandler(FuelIndicatorUpdateLevelMessage, this, &Plugindemo::fuelIndicatorUpdateLevelHandler);//新加代码
}
二、效果
添加自定义动作时,会出现代码实现的动作
参考
《Kanzi官方文档》
16、Kanzi插件——通过Kanzi Engine插件创建自定义动作+代码解析相关推荐
- 13、Kanzi插件——通过Kanzi Engine插件创建自定义节点+代码解析
一.通过插件创建自定义类型的节点 在类Plugindemo 中添加一行 static kanzi::PropertyTypeEditorInfoSharedPtr makeEditorInfo(); ...
- Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现)
Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现) 目录 matplotlib库中利用legend函数创建自定义图例 原始图像 在原始图像上创建自定义 ...
- 15、Kanzi插件——通过Kanzi Engine插件创建自定义消息类型+代码解析
一.创建trigger中的自定义消息 比如,想创建一个当汽车燃油量发生变化时对应的消息,可以进行如下操作 首先,在插件工程中的头文件中定义一个嵌套类,下面代码中的第23行和29-44行为新添加代码 # ...
- 在VS2010中创建自定义的代码段
本文基于Visual Studio 2010 RC版本 1. 在项目中新增一个xml文件为carysn.snippet,然后插入代码段,如下图: 2. 完成后会自动插入代码段模 ...
- Spring Boot退出代码–创建自定义退出代码
当运行Spring Boot应用程序时,一切正常,我们将获得系统退出代码0 . 对于任何未处理的异常,应用程序将返回退出代码1 . 我们有可能从Spring Boot应用程序返回自定义退出代码. 在本 ...
- python 机器人开发库,如何为机器人框架创建自定义Python代码库
I already have Python source files for some custom tasks. Can I create a custom library of these tas ...
- Kanzi自定义插件节点属性、自定义消息以及自定义响应
创建自定义节点和属性类型 在自定义插件中可以使用自定义属性类型创建自定义节点,可以设置如何显示以及如何让用户与这些节点交互. 在插件工程.hpp文件中,在元类定义之后声明返回元数据的函数: ...st ...
- 16个最佳WordPress登录页面插件
Looking for the best WordPress login page plugins for your website? The login page is the door to yo ...
- 12、Kanzi插件——创建Kanzi Engine插件的方法
可以使用模板自动创建Kanzi Engine插件 模板选为含有Kanzi Engine插件的应用 注意:工程名不能叫plugin,因为VS工程会根据该工程名设置定义具体的类,如果命名为plugin,那 ...
最新文章
- 框架模式与设计模式之区别
- android相对布局底部对齐,Android,在edittext中输入时防止相对布局底部对齐的按钮向上移动...
- kali linux有线连接不见网络图标不见(解决方案)
- python中time模块中的倒计时_Python中time模块与datetime模块在使用中的不同之处 python 的time模块获取的是什么时间...
- 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)
- 2更新字段其中一位_NoSQL之MongoDB——数据更新操作
- 二次优化大招(由泰勒公式推出最值条件)
- PCB genesis自制孔点 Font字体实现方法
- Linux下ftp的安装配置
- python请求库_如何使用Python请求库发出post请求?
- word另存为pdf后,pdf文件中有空白页
- 【OpenCV-Python-课程学习(贾)】OpenCV3.3课程学习笔记:图像色彩空间转换(cvtColor),imread()的grayscale和cvtColor()的区别、通道分离与转换
- (error) CLUSTERDOWN Hash slot not served
- 你一定要狠狠的幸福,那个凶丫头(2)
- mysql8 启动报错:Error while setting value ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DI
- Visual studio2022 利用glfw+glad配置OpenGL环境
- [论文解读]Deep active learning for object detection
- 神经网络与深度学习编程练习(coursera 吴恩达 )(3)
- 发现U盘不显示盘符的解决办法
- 图片内容转文字用Java怎么实现?