Files
manual_wpf/NoteDetectionRefactor.md

48 lines
2.7 KiB
Markdown

Project: Refactor the NOTE Content Box Detection Algorithm
1. High-Level Goal:
The primary objective is to replace the current, fragile "horizontal search line" algorithm in
Models/DwgDataExtractor.cs with a more robust and accurate method that reliably finds the content box for
any "NOTE" text, regardless of its position or the composition of its bounding box.
2. Core Strategy: "Vertical Ray-Casting"
We will implement a new algorithm that emulates how a human would visually locate the content. This
involves a "gradual downward scan" (or vertical ray-cast) from the NOTE's position.
3. Implementation Plan (TODO List):
* Step 1: Unify All Geometry into Line Segments
* Create a single helper method, GetAllLineSegments, that processes all Line and Polyline entities from
the drawing.
* This method will decompose every Polyline into its constituent Line segments.
* It will return a single, unified List<Line> containing every potential boundary segment in the
drawing.
* Crucially: This method must ensure all temporary Line objects created during the process are properly
disposed of to prevent memory leaks.
* Step 2: Implement the Ray-Casting Logic in `FindNoteBox`
* The FindNoteBox method will be completely rewritten.
* It will first call GetAllLineSegments to get the unified geometry list.
* It will then perform the vertical ray-cast starting from the NOTE's X-coordinate and scanning
downwards.
* It will find all horizontal lines that intersect the ray and sort them by their Y-coordinate (from
top to bottom).
* It will identify the second line in this sorted list as the top edge of the content box (the first is
assumed to be the NOTE's own bounding box).
* Step 3: Implement Smart Box Tracing
* Create a new helper method, TraceBoxFromTopLine.
* This method will take the identified top line segment as its starting point.
* It will intelligently trace the remaining three sides of the rectangle by searching the unified list
of line segments for the nearest connecting corners.
* This tracing logic must be tolerant of small gaps between the endpoints of the lines forming the box.
* Step 4: Final Cleanup
* Once the new ray-casting algorithm is fully implemented and validated, all of the old, obsolete
methods related to the previous search-line approach must be deleted to keep the code clean. This
includes:
* FindIntersectingLineSegments
* TraceRectangleFromLineSegments
* FindNextConnectedLineSegment
* DoesLineIntersectPolyline
* GetPolylineBounds