添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
using MainShell.Common;
|
||||
using MainShell.Hardware;
|
||||
using MaxwellFramework.Core.Attributes;
|
||||
using MwFramework.Device;
|
||||
using System;
|
||||
|
||||
namespace MainShell.Models
|
||||
{
|
||||
[Singleton]
|
||||
public class VisionParController
|
||||
{
|
||||
private readonly HardwareManager _hardwareManager;
|
||||
|
||||
public VisionParController(HardwareManager hardwareManager)
|
||||
{
|
||||
_hardwareManager = hardwareManager ?? throw new ArgumentNullException(nameof(hardwareManager));
|
||||
}
|
||||
|
||||
public void SetTopPositionVisionPars(CameraConfig cameraConfig, UpCamLightConfig upCamLightConfig)
|
||||
{
|
||||
SetTopPositionCameraPars(cameraConfig);
|
||||
SetUpCamLightPars(upCamLightConfig);
|
||||
}
|
||||
|
||||
public void SetBottomPositionVisionPars(CameraConfig cameraConfig, DownCamLightConfig downCamLightConfig)
|
||||
{
|
||||
SetBottomPositionCameraPars(cameraConfig);
|
||||
SetDownCamLightPars(downCamLightConfig);
|
||||
}
|
||||
|
||||
public void SetMapVisionPars(CameraConfig cameraConfig, MapCamLightConfig mapCamLightConfig)
|
||||
{
|
||||
SetMapCameraPars(cameraConfig);
|
||||
SetMapCamLightPars(mapCamLightConfig);
|
||||
}
|
||||
|
||||
public void SetTopPositionCameraPars(CameraConfig config)
|
||||
{
|
||||
MwCamera camera = GetCamera(CameraType.TopPositionCamera);
|
||||
SetCameraPars(camera, config);
|
||||
}
|
||||
|
||||
public void SetBottomPositionCameraPars(CameraConfig config)
|
||||
{
|
||||
MwCamera camera = GetCamera(CameraType.MapCamera);
|
||||
SetCameraPars(camera, config);
|
||||
}
|
||||
|
||||
public void SetMapCameraPars(CameraConfig config)
|
||||
{
|
||||
MwCamera camera = GetCamera(CameraType.MapCamera);
|
||||
SetCameraPars(camera, config);
|
||||
}
|
||||
|
||||
public void ConfigureCameraForStream(CameraType cameraType)
|
||||
{
|
||||
MwCamera camera = GetCamera(cameraType);
|
||||
EnsureCameraAvailable(camera, cameraType);
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetTriggerMode(CameraTriggerMode.Off) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置连续流触发模式失败", camera.ConnectId.CategoryName));
|
||||
}
|
||||
|
||||
public void ConfigureCameraForSoftTrigger(CameraType cameraType, double? triggerDelay = null)
|
||||
{
|
||||
MwCamera camera = GetCamera(cameraType);
|
||||
EnsureCameraAvailable(camera, cameraType);
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetTriggerMode(CameraTriggerMode.On) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置软触发模式失败", camera.ConnectId.CategoryName));
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetTriggerSource(CameraTriggerSource.Software) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置软触发源失败", camera.ConnectId.CategoryName));
|
||||
|
||||
if (triggerDelay.HasValue)
|
||||
{
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetTriggerDelay(triggerDelay.Value) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置触发延时失败", camera.ConnectId.CategoryName));
|
||||
}
|
||||
}
|
||||
|
||||
public void StartCameraGrabbing(CameraType cameraType)
|
||||
{
|
||||
MwCamera camera = GetCamera(cameraType);
|
||||
EnsureCameraAvailable(camera, cameraType);
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() =>
|
||||
{
|
||||
DriverLibResult result = camera.StartGrabbing();
|
||||
return result == DriverLibResult.DriverLibNoError || result == DriverLibResult.DriverLibDeviceAlreadyGrabbing;
|
||||
},
|
||||
string.Format("{0} 启动抓流失败", camera.ConnectId.CategoryName));
|
||||
}
|
||||
|
||||
public void StopCameraGrabbing(CameraType cameraType)
|
||||
{
|
||||
MwCamera camera = GetCamera(cameraType);
|
||||
EnsureCameraAvailable(camera, cameraType);
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() =>
|
||||
{
|
||||
DriverLibResult result = camera.StopGrabbing();
|
||||
return result == DriverLibResult.DriverLibNoError || result == DriverLibResult.DriverLibDeviceNotGrabbing;
|
||||
},
|
||||
string.Format("{0} 停止抓流失败", camera.ConnectId.CategoryName));
|
||||
}
|
||||
|
||||
public void EnsureCameraGrabbing(CameraType cameraType)
|
||||
{
|
||||
MwCamera camera = GetCamera(cameraType);
|
||||
EnsureCameraAvailable(camera, cameraType);
|
||||
|
||||
if (!camera.IsGrabbing)
|
||||
{
|
||||
throw new InvalidOperationException(string.Format("相机 '{0}' 当前未处于抓流状态。", cameraType));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCameraPars(MwCamera camera, CameraConfig config)
|
||||
{
|
||||
if (camera == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(camera));
|
||||
}
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(config));
|
||||
}
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetExposureTime(config.ExposureTime) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置曝光失败", camera.ConnectId.CategoryName));
|
||||
|
||||
RetryMechanism.RetryIfNeeded(
|
||||
() => camera.SetGain(config.Gain) == DriverLibResult.DriverLibNoError,
|
||||
string.Format("{0} 设置增益失败", camera.ConnectId.CategoryName));
|
||||
}
|
||||
|
||||
public void SetDownCamLightPars(DownCamLightConfig config)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(config));
|
||||
}
|
||||
|
||||
_hardwareManager.SetDownPointBlueLightIntensity(config.PointBlueLight);
|
||||
_hardwareManager.SetDownRingBlueLightIntensity(config.RingBlueLight);
|
||||
_hardwareManager.SetDownPointRedLightIntensity(config.PointRedLight);
|
||||
_hardwareManager.SetDownRingRedLightIntensity(config.RingRedLight);
|
||||
}
|
||||
|
||||
public void SetUpCamLightPars(UpCamLightConfig config)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(config));
|
||||
}
|
||||
|
||||
_hardwareManager.SetUpPointBlueLightIntensity(config.PointBlueLight);
|
||||
_hardwareManager.SetUpRingBlueLightIntensity(config.RingBlueLight);
|
||||
_hardwareManager.SetUpPointRedLightIntensity(config.PointRedLight);
|
||||
_hardwareManager.SetUpRingRedLightIntensity(config.RingRedLight);
|
||||
_hardwareManager.SetUpRedBackLightIntensity(config.RedBackLight);
|
||||
}
|
||||
|
||||
public void SetMapCamLightPars(MapCamLightConfig config)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(config));
|
||||
}
|
||||
|
||||
_hardwareManager.SetMapBlueLightIntensity(config.BlueLight);
|
||||
_hardwareManager.SetMapRedLightIntensity(config.RedLight);
|
||||
}
|
||||
|
||||
private MwCamera GetCamera(CameraType cameraType)
|
||||
{
|
||||
return _hardwareManager.GetCamera(cameraType).Camera;
|
||||
}
|
||||
|
||||
private static void EnsureCameraAvailable(MwCamera camera, CameraType cameraType)
|
||||
{
|
||||
if (camera == null)
|
||||
{
|
||||
throw new InvalidOperationException(string.Format("相机 '{0}' 不存在。", cameraType));
|
||||
}
|
||||
|
||||
if (!camera.IsOpen)
|
||||
{
|
||||
throw new InvalidOperationException(string.Format("相机 '{0}' 未打开。", cameraType));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user