mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-03 20:34:40 +01:00 
			
		
		
		
	feat: lasso selection (#9169)
* lasso without 'real' shape detection * select a single linear el * improve ux * feed segments to worker * simplify path threshold adaptive to zoom * add a tiny threshold for checks * refactor code * lasso tests * fix: ts * do not capture lasso tool * try worker-loader in next config * update config * refactor * lint * feat: show active tool when using "more tools" * keep lasso if selected from toolbar * fix incorrect checks for resetting to selection * shift for additive selection * bound text related fixes * lint * keep alt toggled lasso selection if shift pressed * fix regression * fix 'dead' lassos * lint * use workerpool and polyfill * fix worker bundled with window related code * refactor * add file extension for worker constructor error * another attempt at constructor error * attempt at build issue * attempt with dynamic import * test not importing from math * narrow down imports * Reusing existing workers infrastructure (fallback to the main thread, type-safety) * Points on curve inside the shared chunk * Give up on experimental code splitting * Remove potentially unnecessary optimisation * Removing workers as the complexit is much worse, while perf. does not seem to be much better * fix selecting text containers and containing frames together * render fill directly from animated trail * do not re-render static when setting selected element ids in lasso * remove unnecessary property * tweak trail animation * slice points to remove notch * always start alt-lasso from initial point * revert build & worker changes (unused) * remove `lasso` from `hasStrokeColor` * label change * remove unused props * remove unsafe optimization * snaps --------- Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com> Co-authored-by: Marcel Mraz <marcel@excalidraw.com>
This commit is contained in:
		@@ -160,13 +160,17 @@ export const distanceToLineSegment = <Point extends LocalPoint | GlobalPoint>(
 | 
			
		||||
 */
 | 
			
		||||
export function lineSegmentIntersectionPoints<
 | 
			
		||||
  Point extends GlobalPoint | LocalPoint,
 | 
			
		||||
>(l: LineSegment<Point>, s: LineSegment<Point>): Point | null {
 | 
			
		||||
>(
 | 
			
		||||
  l: LineSegment<Point>,
 | 
			
		||||
  s: LineSegment<Point>,
 | 
			
		||||
  threshold?: number,
 | 
			
		||||
): Point | null {
 | 
			
		||||
  const candidate = linesIntersectAt(line(l[0], l[1]), line(s[0], s[1]));
 | 
			
		||||
 | 
			
		||||
  if (
 | 
			
		||||
    !candidate ||
 | 
			
		||||
    !pointOnLineSegment(candidate, s) ||
 | 
			
		||||
    !pointOnLineSegment(candidate, l)
 | 
			
		||||
    !pointOnLineSegment(candidate, s, threshold) ||
 | 
			
		||||
    !pointOnLineSegment(candidate, l, threshold)
 | 
			
		||||
  ) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user