Beispiel #1
0
        public static DesignerContainer Group(DesignerCanvas dc, IEnumerable <DesignerContainer> items)
        {
            if (items != null && dc != null)
            {
                var rect      = GetBoundingRectangle(items);
                var groupItem = new DesignerContainer();
                groupItem.IsGroup = true;
                groupItem.Width   = rect.Width;
                groupItem.Height  = rect.Height;
                m_oldLeft         = rect.Left;
                m_oldTop          = rect.Top;
                Canvas.SetLeft(groupItem, rect.Left);
                Canvas.SetTop(groupItem, rect.Top);
                var groupCanvas = new Canvas();

                groupItem.Content = groupCanvas;
                Panel.SetZIndex(groupItem, dc.Children.Count);
                dc.Add(groupItem);

                foreach (var item in items)
                {
                    item.ParentID = groupItem.ID;
                }
                dc.SelectionService.SelectItem(groupItem);
                groupItem.NameVisible = false;
                ///SaveOpt(mgr.CurrentCanvas, mgr);
                return(groupItem);
            }
            return(null);
        }
        public override bool ReRun(CommandManager mgr)
        {
            if (dc != null)
            {
                dc.Add(m_di);
                dc.SelectionService.SelectItem(m_di);
            }
            var adornerLayer = AdornerLayer.GetAdornerLayer(dc);

            //PolylineAdorner adorner = dc.m_pAdorner;
            //if (adornerLayer != null && adorner != null)
            //{
            //    if (adorner.IsMouseCaptured)
            //    {
            //        adorner.ReleaseMouseCapture();
            //    }
            //    adornerLayer.Remove(adorner);
            //}
            return(true);
        }
        public override bool Run(CommandManager mgr, params object[] param)
        {
            dc = param[0] as DesignerCanvas;
            var di = param[1] as DesignerContainer;

            if (dc != null)
            {
                m_di = di;
                dc.Add(di);
                dc.SelectionService.SelectItem(di);
            }
            var adornerLayer = AdornerLayer.GetAdornerLayer(dc);

            //  PolylineAdorner adorner = dc.m_pAdorner;
            //if (adornerLayer != null && adorner != null)
            //{
            //    if (adorner.IsMouseCaptured)
            //    {
            //        adorner.ReleaseMouseCapture();
            //    }
            //    adornerLayer.Remove(adorner);
            //}
            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Do work
        /// </summary>
        private void ProcessImageWorker(object state)
        {
            ScannedImage scannedImage = null;
            Image        original     = null;

            try
            {
                lock (this.m_lockObject)
                    using (var ms = new MemoryStream((byte[])state))
                    {
                        var img = Image.FromStream(ms);
                        img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                        scannedImage = new ScannedImage(img);
                    }

                scannedImage.Analyze();

                original = (Image) new AForge.Imaging.Filters.ResizeNearestNeighbor(scannedImage.Image.Width / 4, scannedImage.Image.Height / 4).Apply((Bitmap)scannedImage.Image);
            }
            catch
            {
                if (scannedImage != null)
                {
                    scannedImage.Dispose();
                }
                return; // Abort
            }

            try
            {
                // Add an Error entry
                if (!scannedImage.IsScannable)
                {
                    ListViewItem lsv = new ListViewItem();
                    lsv.Tag = 2;
                    lsv.SubItems.Add(new ListViewItem.ListViewSubItem(lsv, "Scanned image doesn't appear to be a scannable form."));
                    lock (this.m_lockObject)
                        this.m_uiResults.Add(lsv, original);
                }
                else
                {
                    Engine engine       = new Engine();
                    var    templateFile = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), scannedImage.TemplateName + ".mxml");
                    if (!File.Exists(templateFile))
                    {
                        ListViewItem lsv = new ListViewItem();
                        lsv.Tag = 0;
                        lsv.SubItems.Add(new ListViewItem.ListViewSubItem(lsv, "Template file " + templateFile + " is missing"));
                        lock (this.m_lockObject)
                            this.m_uiResults.Add(lsv, original);
                        return;
                    }

                    // Apply template
                    var template = OmrTemplate.Load(templateFile);
                    var pageData = engine.ApplyTemplate(
                        template,
                        scannedImage);

                    // Draw the page data
                    ICanvas canvas = new DesignerCanvas();
                    canvas.Add(new OmrMarkEngine.Output.Design.OutputVisualizationStencil(pageData));
                    original.Dispose();
                    original = new Bitmap((int)template.BottomRight.X, (int)template.BottomLeft.Y, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    using (Graphics g = Graphics.FromImage(original))
                    {
                        float width  = template.TopRight.X - template.TopLeft.X,
                              height = template.BottomLeft.Y - template.TopLeft.Y;
                        g.DrawImage(scannedImage.Image, template.TopLeft.X, template.TopLeft.Y, width, height);
                        canvas.DrawTo(g);
                    }
                    // Save original analyzed image
                    try
                    {
                        String tPath = Path.GetTempFileName();
                        original.Save(tPath);
                        pageData.AnalyzedImage = tPath;
                    }
                    catch { }

                    var oldOriginal = original;
                    original = (Image) new AForge.Imaging.Filters.ResizeNearestNeighbor(scannedImage.Image.Width / 2, scannedImage.Image.Height / 2).Apply((Bitmap)original);
                    oldOriginal.Dispose();



                    lock (this.m_lockObject)
                    {
                        if (pageData.Outcome == OmrScanOutcome.Failure)
                        {
                            ListViewItem lsv = new ListViewItem();
                            lsv.Tag = 0;
                            lsv.SubItems.Add(new ListViewItem.ListViewSubItem(lsv, pageData.ErrorMessage));
                            lock (this.m_lockObject)
                                this.m_uiResults.Add(lsv, original);
                        }
                        else
                        {
                            var          validation = pageData.Validate(template);
                            ListViewItem lsv        = new ListViewItem();
                            lsv.Tag = validation.IsValid ? 2 : 1;
                            if (!validation.IsValid)
                            {
                                lsv.SubItems.Add(validation.Issues[0]);
                            }
                            lsv.Tag = pageData;
                            lock (this.m_lockObject)
                                this.m_executionQueue.Enqueue(new KeyValuePair <OmrTemplate, OmrPageOutput>(template, pageData));
                            lock (this.m_lockObject)
                                this.m_uiResults.Add(lsv, original);
                        }
                        this.m_scannedPages.Pages.Add(pageData);
                    }
                }
            }
            catch (Exception e)
            {
                ListViewItem lsv = new ListViewItem();
                lsv.Tag = 0;
                lsv.SubItems.Add(e.Message);
                lock (this.m_lockObject)
                    this.m_uiResults.Add(lsv, original);
            }
        }
