更改 ProBuilber 插件(三):将之前的修改添加到选单

书接上回,接着需要做的是把 图标 和 汉化 加入右键菜单中,做成可选的,而不是写死的。
这个功能理应开始的时候就先确认,但我开始没想做这么多,算是额外内容吧。 所以,不会写的太详细。

一、添加菜单项

①、 第一步基本可以不用想,在 ProBuilderEditor 类中,对于的位置添加菜单项。
    
menu . AddItem ( new GUIContent ( "Use Icon Mode" , "" ) , s_IsIconGui , Menu_ToggleIconMode ) ; menu . AddItem ( new GUIContent ( "Use Text Mode" , "" ) , ! s_IsIconGui , Menu_ToggleIconMode ) ; //<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码 menu . AddSeparator ( "" ) ; menu . AddItem ( new GUIContent ( "Text Mode + Icon" , "" ) , < 是否开启条件 > , < 切换方法 > ) ; menu . AddItem ( new GUIContent ( "Text Mode + 汉化" , "" ) , < 是否开启条件 > , < 切换方法 > ) ; //>>>>>>>>>>>>>>>>>>>>>>>>>
②、 补全上面代码,看似填空题,实则举一反三,照猫画虎嘛。 首先是条件,
    
[ UserSetting ( "Toolbar" , "Icon GUI" , "Toggles the ProBuilder window interface between text and icon versions." ) ] internal static Pref < bool > s_IsIconGui = new Pref < bool > ( "editor.toolbarIconGUI" , false ) ; //<<<<<<<<<<<<<<<<<<<<<<< 添加代码 [ UserSetting ( "Toolbar" , "Text Mode + Icon" , "在 Text Mode 下显示图标。" ) ] internal static Pref < bool > s_EnableTextModeIcon = new Pref < bool > ( "editor.toolbarTextModeIcon" , false ) ; [ UserSetting ( "Toolbar" , "Text Mode + ZH" , "在 Text Mode 下使用中文标题。" ) ] internal static Pref < bool > s_EnableTextModeZH = new Pref < bool > ( "editor.toolbarTextModeZH" , false ) ; //>>>>>>>>>>>>>>>>>>>>>>>
再是切换方法,
    
void Menu_ToggleIconMode ( ) { s_IsIconGui . value = ! s_IsIconGui . value ; IconModeChanged ( ) ; } //<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码 void Menu_ToggleTextMode_Icon ( ) { //s_EnableTextModeIcon.value = !s_EnableTextModeIcon.value; //IconModeChanged(); //直接这样照搬不是不想,但为了顺应使用直觉,所以微改了一下。 s_EnableTextModeIcon . value = s_IsIconGui | ! s_EnableTextModeIcon . value ; s_IsIconGui . value = false ; IconModeChanged ( ) ; } void Menu_ToggleTextMode_ZH ( ) { //同理 s_EnableTextModeZH . value = s_IsIconGui | ! s_EnableTextModeZH . value ; s_IsIconGui . value = false ; IconModeChanged ( ) ; } //>>>>>>>>>>>>>>>>>>>>>>>>>
之后将第一步的代码补全,
    
//<<<<<<<<<<<<<<<<<<<<<<<<< menu . AddSeparator ( "" ) ; menu . AddItem ( new GUIContent ( "Text Mode + Icon" , "" ) , ! s_IsIconGui & s_EnableTextModeIcon , Menu_ToggleTextMode_Icon ) ; menu . AddItem ( new GUIContent ( "Text Mode + 汉化" , "" ) , ! s_IsIconGui & s_EnableTextModeZH , Menu_ToggleTextMode_ZH ) ; //>>>>>>>>>>>>>>>>>>>>>>>>>
选单就添加完成了。

二、绑定功能

①、 还是先照猫画虎的,将变量引用到 MenuAction 类中, 这步其实不是必要的,但强迫症表示还是顺着来吧, 毕竟直接调用代码太长看着也不舒服。
    
protected MenuAction ( ) { iconMode = ProBuilderEditor . s_IsIconGui ; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码 textModeIcon = ProBuilderEditor . s_EnableTextModeIcon ; textModeZH = ProBuilderEditor . s_EnableTextModeZH ; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>> } protected bool iconMode { get ; set ; } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 添加代码 protected bool textModeIcon { get ; set ; } protected bool textModeZH { get ; set ; } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
②、 绑定 Icon 相关的修改,
    
//第一处,不用说 Button 的 GUIContent GUIContent guiContent = new GUIContent ( TranslateMT ( menuTitle ) , textModeIcon ? ( buttonEnabled || ! disabledIcon ? icon : disabledIcon ) : null ) ; if ( GUILayout . Button ( guiContent , MenuActionStyles . buttonStyleVertical ) ) //第二处,后面 [+] Button 的 GUILayout.MaxHeight if ( DoAltButton ( GUILayout . MaxWidth ( 21 ) , GUILayout . MaxHeight ( textModeIcon ? Mathf . Max ( 16 , guiContent . image . height + 4 ) : 16 ) ) ) //第三处,GetSize(...) 方法中,当有图标时需要的额外计算 if ( textModeIcon ) { bool buttonEnabled = ( menuActionState & MenuActionState . Enabled ) == MenuActionState . Enabled ; Texture2D t = ( buttonEnabled || ! disabledIcon ? icon : disabledIcon ) ; if ( t ) { m_LastCalculatedSize . x += t . width ; m_LastCalculatedSize . y = System . Math . Max ( m_LastCalculatedSize . y , t . height ) ; } }
③、 绑定 汉化 相关的修改, 汉化的就更省事了,直接在之前加的 TranslateMT 方法里添一行就可以了。
    
internal string TranslateMT ( string menuTitle ) { if ( ! textModeZH ) return menuTitle ; //添加这一行就搞定了 return menuTitleDic . ContainsKey ( menuTitle ) ? menuTitleDic [ menuTitle ] : menuTitle ; }
不过,在上一篇结尾,我们对 TooltipContent 类,也做了汉化。 所以这也不能忘了,
    
internal string GetSummary ( ) { if ( ! ProBuilderEditor . s_EnableTextModeZH ) return summaryOir ; //同样一行搞定 return summaryDic . ContainsKey ( title ) ? summaryDic [ title ] : summaryOir ; }
这就大功告成了🎉🎉🎉
最后再上一次成果图

附、

修改的插件,欢迎自取 - GitHub链接
Ps.这应该是最后一篇了,虽然还有些想改的。 比如 创建模型 或是 倒角 的时候,总是要修改参数在执行,想给这些加个 保存预设 的功能。 但之后一段时间需要准备一些东西,所以就告一段落了。但是大家还是可以尝试一下的。 我有空还是继续更新 自定义Inspector面板 的文章吧。
内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值