public bool AddRoi(RoiType type) { bool isSuccess = false; try { switch (type) { case RoiType.Rectangle: mHDrawRegions.Add(new HalconDotNet.HDrawingObject()); mHDrawRegions.Last().CreateDrawingObjectRectangle1(100, 100, 500, 500); break; case RoiType.Circle: mHDrawRegions.Add(new HalconDotNet.HDrawingObject()); mHDrawRegions.Last().CreateDrawingObjectCircle(100, 100, 250); break; case RoiType.Polygon: // 先不要用,目前還不知道怎麼定形 mHDrawRegions.Add(new HalconDotNet.HDrawingObject()); mHDrawRegions.Last().CreateDrawingObjectXld(new HalconDotNet.HTuple(new int[] { 100, 150 }), new HalconDotNet.HTuple(new int[] { 100, 150 })); break; } HalconDotNet.HDrawingObject.HDrawingObjectCallback test = Callback; IntPtr callback = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(test); HalconDotNet.HTuple listenTo = new HalconDotNet.HTuple("on_select", "on_attach", "on_detach", "on_drag", "on_resize"); // in order to try order events //HalconDotNet.HTuple listenTo = new HalconDotNet.HTuple("on_select"); if (mHWindow != null) { mHWindow.AttachDrawingObjectToWindow(mHDrawRegions.Last()); } mHDrawRegions.Last().SetDrawingObjectCallback(listenTo, new HalconDotNet.HTuple(callback)); mCurrentRoiId = mHDrawRegions.Last().ID; isSuccess = true; } catch (HalconDotNet.HalconException ex) { Console.WriteLine($"{ex.StackTrace}"); } catch (System.Exception ex) { Console.WriteLine($"{ex.StackTrace}"); } return(isSuccess); }
public MyRegion(RoiType type, HalconDotNet.HRegion region) { mRoiType = type; mRegion = region; }
public static float GetBetOddRoi(RoiType roiType, SportType sportType, List<Dictionary<BetOddType, BetItemTransport>> bets) { if (bets == null || bets.Count == 0) { return default(float); } var roiOdds = GetBetOddTypesForRoi(roiType, sportType); if (roiOdds.Length == 0) { return default(float); } var dataIsGood = roiOdds.All(rodd => bets.All(b => b.ContainsKey(rodd))); if (dataIsGood) { var mapByAdvancedParam = new Dictionary<float, List<KeyValuePair<BetOddType, BetItemTransport>>>(); switch (roiType) { case RoiType.RoiHandicap:/* bets .SelectMany(bet => roiOdds.Select(odd => new KeyValuePair<BetOddType, BetItemTransport>(odd, bet[odd]))) .Each(bet => { List<KeyValuePair<BetOddType, BetItemTransport>> odds; if (!mapByAdvancedParam.TryGetValue(bet.Value.AdvancedParam, out odds)) { odds = new List<KeyValuePair<BetOddType, BetItemTransport>>(); mapByAdvancedParam[bet.Value.AdvancedParam] = odds; } odds.Add(bet); }); var oddsByParam = new List<KeyValuePair<float, List<KeyValuePair<BetOddType, BetItemTransport>>>>(); var orderedTotal = mapByAdvancedParam.OrderByDescending(odd => odd.Key).ToArray(); for (var i = 0; i < orderedTotal.Length; i++) { for (var j = i; j < orderedTotal.Length; j++) { } }*/ return bets .SelectMany(bet => roiOdds.Select(odd => new KeyValuePair<BetOddType, BetItemTransport>(odd, bet[odd]))) .GroupBy(bet => Math.Abs(bet.Value.AdvancedParam)) .MaxOrDefault(grouped => BetOddRoi(roiOdds, grouped.ToList()), default(float)); case RoiType.RoiTotal: bets .SelectMany(bet => roiOdds.Select(odd => new KeyValuePair<BetOddType, BetItemTransport>(odd, bet[odd]))) .Each(bet => { List<KeyValuePair<BetOddType, BetItemTransport>> odds; if (!mapByAdvancedParam.TryGetValue(bet.Value.AdvancedParam, out odds)) { odds = new List<KeyValuePair<BetOddType, BetItemTransport>>(); mapByAdvancedParam[bet.Value.AdvancedParam] = odds; } odds.Add(bet); }); var currentMaxRoi = float.MinValue; List<KeyValuePair<BetOddType, BetItemTransport>> prevItem = null; var ordered = mapByAdvancedParam.OrderBy(odd => odd.Key).ToArray(); for (var i = 0; i < ordered.Length; i++) { var currentItem = ordered[i].Value; currentMaxRoi = Math.Max(currentMaxRoi, BetOddRoi(roiOdds, currentItem)); if (prevItem != null) { currentMaxRoi = Math.Max(currentMaxRoi, BetOddRoi(roiOdds, prevItem .Where(pi => pi.Key == BetOddType.TotalOver) .Union(currentItem.Where(ci => ci.Key == BetOddType.TotalUnder)).ToList())); } prevItem = currentItem; } return currentMaxRoi; case RoiType.Roi12_X: case RoiType.Roi1X2: case RoiType.Roi1X_2: case RoiType.Roi1_X2: return BetOddRoi(roiOdds, bets .SelectMany(bet => roiOdds.Select(odd => new KeyValuePair<BetOddType, BetItemTransport>(odd, bet[odd]))).ToList()); } } return default(float); }
public static float GetMaxBetOddRoi(RoiType roiType, SportType sportType, Dictionary<BetOddType, BetItemTransport> bets) { return roiType.GetFlags<RoiType>().Select(r => GetBetOddRoi(r, sportType, bets)).Where(r => r != default(int)).MaxOrDefault(r => r, default(float)); }
public static BetOddType[] GetBetOddTypesForRoi(RoiType roiType, SportType sportType) { switch (roiType) { case RoiType.Roi1X2: return _roi1X2OddMapBySportTypes[sportType]; case RoiType.RoiHandicap: return _roiHandicap; case RoiType.RoiTotal: return _roiTotal; case RoiType.Roi1X_2: return _roi1X_2; case RoiType.Roi12_X: return _roi12_X; case RoiType.Roi1_X2: return _roi1_X2; default: return new BetOddType[0]; } }
public static float GetBetOddRoi(RoiType roiType, SportType sportType, Dictionary<BetOddType, BetItemTransport> bets) { if (bets == null) { return default(float); } return GetBetOddRoi(roiType, sportType, new List<Dictionary<BetOddType, BetItemTransport>> {bets}); }