Example #1
0
        public bool closeTo(ParagraphAnalysisEntry other)
        {
            double dy = other.point.Y - point.Y - paragraph.Strokes.GetBounds().Height;
            double dx = Math.Abs(other.point.X - point.X);

            return(dx < Constants.MERGE_PARAGRAPH_X && dy < Constants.MERGE_PARAGRAPH_Y);
        }
Example #2
0
        public static void MergeParagraphs(InkAnalyzer inkAnalyzer)
        {
            foreach (ContextNode writingRegion in inkAnalyzer.RootNode.SubNodes)
            {
                List <ParagraphAnalysisEntry> paragraphs = new List <ParagraphAnalysisEntry>();
                foreach (ContextNode node in writingRegion.SubNodes)
                {
                    if (node is ParagraphNode)
                    {
                        ParagraphNode          paragraph          = node as ParagraphNode;
                        ContextNode            firstLine          = paragraph.SubNodes[0];
                        Point                  paragraphReference = firstLine.Strokes.GetBounds().TopLeft;
                        ParagraphAnalysisEntry entry = new ParagraphAnalysisEntry();
                        entry.paragraph = paragraph;
                        entry.point     = paragraphReference;
                        paragraphs.Add(entry);
                    }
                }

                paragraphs.Sort(delegate(ParagraphAnalysisEntry a, ParagraphAnalysisEntry b)
                {
                    return(a.point.Y.CompareTo(b.point.Y));
                });

                for (int i = 0; i < paragraphs.Count - 1; i++)
                {
                    ParagraphAnalysisEntry entry = paragraphs[i];
                    ParagraphAnalysisEntry next  = paragraphs[i + 1];
                    bool closeto = entry.closeTo(next);
                    if (closeto)
                    {
                        foreach (ContextNode node in next.paragraph.SubNodes)
                        {
                            node.Reparent(entry.paragraph);
                        }
                        writingRegion.DeleteSubNode(next.paragraph);
                        paragraphs[i + 1] = entry;
                    }
                }
            }
        }
Example #3
0
        public static void MergeParagraphs(InkAnalyzer inkAnalyzer)
        {
            foreach (ContextNode writingRegion in inkAnalyzer.RootNode.SubNodes)
            {
                List<ParagraphAnalysisEntry> paragraphs = new List<ParagraphAnalysisEntry>();
                foreach (ContextNode node in writingRegion.SubNodes)
                {
                    if (node is ParagraphNode)
                    {
                        ParagraphNode paragraph = node as ParagraphNode;
                        ContextNode firstLine = paragraph.SubNodes[0];
                        Point paragraphReference = firstLine.Strokes.GetBounds().TopLeft;
                        ParagraphAnalysisEntry entry = new ParagraphAnalysisEntry();
                        entry.paragraph = paragraph;
                        entry.point = paragraphReference;
                        paragraphs.Add(entry);
                    }
                }

                paragraphs.Sort(delegate(ParagraphAnalysisEntry a, ParagraphAnalysisEntry b)
                {
                    return a.point.Y.CompareTo(b.point.Y);
                });

                for (int i = 0; i < paragraphs.Count - 1; i++)
                {
                    ParagraphAnalysisEntry entry = paragraphs[i];
                    ParagraphAnalysisEntry next = paragraphs[i + 1];
                    bool closeto = entry.closeTo(next);
                    if (closeto)
                    {
                        foreach (ContextNode node in next.paragraph.SubNodes)
                        {
                            node.Reparent(entry.paragraph);
                        }
                        writingRegion.DeleteSubNode(next.paragraph);
                        paragraphs[i + 1] = entry;
                    }
                }
            }
        }
Example #4
0
 public bool closeTo(ParagraphAnalysisEntry other)
 {
     double dy = other.point.Y - point.Y - paragraph.Strokes.GetBounds().Height;
     double dx = Math.Abs(other.point.X - point.X);
     return dx < Constants.MERGE_PARAGRAPH_X && dy < Constants.MERGE_PARAGRAPH_Y;
 }