NoteDetectionRefactor plan
This commit is contained in:
48
NoteDetectionRefactor.md
Normal file
48
NoteDetectionRefactor.md
Normal file
@@ -0,0 +1,48 @@
|
||||
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
|
||||
Reference in New Issue
Block a user