Beispiel #5
0
        /// <summary>
        ///     Update template diagram
        /// </summary>
        private void UpdateTemplateDiagram()
        {
            mnuSave.Enabled = true;
            m_canvas.Clear();
            m_canvas.Add(new BackgroundImageShape(m_currentTemplate), "img");
            // Add indicators for the indicators
            m_canvas.Add(new CornerAnchorShape(m_currentTemplate.TopLeft, "TL"), "TL");
            m_canvas.Add(new CornerAnchorShape(m_currentTemplate.TopRight, "TR"), "TR");
            m_canvas.Add(new CornerAnchorShape(m_currentTemplate.BottomLeft, "BL"), "BL");
            m_canvas.Add(new CornerAnchorShape(m_currentTemplate.BottomRight, "BR"), "BR");

            // Join the canvas stuff
            m_canvas.Add(new ConnectionLineShape
            {
                Source       = m_canvas.FindShape("TL"),
                Target       = m_canvas.FindShape("TR"),
                OutlineWidth = 4,
                OutlineColor = Color.OrangeRed,
                OutlineStyle = DashStyle.Dot
            });
            m_canvas.Add(new ConnectionLineShape
            {
                Source       = m_canvas.FindShape("TR"),
                Target       = m_canvas.FindShape("BR"),
                OutlineWidth = 4,
                OutlineColor = Color.OrangeRed,
                OutlineStyle = DashStyle.Dot
            });
            m_canvas.Add(new ConnectionLineShape
            {
                Source       = m_canvas.FindShape("BL"),
                Target       = m_canvas.FindShape("BR"),
                OutlineWidth = 4,
                OutlineColor = Color.OrangeRed,
                OutlineStyle = DashStyle.Dot
            });
            m_canvas.Add(new ConnectionLineShape
            {
                Source       = m_canvas.FindShape("TL"),
                Target       = m_canvas.FindShape("BL"),
                OutlineWidth = 4,
                OutlineColor = Color.OrangeRed,
                OutlineStyle = DashStyle.Dot
            });
        }