using Aurora; using Aurora.Api; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VisionCommon { internal class RecipeUpdaterUtil { private const string KEY_UNIT_RECIPES = nameof(VisionDef.UnitRecipes); private const string KEY_SUB_SYS_RECIPES = nameof(UnitRecipe.SubSysRecipes); private const string KEY_FOV_RECIPES = nameof(SubSysRecipe.FovRecipes); private const string KEY_ALIGN_RECIPES = nameof(SubSysRecipe.AlignRecipes); public static List GetAlignRecipes(JToken machineVisionRecipe) { var tokens = new List(); foreach (JToken subSysRecipe in GetSubSysRecipes(machineVisionRecipe)) { JToken alignRecipes = subSysRecipe.SelectToken(KEY_ALIGN_RECIPES); if (alignRecipes != null) { foreach (JToken alignRecipe in alignRecipes) { tokens.Add(alignRecipe); } } } return tokens; } public static List GetFovRecipes(JToken machineVisionRecipe) { var tokens = new List(); foreach (JToken subSysRecipe in GetSubSysRecipes(machineVisionRecipe)) { JToken fovRecipes = subSysRecipe.SelectToken(KEY_FOV_RECIPES); if (fovRecipes != null) { foreach (JToken fovRecipe in fovRecipes) { tokens.Add(fovRecipe); } } } return tokens; } public static List GetSubSysRecipes(JToken machineVisionRecipe) { var tokens = new List(); foreach (JToken unitRecipe in GetUnitRecipes(machineVisionRecipe)) { JToken subSysRecipes = unitRecipe.SelectToken(KEY_SUB_SYS_RECIPES); if (subSysRecipes != null) { foreach (JToken subSysRecipe in subSysRecipes) { tokens.Add(subSysRecipe); } } } return tokens; } public static List GetUnitRecipes(JToken machineVisionRecipe) { var tokens = new List(); JToken unitRecipes = machineVisionRecipe.SelectToken(KEY_UNIT_RECIPES); if (unitRecipes != null) { foreach (JToken unitRecipe in unitRecipes) { tokens.Add(unitRecipe); } } return tokens; } public static bool KeyEquals(JToken jtoken, string key) { if (jtoken.Path.EndsWith($".{key}")) { return true; } return false; } public static List GetDataDirectories(eRecipeModelType recipeModelType) { switch(recipeModelType) { case eRecipeModelType.AuroraRecipe: return GetRecipeDirectories(); case eRecipeModelType.AuroraModel: return GetModelDirectories(); default: return new List(); } } private static List GetRecipeDirectories() { var recipeDirectories = new List(); var recipeDirPath = Path.Combine( ApplicationExt.DataPath, "_config_recipe"); var recipesFilePath = Path.Combine( recipeDirPath, "recipes.json"); var recipesRootToken = JsonManager.ParseFromFile(recipesFilePath); if (recipesRootToken != null) { var recipesToken = recipesRootToken.SelectToken("Recipes"); if (recipesToken != null) { foreach (JToken recipeInfoToken in recipesToken) { var recipeInfo = recipeInfoToken.ToObject(); if (recipeInfo != null) { recipeDirectories.Add(Path.Combine( recipeDirPath, recipeInfo.Name)); } } } } return recipeDirectories; } private static List GetModelDirectories() { var modelDirectories = new List(); var modelDirPath = Path.Combine( ApplicationExt.DataPath, "_config_model"); var modelDirCandidates = Directory.GetDirectories(modelDirPath); foreach (var modelDir in modelDirCandidates) { var recipeFilePath = Path.Combine(modelDir, $"{VisionKeys.VisionRecipeKey}.json"); if (File.Exists(recipeFilePath)) { modelDirectories.Add(modelDir); } } return modelDirectories; } } }