mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-10-31 19:04:35 +01:00 
			
		
		
		
	 bbdcd30a73
			
		
	
	bbdcd30a73
	
	
	
		
			
			* new collision api * isPointOnShape * removed redundant code * new collision methods in app * curve shape takes starting point * clean up geometry * curve rotation * freedraw * inside curve * improve ellipse inside check * ellipse distance func * curve inside * include frame name bounds * replace previous private methods for getting elements at x,y * arrow bound text hit detection * keep iframes on top * remove dependence on old collision methods from app * remove old collision functions * move some hit functions outside of app * code refactor * type * text collision from inside * fix context menu test * highest z-index collision * fix 1px away binding test * strictly less * remove unused imports * lint * 'ignore' resize flipping test * more lint fix * skip 'flips while resizing' test * more test * fix merge errors * fix selection in resize test * added a bit more comment --------- Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Point, Polygon, GeometricShape } from "./geometry/shape";
 | |
| import {
 | |
|   pointInEllipse,
 | |
|   pointInPolygon,
 | |
|   pointOnCurve,
 | |
|   pointOnEllipse,
 | |
|   pointOnLine,
 | |
|   pointOnPolycurve,
 | |
|   pointOnPolygon,
 | |
|   pointOnPolyline,
 | |
|   close,
 | |
| } from "./geometry/geometry";
 | |
| 
 | |
| // check if the given point is considered on the given shape's border
 | |
| export const isPointOnShape = (
 | |
|   point: Point,
 | |
|   shape: GeometricShape,
 | |
|   tolerance = 0,
 | |
| ) => {
 | |
|   // get the distance from the given point to the given element
 | |
|   // check if the distance is within the given epsilon range
 | |
|   switch (shape.type) {
 | |
|     case "polygon":
 | |
|       return pointOnPolygon(point, shape.data, tolerance);
 | |
|     case "ellipse":
 | |
|       return pointOnEllipse(point, shape.data, tolerance);
 | |
|     case "line":
 | |
|       return pointOnLine(point, shape.data, tolerance);
 | |
|     case "polyline":
 | |
|       return pointOnPolyline(point, shape.data, tolerance);
 | |
|     case "curve":
 | |
|       return pointOnCurve(point, shape.data, tolerance);
 | |
|     case "polycurve":
 | |
|       return pointOnPolycurve(point, shape.data, tolerance);
 | |
|     default:
 | |
|       throw Error(`shape ${shape} is not implemented`);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // check if the given point is considered inside the element's border
 | |
| export const isPointInShape = (point: Point, shape: GeometricShape) => {
 | |
|   switch (shape.type) {
 | |
|     case "polygon":
 | |
|       return pointInPolygon(point, shape.data);
 | |
|     case "line":
 | |
|       return false;
 | |
|     case "curve":
 | |
|       return false;
 | |
|     case "ellipse":
 | |
|       return pointInEllipse(point, shape.data);
 | |
|     case "polyline": {
 | |
|       const polygon = close(shape.data.flat()) as Polygon;
 | |
|       return pointInPolygon(point, polygon);
 | |
|     }
 | |
|     case "polycurve": {
 | |
|       return false;
 | |
|     }
 | |
|     default:
 | |
|       throw Error(`shape ${shape} is not implemented`);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // check if the given element is in the given bounds
 | |
| export const isPointInBounds = (point: Point, bounds: Polygon) => {
 | |
|   return pointInPolygon(point, bounds);
 | |
| };
 |