BitWaferMap 2.0.0

FastWaferPanel - 高性能晶圆图控件

概述

FastWaferPanel 是一个高性能的 WPF 晶圆图(Wafer Map)自定义控件,专为大规模晶圆测试数据显示而设计。它支持快速渲染、交互式选择和实时数据更新,适用于半导体测试、良率分析等场景。

特性

🚀 高性能渲染

  • 60 FPS 稳定帧率:使用定时器控制渲染频率,确保流畅的视觉体验
  • 智能渲染请求:仅在有变化时请求重绘,避免不必要的性能消耗
  • 视口裁剪:只渲染可见区域内的 Die,大幅提升大数据量下的性能
  • 缓存机制:缓存格式化文本和画笔,减少重复创建开销

🎯 丰富的交互功能

  • 多种选择模式
    • 单击选择单个 Die
    • 框选矩形区域内的多个 Die
    • Ctrl+单击进行多选
  • 鼠标操作
    • 滚轮缩放(支持中心点缩放)
    • 中键拖拽平移视图
    • 右键打开上下文菜单
  • 实时提示
    • 鼠标悬停显示 Die 详细信息
    • 选中数量实时统计

🎨 灵活的显示控制

  • 坐标系统:支持标准坐标系和数学坐标系切换
  • 自定义尺寸:可独立设置 Die 的宽度和高度
  • 动态文本显示:缩放级别足够时自动显示 Die 坐标和 BinCode
  • 闪烁提示:支持指定 Die 的闪烁高亮

🔧 扩展性设计

  • 接口分离:通过 IDieInfo 接口支持自定义数据模型
  • 事件系统
    • DieClicked:单击事件
    • SelectionChanged:选择变化事件
    • HoverChanged:悬停变化事件
    • RequestColorForSelected:请求设置颜色事件
  • 数据绑定:支持与 MVVM 模式无缝集成

快速开始

安装

FastWaferPanel.cs 文件添加到您的 WPF 项目中,并确保引用必要的命名空间:

xml

<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BitWaferMap">
    
    <Grid>
        <local:FastWaferPanel x:Name="waferPanel"
                              Dies="{Binding Dies}"
                              DieWidth="15"
                              DieHeight="15"
                              UseMathCoordinate="False"/>
    </Grid>
</Window>

基本使用

csharp

// 创建数据
var dies = new ObservableCollection<IDieInfo>();
for (int x = 0; x < 50; x++)
{
    for (int y = 0; y < 50; y++)
    {
        dies.Add(new DieInfo
        {
            X = x,
            Y = y,
            BinCode = "PASS",
            Brush = Brushes.LightGreen
        });
    }
}

// 绑定到控件
waferPanel.Dies = dies;

// 居中显示
waferPanel.CenterViewOnDies(dies);

// 适应窗口
waferPanel.FitToWindow(dies);

高级用法

1. 自定义数据模型

实现 IDieInfo 接口来创建自定义数据模型:

csharp

public class CustomDieInfo : IDieInfo
{
    public int X { get; set; }
    public int Y { get; set; }
    public int Row { get; set; }
    public int Col { get; set; }
    public object? Tag { get; set; }
    public Brush Brush { get; set; } = Brushes.LightGray;
    public string BinCode { get; set; } = "N/A";
    
    // 自定义属性
    public double TestValue { get; set; }
    public DateTime TestTime { get; set; }
}

2. 响应选择事件

csharp

waferPanel.SelectionChanged += (s, e) =>
{
    var selected = e.SelectedDies;
    statusBar.Text = $"已选择: {selected.Count} 个 Die";
    
    foreach (var die in selected)
    {
        Console.WriteLine($"Die [{die.X},{die.Y}]: {die.BinCode}");
    }
};

waferPanel.DieClicked += (s, die) =>
{
    MessageBox.Show($"点击了 Die: ({die.X}, {die.Y})");
};

3. 动态更新数据

csharp

// 添加新 Die
if (waferPanel.Dies is ObservableCollection<IDieInfo> collection)
{
    collection.Add(new DieInfo { X = 10, Y = 20, BinCode = "FAIL" });
}

// 更新颜色
waferPanel.ChangeDieColor(5, 5, Brushes.Red);

// 批量更新选中颜色
waferPanel.ApplyColorToSelected(Brushes.Gold);

4. 闪烁提示功能

csharp

// 开始闪烁指定位置的 Die
waferPanel.StartBlink(new[] { (5, 5), (6, 6), (7, 7) });

// 停止闪烁
waferPanel.StopBlink(new[] { (5, 5) });

// 停止所有闪烁
waferPanel.StopAllBlink();

配置选项

属性 类型 说明
Dies IEnumerable<IDieInfo> 晶圆数据源
SelectedDies IEnumerable<IDieInfo> 当前选中的 Die 集合
SelectedDie IDieInfo 当前选中的单个 Die
Mode WaferPanelMode 操作模式(Normal/ExternalAdding/Selecting/Panning)
DieWidth double Die 宽度(像素)
DieHeight double Die 高度(像素)
UseMathCoordinate bool 是否使用数学坐标系(Y轴向上)
Scale double 缩放比例
Offset Point 视图偏移量
IsTrack bool 是否启用视图跟踪

