一、创建自定义动作

当收到燃油变化的消息时,相应动作代码整体如下

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插件创建自定义动作+代码解析相关推荐

  1. 13、Kanzi插件——通过Kanzi Engine插件创建自定义节点+代码解析

    一.通过插件创建自定义类型的节点 在类Plugindemo 中添加一行 static kanzi::PropertyTypeEditorInfoSharedPtr makeEditorInfo(); ...

  2. Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现)

    Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现) 目录 matplotlib库中利用legend函数创建自定义图例 原始图像 在原始图像上创建自定义 ...

  3. 15、Kanzi插件——通过Kanzi Engine插件创建自定义消息类型+代码解析

    一.创建trigger中的自定义消息 比如,想创建一个当汽车燃油量发生变化时对应的消息,可以进行如下操作 首先,在插件工程中的头文件中定义一个嵌套类,下面代码中的第23行和29-44行为新添加代码 # ...

  4. 在VS2010中创建自定义的代码段

    本文基于Visual Studio 2010 RC版本 1.       在项目中新增一个xml文件为carysn.snippet,然后插入代码段,如下图: 2.       完成后会自动插入代码段模 ...

  5. Spring Boot退出代码–创建自定义退出代码

    当运行Spring Boot应用程序时,一切正常,我们将获得系统退出代码0 . 对于任何未处理的异常,应用程序将返回退出代码1 . 我们有可能从Spring Boot应用程序返回自定义退出代码. 在本 ...

  6. python 机器人开发库,如何为机器人框架创建自定义Python代码库

    I already have Python source files for some custom tasks. Can I create a custom library of these tas ...

  7. Kanzi自定义插件节点属性、自定义消息以及自定义响应

    创建自定义节点和属性类型 在自定义插件中可以使用自定义属性类型创建自定义节点,可以设置如何显示以及如何让用户与这些节点交互. 在插件工程.hpp文件中,在元类定义之后声明返回元数据的函数: ...st ...

  8. 16个最佳WordPress登录页面插件

    Looking for the best WordPress login page plugins for your website? The login page is the door to yo ...

  9. 12、Kanzi插件——创建Kanzi Engine插件的方法

    可以使用模板自动创建Kanzi Engine插件 模板选为含有Kanzi Engine插件的应用 注意:工程名不能叫plugin,因为VS工程会根据该工程名设置定义具体的类,如果命名为plugin,那 ...

最新文章

  1. 框架模式与设计模式之区别
  2. android相对布局底部对齐,Android,在edittext中输入时防止相对布局底部对齐的按钮向上移动...
  3. kali linux有线连接不见网络图标不见(解决方案)
  4. python中time模块中的倒计时_Python中time模块与datetime模块在使用中的不同之处 python 的time模块获取的是什么时间...
  5. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)
  6. 2更新字段其中一位_NoSQL之MongoDB——数据更新操作
  7. 二次优化大招(由泰勒公式推出最值条件)
  8. PCB genesis自制孔点 Font字体实现方法
  9. Linux下ftp的安装配置
  10. python请求库_如何使用Python请求库发出post请求?
  11. word另存为pdf后,pdf文件中有空白页
  12. 【OpenCV-Python-课程学习(贾)】OpenCV3.3课程学习笔记:图像色彩空间转换(cvtColor),imread()的grayscale和cvtColor()的区别、通道分离与转换
  13. (error) CLUSTERDOWN Hash slot not served
  14. 你一定要狠狠的幸福,那个凶丫头(2)
  15. mysql8 启动报错:Error while setting value ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DI
  16. Visual studio2022 利用glfw+glad配置OpenGL环境
  17. [论文解读]Deep active learning for object detection
  18. 神经网络与深度学习编程练习(coursera 吴恩达 )(3)
  19. 发现U盘不显示盘符的解决办法
  20. 图片内容转文字用Java怎么实现?

热门文章

  1. 爆款“小黄鸭”之后,实在RPA助力电商人双11提销量
  2. String转int数组
  3. 电脑快速复制粘贴大文件
  4. 微信 服务器架构,微信技术总监周颢:一亿用户背后架构秘密
  5. SCRIPT1004: 缺少 ‘;‘IE8浏览器报错
  6. VMware虚拟机 之 VMX进程已提前退出
  7. SQL UCASE() 函数
  8. 应用实践 | Apache Doris 在网易互娱的应用实践
  9. 通达信接口服务如何委托下单?
  10. layui下载图片到本地