Documentation
¶
Overview ¶
Provides a set of helper functions to create geometric shapes, compute intersections between shapes, and process various other geometric operations in 2D.
Index ¶
- func Advanced() class
- func BresenhamLine(from Vector2i.XY, to Vector2i.XY) []Vector2i.XY
- func ClipPolygons(polygon_a []Vector2.XY, polygon_b []Vector2.XY) [][]Vector2.XY
- func ClipPolylineWithPolygon(polyline []Vector2.XY, polygon []Vector2.XY) [][]Vector2.XY
- func ConvexHull(points []Vector2.XY) []Vector2.XY
- func DecomposePolygonInConvex(polygon []Vector2.XY) [][]Vector2.XY
- func ExcludePolygons(polygon_a []Vector2.XY, polygon_b []Vector2.XY) [][]Vector2.XY
- func GetClosestPointToSegment(point Vector2.XY, s1 Vector2.XY, s2 Vector2.XY) Vector2.XY
- func GetClosestPointToSegmentUncapped(point Vector2.XY, s1 Vector2.XY, s2 Vector2.XY) Vector2.XY
- func GetClosestPointsBetweenSegments(p1 Vector2.XY, q1 Vector2.XY, p2 Vector2.XY, q2 Vector2.XY) []Vector2.XY
- func IntersectPolygons(polygon_a []Vector2.XY, polygon_b []Vector2.XY) [][]Vector2.XY
- func IntersectPolylineWithPolygon(polyline []Vector2.XY, polygon []Vector2.XY) [][]Vector2.XY
- func IsPointInCircle(point Vector2.XY, circle_position Vector2.XY, circle_radius Float.X) bool
- func IsPointInPolygon(point Vector2.XY, polygon []Vector2.XY) bool
- func IsPolygonClockwise(polygon []Vector2.XY) bool
- func LineIntersectsLine(from_a Vector2.XY, dir_a Vector2.XY, from_b Vector2.XY, dir_b Vector2.XY) any
- func MergePolygons(polygon_a []Vector2.XY, polygon_b []Vector2.XY) [][]Vector2.XY
- func OffsetPolygon(polygon []Vector2.XY, delta Float.X, join_type PolyJoinType) [][]Vector2.XY
- func OffsetPolygonOptions(polygon []Vector2.XY, delta Float.X, join_type PolyJoinType) [][]Vector2.XY
- func OffsetPolyline(polyline []Vector2.XY, delta Float.X, join_type PolyJoinType) [][]Vector2.XY
- func OffsetPolylineOptions(polyline []Vector2.XY, delta Float.X, join_type PolyJoinType, ...) [][]Vector2.XY
- func PointIsInsideTriangle(point Vector2.XY, a Vector2.XY, b Vector2.XY, c Vector2.XY) bool
- func SegmentIntersectsCircle(segment_from Vector2.XY, segment_to Vector2.XY, circle_position Vector2.XY, ...) Float.X
- func SegmentIntersectsSegment(from_a Vector2.XY, to_a Vector2.XY, from_b Vector2.XY, to_b Vector2.XY) any
- func TriangulateDelaunay(points []Vector2.XY) []int32
- func TriangulatePolygon(polygon []Vector2.XY) []int32
- type Atlas
- type Extension
- type ID
- type Instance
- type PolyBooleanOperation
- type PolyEndType
- type PolyJoinType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Advanced ¶
func Advanced() class
Advanced exposes a 1:1 low-level instance of the class, undocumented, for those who know what they are doing.
func BresenhamLine ¶
Returns the Bresenham line between the 'from' and 'to' points. A Bresenham line is a series of pixels that draws a line and is always 1-pixel thick on every row and column of the drawing (never more, never less).
Example code to draw a line between two graphics.gd/classdb/Marker2D nodes using a series of graphics.gd/classdb/CanvasItem.Instance.DrawRect calls:
func ClipPolygons ¶
Clips 'polygon_a' against 'polygon_b' and returns an array of clipped polygons. This performs OperationDifference between polygons. Returns an empty array if 'polygon_b' completely overlaps 'polygon_a'.
If 'polygon_b' is enclosed by 'polygon_a', returns an outer polygon (boundary) and inner polygon (hole) which could be distinguished by calling IsPolygonClockwise.
func ClipPolylineWithPolygon ¶
Clips 'polyline' against 'polygon' and returns an array of clipped polylines. This performs OperationDifference between the polyline and the polygon. This operation can be thought of as cutting a line with a closed shape.
func ConvexHull ¶
Given an array of [Vector2.XY]s, returns the convex hull as a list of points in counterclockwise order. The last point is the same as the first one.
func DecomposePolygonInConvex ¶
Decomposes the 'polygon' into multiple convex hulls and returns an array of [][Vector2.XY].
func ExcludePolygons ¶
Mutually excludes common area defined by intersection of 'polygon_a' and 'polygon_b' (see IntersectPolygons) and returns an array of excluded polygons. This performs OperationXor between polygons. In other words, returns all but common area between polygons.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
func GetClosestPointToSegment ¶
Returns the 2D point on the 2D segment ('s1', 's2') that is closest to 'point'. The returned point will always be inside the specified segment.
func GetClosestPointToSegmentUncapped ¶
Returns the 2D point on the 2D line defined by ('s1', 's2') that is closest to 'point'. The returned point can be inside the segment ('s1', 's2') or outside of it, i.e. somewhere on the line extending from the segment.
func GetClosestPointsBetweenSegments ¶
func GetClosestPointsBetweenSegments(p1 Vector2.XY, q1 Vector2.XY, p2 Vector2.XY, q2 Vector2.XY) []Vector2.XY
Given the two 2D segments ('p1', 'q1') and ('p2', 'q2'), finds those two points on the two segments that are closest to each other. Returns a [][Vector2.XY] that contains this point on ('p1', 'q1') as well the accompanying point on ('p2', 'q2').
func IntersectPolygons ¶
Intersects 'polygon_a' with 'polygon_b' and returns an array of intersected polygons. This performs OperationIntersection between polygons. In other words, returns common area shared by polygons. Returns an empty array if no intersection occurs.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
func IntersectPolylineWithPolygon ¶
Intersects 'polyline' with 'polygon' and returns an array of intersected polylines. This performs OperationIntersection between the polyline and the polygon. This operation can be thought of as chopping a line with a closed shape.
func IsPointInCircle ¶
Returns true if 'point' is inside the circle or if it's located exactly on the circle's boundary, otherwise returns false.
func IsPointInPolygon ¶
Returns true if 'point' is inside 'polygon' or if it's located exactly on polygon's boundary, otherwise returns false.
func IsPolygonClockwise ¶
Returns true if 'polygon”s vertices are ordered in clockwise order, otherwise returns false.
Note: Assumes a Cartesian coordinate system where +x is right and +y is up. If using screen coordinates (+y is down), the result will need to be flipped (i.e. a true result will indicate counter-clockwise).
func LineIntersectsLine ¶
func LineIntersectsLine(from_a Vector2.XY, dir_a Vector2.XY, from_b Vector2.XY, dir_b Vector2.XY) any
Returns the point of intersection between the two lines ('from_a', 'dir_a') and ('from_b', 'dir_b'). Returns a [Vector2.XY], or null if the lines are parallel.
from and dir are not endpoints of a line segment or ray but the slope (dir) and a known point (from) on that line.
func MergePolygons ¶
Merges (combines) 'polygon_a' and 'polygon_b' and returns an array of merged polygons. This performs OperationUnion between polygons.
The operation may result in an outer polygon (boundary) and multiple inner polygons (holes) produced which could be distinguished by calling IsPolygonClockwise.
func OffsetPolygon ¶
Inflates or deflates 'polygon' by 'delta' units (pixels). If 'delta' is positive, makes the polygon grow outward. If 'delta' is negative, shrinks the polygon inward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. Returns an empty array if 'delta' is negative and the absolute value of it approximately exceeds the minimum bounding rectangle dimensions of the polygon.
Each polygon's vertices will be rounded as determined by 'join_type', see PolyJoinType.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
Note: To translate the polygon's vertices specifically, multiply them to a [Transform2D.OriginXY]:
func OffsetPolygonOptions ¶
func OffsetPolygonOptions(polygon []Vector2.XY, delta Float.X, join_type PolyJoinType) [][]Vector2.XY
Inflates or deflates 'polygon' by 'delta' units (pixels). If 'delta' is positive, makes the polygon grow outward. If 'delta' is negative, shrinks the polygon inward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. Returns an empty array if 'delta' is negative and the absolute value of it approximately exceeds the minimum bounding rectangle dimensions of the polygon.
Each polygon's vertices will be rounded as determined by 'join_type', see PolyJoinType.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
Note: To translate the polygon's vertices specifically, multiply them to a [Transform2D.OriginXY]:
func OffsetPolyline ¶
Inflates or deflates 'polyline' by 'delta' units (pixels), producing polygons. If 'delta' is positive, makes the polyline grow outward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. If 'delta' is negative, returns an empty array.
Each polygon's vertices will be rounded as determined by 'join_type', see PolyJoinType.
Each polygon's endpoints will be rounded as determined by 'end_type', see PolyEndType.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
func OffsetPolylineOptions ¶
func OffsetPolylineOptions(polyline []Vector2.XY, delta Float.X, join_type PolyJoinType, end_type PolyEndType) [][]Vector2.XY
Inflates or deflates 'polyline' by 'delta' units (pixels), producing polygons. If 'delta' is positive, makes the polyline grow outward. Returns an array of polygons because inflating/deflating may result in multiple discrete polygons. If 'delta' is negative, returns an empty array.
Each polygon's vertices will be rounded as determined by 'join_type', see PolyJoinType.
Each polygon's endpoints will be rounded as determined by 'end_type', see PolyEndType.
The operation may result in an outer polygon (boundary) and inner polygon (hole) produced which could be distinguished by calling IsPolygonClockwise.
func PointIsInsideTriangle ¶
Returns if 'point' is inside the triangle specified by 'a', 'b' and 'c'.
func SegmentIntersectsCircle ¶
func SegmentIntersectsCircle(segment_from Vector2.XY, segment_to Vector2.XY, circle_position Vector2.XY, circle_radius Float.X) Float.X
Given the 2D segment ('segment_from', 'segment_to'), returns the position on the segment (as a number between 0 and 1) at which the segment hits the circle that is located at position 'circle_position' and has radius 'circle_radius'. If the segment does not intersect the circle, -1 is returned (this is also the case if the line extending the segment would intersect the circle, but the segment does not).
func SegmentIntersectsSegment ¶
func SegmentIntersectsSegment(from_a Vector2.XY, to_a Vector2.XY, from_b Vector2.XY, to_b Vector2.XY) any
Checks if the two segments ('from_a', 'to_a') and ('from_b', 'to_b') intersect. If yes, return the point of intersection as [Vector2.XY]. If no intersection takes place, returns null.
func TriangulateDelaunay ¶
Triangulates the area specified by discrete set of 'points' such that no point is inside the circumcircle of any resulting triangle. Returns a []int32 where each triangle consists of three consecutive point indices into 'points' (i.e. the returned array will have n * 3 elements, with n being the number of found triangles). If the triangulation did not succeed, an empty []int32 is returned.
func TriangulatePolygon ¶
Triangulates the polygon specified by the points in 'polygon'. Returns a []int32 where each triangle consists of three consecutive point indices into 'polygon' (i.e. the returned array will have n * 3 elements, with n being the number of found triangles). Output triangles will always be counter clockwise, and the contour will be flipped if it's clockwise. If the triangulation did not succeed, an empty []int32 is returned.
Types ¶
type Atlas ¶
type Atlas struct { Points []struct { X float32 Y float32 } `gd:"points"` Size struct { X int32 Y int32 } `gd:"size"` }
type Extension ¶
Extension can be embedded in a new struct to create an extension of this class. T should be the type that is embedding this Extension
type ID ¶
ID is a typed object ID (reference) to an instance of this class, use it to store references to objects with unknown lifetimes, as an ID will not panic on use if the underlying object has been destroyed.
type Instance ¶
type Instance [1]gdclass.Geometry2D
Instance of the class with convieniently typed arguments and results.
type PolyBooleanOperation ¶
type PolyBooleanOperation int //gd:Geometry2D.PolyBooleanOperation
const ( // Create regions where either subject or clip polygons (or both) are filled. OperationUnion PolyBooleanOperation = 0 // Create regions where subject polygons are filled except where clip polygons are filled. OperationDifference PolyBooleanOperation = 1 // Create regions where both subject and clip polygons are filled. OperationIntersection PolyBooleanOperation = 2 // Create regions where either subject or clip polygons are filled but not where both are filled. OperationXor PolyBooleanOperation = 3 )
type PolyEndType ¶
type PolyEndType int //gd:Geometry2D.PolyEndType
const ( // Endpoints are joined using the [PolyJoinType] value and the path filled as a polygon. EndPolygon PolyEndType = 0 // Endpoints are joined using the [PolyJoinType] value and the path filled as a polyline. EndJoined PolyEndType = 1 // Endpoints are squared off with no extension. EndButt PolyEndType = 2 // Endpoints are squared off and extended by delta units. EndSquare PolyEndType = 3 // Endpoints are rounded off and extended by delta units. EndRound PolyEndType = 4 )
type PolyJoinType ¶
type PolyJoinType int //gd:Geometry2D.PolyJoinType
const ( // Squaring is applied uniformally at all convex edge joins at 1 * delta. JoinSquare PolyJoinType = 0 // While flattened paths can never perfectly trace an arc, they are approximated by a series of arc chords. JoinRound PolyJoinType = 1 // There's a necessary limit to mitered joins since offsetting edges that join at very acute angles will produce excessively long and narrow "spikes". For any given edge join, when miter offsetting would exceed that maximum distance, "square" joining is applied. JoinMiter PolyJoinType = 2 )