HalconEngine.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using Plugins.Halcon.Views;
  4. using TeamAAS.Vision;
  5. namespace Plugins.Halcon.Engines
  6. {
  7. /// <summary>
  8. /// HALCON 视觉引擎:实现 <see cref="IVisualEngine"/> 契约,由 VisualEngineManager 反射探测后
  9. /// 出现在设置页引擎列表,可一键切换。主页多画面基于 <see cref="UCDispHalcon"/>(HALCON 画面框网格),
  10. /// 与 VisionProEngine / VisionMasterEngine 对等——HALCON SDK 只被本插件引用,宿主仅通过接口访问。
  11. /// </summary>
  12. public class HalconEngine : IVisualEngine
  13. {
  14. public string EngineName => "Vision";
  15. public FrameworkElement GetMainView() => UCDispHalcon.Instance;
  16. public void ApplyHomeLayout(int frameCount, int arrange)
  17. {
  18. // RowColNumber:{画面总数, 排列方式}——内部按最优行列铺设 HalconWindow 网格;0=清空画面区
  19. UCDispHalcon.Instance.RowColNumber = new[] { frameCount, arrange };
  20. }
  21. /// <summary>
  22. /// 标定视图:一个 HALCON 画面框(可显示标定图像、交互绘制 ROI)。
  23. /// 标定向导随当前引擎切换到此视图。
  24. /// </summary>
  25. public FrameworkElement GetCalibrationView()
  26. {
  27. var win = new HalconWindow(1);
  28. win.SetCaption("HALCON 标定");
  29. return new Border
  30. {
  31. Background = System.Windows.Media.Brushes.Transparent,
  32. Child = win
  33. };
  34. }
  35. public void SetFrameCaption(int index, string name)
  36. {
  37. if (index < 0 || UCDispHalcon.Instance.halconWindow.Count <= index) return;
  38. UCDispHalcon.Instance.halconWindow[index].SetCaption(name);
  39. }
  40. public void SetFrameDotVisible(int index, bool visible)
  41. {
  42. if (index < 0 || UCDispHalcon.Instance.halconWindow.Count <= index) return;
  43. UCDispHalcon.Instance.halconWindow[index].SetStatusDotVisible(visible);
  44. }
  45. }
  46. }