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);
        }
Exemplo n.º 2
0
 public MyRegion(RoiType type, HalconDotNet.HRegion region)
 {
     mRoiType = type;
     mRegion  = region;
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
 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];
     }
 }
Exemplo n.º 6
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});
 }