性能优化建议

  1. 数据量优化:对于超过 10,000 个 Die 的数据,建议使用虚拟化或分页加载
  2. 渲染优化:当 Die 数量巨大时,可以设置 DieWidth/Height 较小值
  3. 文本显示:只在缩放级别足够时显示文本,避免过多文本渲染
  4. 集合选择:优先使用 ObservableCollection 以便自动响应集合变化

版本说明

Version 2.0.0 (2026.02.18)

  • ✨ 初始版本发布

  • 🎨 基础晶圆图渲染功能

  • 🖱️ 鼠标交互(单击、框选、缩放、平移)

  • 📊 60 FPS 流畅渲染

  • 💡 悬停提示功能

  • ⚡ 性能优化:视口裁剪、缓存机制

  • 🎯 新增闪烁提示功能

  • 🔧 添加数学坐标系支持

  • 📝 优化文本渲染,支持动态字体大小

  • 🚀 智能渲染请求系统

  • 🎨 支持自定义 Die 颜色

  • 📋 上下文菜单扩展

  • 🔗 改进数据绑定支持

Demo 示例

示例 1:基础晶圆图

csharp

// 创建 100x100 的晶圆图
var dies = new ObservableCollection<IDieInfo>();
var random = new Random();

for (int x = 0; x < 100; x++)
{
    for (int y = 0; y < 100; y++)
    {
        var value = random.NextDouble();
        var binCode = value > 0.9 ? "FAIL" : "PASS";
        var brush = value > 0.9 ? Brushes.Red : Brushes.LightGreen;
        
        dies.Add(new DieInfo
        {
            X = x,
            Y = y,
            BinCode = binCode,
            Brush = brush
        });
    }
}

waferPanel.Dies = dies;

示例 2:实时数据更新

csharp

// 模拟实时测试数据
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
timer.Tick += (s, e) =>
{
    var random = new Random();
    var x = random.Next(0, 100);
    var y = random.Next(0, 100);
    
    waferPanel.ChangeDieColor(x, y, 
        random.NextDouble() > 0.7 ? Brushes.Red : Brushes.Green);
};
timer.Start();

示例 3:良率分析

csharp

waferPanel.SelectionChanged += (s, e) =>
{
    var selected = e.SelectedDies;
    var failCount = selected.Count(d => d.BinCode == "FAIL");
    
    analysisText.Text = $"选中区域: {selected.Count} 个 Die\n" +
                       $"不良数: {failCount}\n" +
                       $"良率: {(1 - (double)failCount/selected.Count):P2}";
};

示例 4:自定义上下文菜单

csharp

var contextMenu = new ContextMenu();

var menuAnalyze = new MenuItem { Header = "分析选中区域" };
menuAnalyze.Click += (s, e) => AnalyzeSelectedRegion();

var menuExport = new MenuItem { Header = "导出数据" };
menuExport.Click += (s, e) => ExportSelectedData();

contextMenu.Items.Add(menuAnalyze);
contextMenu.Items.Add(menuExport);

waferPanel.ContextMenu = contextMenu;

常见问题

Q: 如何处理大量数据(>100,000 Die)的渲染? A: FastWaferPanel 已经实现了视口裁剪,只渲染可见区域。建议配合虚拟化技术使用,并适当降低 DieWidth/Height 值。

Q: 如何实现实时数据刷新? A: 使用 ObservableCollection<IDieInfo> 作为数据源,当集合发生变化时会自动触发重绘。

Q: 支持触摸屏操作吗? A: 当前版本主要支持鼠标操作,触摸屏支持将在 1.4.0 版本中添加。

Q: 如何自定义 Die 的显示样式? A: 通过实现 IDieInfo 接口,您可以完全控制每个 Die 的 Brush 属性来自定义颜色。

贡献指南

欢迎贡献代码、报告问题或提出新功能建议。请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

联系方式

  • 作者:[您的姓名]
  • 邮箱:[您的邮箱]
  • 项目地址:[GitHub 仓库地址]

FastWaferPanel - 为半导体测试行业提供高性能、易扩展的晶圆图显示解决方案

No packages depend on BitWaferMap.

用于显示和操作晶圆图(Wafer Map)

.NET Framework 4.8

  • No dependencies.

Version Downloads Last updated
2.0.0 10 02/18/2026
1.0.7.4 11 02/02/2026
1.0.7.3 11 01/06/2026
1.0.7.1 10 12/31/2025
1.0.7 8 12/31/2025
1.0.6.7 20 12/22/2025
1.0.6.4 16 12/22/2025
1.0.6.3 19 12/18/2025
1.0.6.2 10 12/18/2025
1.0.6.1 11 12/18/2025
1.0.6 10 12/18/2025
1.0.5 11 12/18/2025