using Aurora.Api; using System; using System.Reactive.Linq; namespace VisionCommon { public class VisionEventId { // Camera public static string CAMERA_UPDATE_GRAB_IMAGE_BUFFER = "Camera_UpdateGrabImageBuffer"; // Pattern public static string PATTERN_FORCE_OK_REQUEST = "Pattern_ForceOkRequest"; public static string PATTERN_EDITTING = "Pattern_Editting"; // Vision UI Update public static string CALIBRATION_SUB_SEQ_LOG_UPDATE = "Calibration_SubSeqLogUpdate"; // Vision Setup public static string CENTERTUNING_COMPLETE = "CenterTuning_Complete"; public static string VISION_REPEAT_SAVE_PARAMS = "VisionRepeat_SaveParams"; // Update Proc Result public static string UPDATE_PATTERN_RESULT = "UPDATE_PATTERN_RESULT"; public static string UPDATE_PATTERN_RESULTS = "UPDATE_PATTERN_RESULTS"; public static string UPDATE_PATTERN_DISTANCE_RESULTS = "PATTERN_DISTANCE_RESULTS"; public static string UPDATE_ALIGN_RESULT = "UPDATE_ALIGN_RESULT"; public static string UPDATE_ALIGN_RESULTS = "UPDATE_ALIGN_RESULTS"; public static string UPDATE_BCR_RESULT = "UPDATE_BCR_RESULT"; public static string UPDATE_ATTACH_INSP_RESULT = "UPDATE_ATTACH_INSP_RESULT"; // Update Setup Result public static string CLEAR_AUTO_FOCUS_LOG = "CLEAR_AUTO_FOCUS_LOG"; public static string UPDATE_AUTO_FOCUS_LOG = "UPDATE_AUTO_FOCUS_LOG"; public static string UPDATE_AUTO_FOCUS_BEST_POS = "UPDATE_AUTO_FOCUS_BEST_POS"; public static string UPDATE_VISION_REPEAT_LOG = "UPDATE_VISION_REPEAT_LOG"; // Show Fov Camera View Window public static string SHOW_FOV_CAMERA_VIEW_WINDOW = "SHOW_FOV_CAMERA_VIEW_WINDOW"; // Save Child Image Buffer Setting public static string SAVE_CHILD_IMAGE_SETTING = "SAVE_CHILD_IMAGE_SETTING"; // 다른 레시피/모델로 변경 및 항목 변경 public static IObservable GetRecipeUpdateObservable() { var visionSetting = VisionSettingManager.VisionSetting; if (visionSetting.RecipeModelType == eRecipeModelType.AuroraModel) { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ACTIVATED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_NAME_CHANGED), //VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_ITEM_CHANGED)) .Where(msg => CheckEventParam(msg)); } else if (visionSetting.RecipeModelType == eRecipeModelType.AuroraIngredient) { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ACTIVATED), //VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ITEM_CHAGNED)) .Where(msg => CheckEventParam(msg)); } else { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ACTIVATED), //VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ITEM_CHANGED)) .Where(msg => CheckEventParam(msg)); } } // 다른 레시피/모델로 변경 public static IObservable GetRecipeActivatedObservable() { var visionSetting = VisionSettingManager.VisionSetting; if (visionSetting.RecipeModelType == eRecipeModelType.AuroraModel) { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ACTIVATED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_NAME_CHANGED)) .Where(msg => CheckEventParam(msg)); } else if (visionSetting.RecipeModelType == eRecipeModelType.AuroraIngredient) { return VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ACTIVATED) .Where(msg => CheckEventParam(msg)); } else { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ACTIVATED)) .Where(msg => CheckEventParam(msg)); } } // 레시피/모델 항목 변경 public static IObservable GetRecipeItemChangedObservable() { var visionSetting = VisionSettingManager.VisionSetting; if (visionSetting.RecipeModelType == eRecipeModelType.AuroraModel) { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_ITEM_CHANGED)) .Where(msg => CheckEventParam(msg)); } else if (visionSetting.RecipeModelType == eRecipeModelType.AuroraIngredient) { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ITEM_CHAGNED)) .Where(msg => CheckEventParam(msg)); } else { return Observable.Merge( VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_RELOADED), VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ITEM_CHANGED)) .Where(msg => CheckEventParam(msg)); } } private static bool IsActivatedParam(EventMessage msg) { return (string)msg.Param == string.Empty; } private static bool CheckEventParam(EventMessage msg) { if (msg.Param is RecipeInfo recipeInfo) return true; else if (msg.Param is string) { return (string)msg.Param == string.Empty || (string)msg.Param == VisionKeys.VisionRecipeKey; } else if (msg.Param is ValueTuple param) { if (msg.From.Contains("Model")) { // Model return true; } else { // Ingredient return param.Item1 == VisionKeys.VisionRecipeKey; } } else return false; } } }