修复图像算子工具箱的图标与流程图界面保持一致

This commit is contained in:
DESKTOP-VO9ISA2\zhengxuan.zhang
2026-04-20 09:37:28 +08:00
parent 4390ad1e9f
commit 5fa6f4025d
6 changed files with 48 additions and 34 deletions
@@ -44,6 +44,18 @@ namespace XplorePlane.Tests.Pipeline
Assert.Equal(0, vm.PipelineNodes[0].Order);
}
[Fact]
public void AddOperator_KnownKey_SetsIconPath()
{
_mockImageSvc.Setup(s => s.GetAvailableProcessors()).Returns(new[] { "ShockFilter" });
var vm = CreateVm();
vm.AddOperatorCommand.Execute("ShockFilter");
Assert.Single(vm.PipelineNodes);
Assert.Equal("⚡", vm.PipelineNodes[0].IconPath);
}
[Fact]
public void AddOperator_InvalidKey_NodeNotAdded()
{
@@ -37,21 +37,7 @@ namespace XplorePlane.ViewModels
private readonly IImageProcessingService _imageProcessingService;
private string _searchText = string.Empty;
// 算子 Key -> (分类名, 分类图标, 算子图标) 映射
private static readonly Dictionary<string, (string Category, string CatIcon, string OpIcon)> CategoryMap = new()
{
["GaussianBlur"] = ("滤波与平滑", "🔵", "🌀"),
["GaussianBlur16"] = ("滤波与平滑", "🔵", "🌀"),
["BandPassFilter"] = ("滤波与平滑", "🔵", "📶"),
["ShockFilter"] = ("滤波与平滑", "🔵", "⚡"),
["Contrast"] = ("增强与校正", "🟡", "🔆"),
["Gamma"] = ("增强与校正", "🟡", "🌗"),
["FlatFieldCorrection16"] = ("增强与校正", "🟡", "📐"),
["Threshold"] = ("分割与阈值", "🟢", "📊"),
["Division"] = ("分割与阈值", "🟢", "➗"),
["Morphology"] = ("形态学与轮廓", "🔴", "🔲"),
["Contour"] = ("形态学与轮廓", "🔴", "✏️"),
};
// UI 元数据(分类 + 图标)由 OperatorUiMetadata 统一提供,保持工具箱与流水线图标一致
public OperatorToolboxViewModel(IImageProcessingService imageProcessingService)
{
@@ -82,10 +68,8 @@ namespace XplorePlane.ViewModels
foreach (var key in _imageProcessingService.GetAvailableProcessors())
{
var displayName = _imageProcessingService.GetProcessorDisplayName(key);
var (category, catIcon, opIcon) = CategoryMap.TryGetValue(key, out var info)
? info
: ("其他", "⚙", "⚙");
AvailableOperators.Add(new OperatorDescriptor(key, displayName ?? key, opIcon, category, catIcon));
var (category, categoryIcon, operatorIcon) = OperatorUiMetadata.Get(key);
AvailableOperators.Add(new OperatorDescriptor(key, displayName ?? key, operatorIcon, category, categoryIcon));
}
ApplyFilter();
}
@@ -183,7 +183,8 @@ namespace XplorePlane.ViewModels
}
var displayName = _imageProcessingService.GetProcessorDisplayName(operatorKey) ?? operatorKey;
var node = new PipelineNodeViewModel(operatorKey, displayName)
var icon = OperatorUiMetadata.GetOperatorIcon(operatorKey);
var node = new PipelineNodeViewModel(operatorKey, displayName, icon)
{
Order = PipelineNodes.Count
};
@@ -442,7 +443,8 @@ namespace XplorePlane.ViewModels
{
var displayName = _imageProcessingService.GetProcessorDisplayName(nodeModel.OperatorKey)
?? nodeModel.OperatorKey;
var node = new PipelineNodeViewModel(nodeModel.OperatorKey, displayName)
var icon = OperatorUiMetadata.GetOperatorIcon(nodeModel.OperatorKey);
var node = new PipelineNodeViewModel(nodeModel.OperatorKey, displayName, icon)
{
Order = nodeModel.Order,
IsEnabled = nodeModel.IsEnabled
@@ -164,7 +164,7 @@
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="13"
Text="" />
Text="{Binding IconPath}" />
</Border>
<!-- 算子名称 -->
+2 -2
View File
@@ -164,7 +164,7 @@
<ProjectReference Include="..\XP.Camera\XP.Camera.csproj" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy $(SolutionDir)ExternalLibraries\*.* $(TargetDir) /d /y" />
<Exec Command="xcopy $(SolutionDir)ExternalLibraries\Models $(TargetDir)Models\ /d /y /i" />
<Exec Command="xcopy &quot;$(MSBuildProjectDirectory)\..\ExternalLibraries\*.*&quot; &quot;$(TargetDir)&quot; /d /y" />
<Exec Command="xcopy &quot;$(MSBuildProjectDirectory)\..\ExternalLibraries\Models&quot; &quot;$(TargetDir)Models\&quot; /d /y /i" />
</Target>
</Project>
+21 -5
View File
@@ -46,16 +46,14 @@
1、各窗体间数据流的传递,全局数据结构的设计(包括一个基本的说明文档)√
2、将telerik 升级到 2024.1.408.310;调整界面和主题;引入 硬件层依赖 √
3、图像算子流程文件,保存文件后缀 .imw, image process workflow 缩写 √
4、CNC保存文件后缀为.xp, 表示 XplorePlane CNC file 的缩写
4、CNC保存文件后缀为.xp, 表示 XplorePlane CNC file 的缩写
5、硬件层射线源控件的初步集成(采用库层面的自定义控件方式) √
PrismBootstrapper 的执行顺序是:RegisterTypes() → ConfigureModuleCatalog() → InitializeModules() → CreateShell()
2026.3.27
2026.4.16
----------------------
CNC及矩阵功能的设计与实现,包含以下功能:
CNC及矩阵功能的设计与评审,包含以下功能:
1、CNC功能设计与实现,包含以下功能:
a. CNC状态的定义和管理
b. CNC界面设计与实现
@@ -66,6 +64,24 @@ CNC及矩阵功能的设计与实现,包含以下功能:
2026.4.20
----------------------
1、图像算子工具箱的图标 √
2、最新的图像算子集成
3、修复流程图编辑器,并屏蔽
4、主页面加载图像的功能