Esempio n. 1
0
        private async void Analyze_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                recogCanvas.Children.Clear();
                debugCanvas.Children.Clear();
                var status = await inkRecognizer.RecognizeAsync();

                if (status == HttpStatusCode.OK)
                {
                    var root = inkRecognizer.GetRecognizerRoot();
                    if (root != null)
                    {
                        var pic = new DrawsomePic(root, inkRecognizer.strokes, (int)hook.Value);

                        if (pic.Root != null)
                        {
                            DrawRect(pic);
                            DrawStorkes(pic);
                            var composerBot = await BotGenerator.Parse(pic);

                            this.botInstance        = composerBot;
                            this.gButton.Visibility = Visibility.Visible;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var messageDialog = new MessageDialog(ex.Message);
                await messageDialog.ShowAsync();
            }
        }
Esempio n. 2
0
 private void DrawRect(DrawsomePic pic)
 {
     foreach (var shape in pic.AllShapes)
     {
         debugCanvas.Children.Add(GetPolygon(shape.RecogUnit.BoundingRect, ColorHelper.FromArgb(255, 0, 255, 0)));
         debugCanvas.Children.Add(GetPolyLocationTextBlock(shape));
     }
 }
Esempio n. 3
0
        public static async Task <ComposerBot> Parse(DrawsomePic pic)
        {
            var root = pic.Root;

            var allSteps = new List <ComposerStep>();

            var rootSteps = await BuildFromStepUntil(pic, root, null, allSteps, new HashSet <DrawsomeObj>());

            var bot = new ComposerBot(rootSteps);

            bot.AllSteps = allSteps;
            return(bot);
        }
Esempio n. 4
0
        private void DrawStorkes(DrawsomePic pic)
        {
            var lines = pic.AllLines;

            foreach (var line in lines)
            {
                foreach (var rect in line.LittleRects)
                {
                    var poly = GetPolygon(rect, ColorHelper.FromArgb(255, 255, 255, 0));
                    recogCanvas.Children.Add(poly);
                }
            }
        }
Esempio n. 5
0
        // return a list of step from cur root
        public static async Task <List <ComposerStep> > BuildFromStepUntil(DrawsomePic pic, DrawsomeObj root, DrawsomeObj target, List <ComposerStep> allSteps, HashSet <DrawsomeObj> visited)
        {
            var steps = new List <ComposerStep>();

            if (root == target)
            {
                return(steps);
            }

            if (visited.Contains(root))
            {
                return(steps);
            }

            visited.Add(root);

            // only one next
            if (root.Next.Count != 2)
            {
                if (root is DrawsomeShape)
                {
                    var step = await BuildComposerStepFromShape(root as DrawsomeShape);

                    steps.Add(step);
                    allSteps.Add(step);
                    steps.AddRange(await BuildFromStepUntil(pic, root.Next.FirstOrDefault(), target, allSteps, visited));
                }
                else if (root is DrawsomeLine)
                {
                    steps.AddRange(await BuildFromStepUntil(pic, root.Next.FirstOrDefault(), target, allSteps, visited));
                }
            }

            if (root.Next.Count == 2)
            {
                if (root is DrawsomeShape)
                {
                    var firstCommon = NearestObj(pic, root);
                    var step        = new IfCondition((root as DrawsomeShape).Text, root as DrawsomeShape);
                    allSteps.Add(step);
                    step.Steps = await BuildFromStepUntil(pic, root.Next.FirstOrDefault(), firstCommon, allSteps, visited);

                    step.ElseSteps = await BuildFromStepUntil(pic, root.Next.LastOrDefault(), firstCommon, allSteps, visited);

                    steps.Add(step);
                    steps.AddRange(await BuildFromStepUntil(pic, firstCommon, target, allSteps, visited));
                }
            }

            return(steps);
        }
Esempio n. 6
0
        private static DrawsomeObj NearestObj(DrawsomePic pic, DrawsomeObj root)
        {
            var trueList = new List <DrawsomeObj>();

            var trueRoot = root.Next?[0];

            while (trueRoot != null)
            {
                if (trueList.Find(item => item == trueRoot) == null)
                {
                    trueList.Add(trueRoot);
                }
                else
                {
                    break;
                }

                trueRoot = trueRoot.Next.FirstOrDefault();
            }
            var falseList = new List <DrawsomeObj>();

            var falseRoot = root.Next?[1];

            while (falseRoot != null)
            {
                if (falseList.Find(item => item == falseRoot) == null)
                {
                    falseList.Add(falseRoot);
                }
                else
                {
                    break;
                }

                falseRoot = falseRoot.Next.FirstOrDefault();
            }

            var commonList = trueList.Intersect(falseList);

            var firstCommon = commonList?.FirstOrDefault();

            return(firstCommon);
        }