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); }
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; } } } }
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; } } } }
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; }