Utility object to represent points, sizes and rects in a bidimensional plane
An hs.geometry object can be:
x
and y
fields for its coordinatesw
and h
fields for width and height respectivelyx=0,y=0 , w=0.5,h=0.5
is the quarter portion closest to the origin); please note that hs.geometry
makes no distinction internally between regular rects and unit rects; you can convert to and from as needed via the appropriate methodsYou can create these objects in many different ways, via my_obj=hs.geometry.new(...)
or simply my_obj=hs.geometry(...)
by passing any of the following:
X,Y,W,H
for the respective fields  W and H, or X and Y, can be nil
:hs.geometry(X,Y)
creates a poinths.geometry(nil,nil,W,H)
creates a sizehs.geometry(X,Y,W,H)
creates a rect given its width and height from a corner{X,Y}
creates a point{X,Y,W,H}
creates a rect{x=X,y=Y,w=W,h=H}
creates a rect, or if you omit X and Y, or W and H, creates a size or a point respectively{x1=X1,y1=Y1,x2=X2,y2=Y2}
creates a rect, where X1,Y1 and X2,Y2 are the coordinates of opposite corners"X Y"
or "X,Y"
creates a point"WxH"
or "W*H"
creates a size"X Y/WxH"
or "X,Y W*H"
(or variations thereof) creates a rect given its width and height from a corner"X1,Y1>X2,Y2"
or "X1 Y1 X2 Y2"
(or variations thereof) creates a rect given two opposite corners"[X,Y WxH]"
or "[X1,Y1 X2,Y2]"
or variations (note the square brackets) creates a unit rect where x=X/100, y=Y/100, w=W/100, h=H/100"X Y","WxH"
or {x=X,y=Y},{w=W,h=H}
create a rectYou can use any of these anywhere an hs.geometry object is expected in Hammerspoon; the constructor will be called for you.
Signature  hs.geometry.copy(geom) > hs.geometry object 

Type  Constructor 
Description  Creates a copy of an hs.geometry object Parameters:
Returns:

Signature  hs.geometry.new(...) > hs.geometry object 

Type  Constructor 
Description  Creates a new hs.geometry object Parameters: see the module description at the top Returns:

Signature  hs.geometry.point(x, y) > hs.geometry point 

Type  Constructor 
Description  Convenience function for creating a point object Parameters:
Returns:

Signature  hs.geometry.rect(x, y, w, h) > hs.geometry rect 

Type  Constructor 
Description  Convenience function for creating a recttable Parameters:
Returns:

Signature  hs.geometry.size(w, h) > hs.geometry size 

Type  Constructor 
Description  Convenience function for creating a size object Parameters:
Returns:

Signature  hs.geometry.area 

Type  Field 
Description  A number representing the area of this rect or size; changing it will scale the rect/size  see 
Signature  hs.geometry.aspect 

Type  Field 
Description  A number representing the aspect ratio of this rect or size; changing it will reshape the rect/size, keeping its area and center constant 
Signature  hs.geometry.bottomright 

Type  Field 
Description  Alias for 
Signature  hs.geometry.center 

Type  Field 
Description  A point representing the geometric center of this rect or the midpoint of this vector2; changing it will move the rect/vector accordingly 
Signature  hs.geometry.h 

Type  Field 
Description  The height of this rect or size; changing it will keep the rect's x,y corner constant 
Signature  hs.geometry.length 

Type  Field 
Description  A number representing the length of the diagonal of this rect, or the length of this vector2; changing it will scale the rect/vector  see 
Signature  hs.geometry.string 

Type  Field 
Description  The 
Signature  hs.geometry.table 

Type  Field 
Description  The 
Signature  hs.geometry.topleft 

Type  Field 
Description  Alias for 
Signature  hs.geometry.w 

Type  Field 
Description  The width of this rect or size; changing it will keep the rect's x,y corner constant 
Signature  hs.geometry.wh 

Type  Field 
Description  The size component for this hs.geometry object; setting this to a new size will keep the rect's x,y corner constant 
Signature  hs.geometry.x 

Type  Field 
Description  The x coordinate for this point or rect's corner; changing it will move the rect but keep the same width and height 
Signature  hs.geometry.x1 

Type  Field 
Description  Alias for 
Signature  hs.geometry.x2 

Type  Field 
Description  The x coordinate for the second corner of this rect; changing it will affect the rect's width 
Signature  hs.geometry.x2y2 

Type  Field 
Description  The point denoting the other corner of this hs.geometry object; setting this to a new point will change the rect's width and height 
Signature  hs.geometry.xy 

Type  Field 
Description  The point component for this hs.geometry object; setting this to a new point will move the rect but keep the same width and height 
Signature  hs.geometry.y 

Type  Field 
Description  The y coordinate for this point or rect's corner; changing it will move the rect but keep the same width and height 
Signature  hs.geometry.y1 

Type  Field 
Description  Alias for 
Signature  hs.geometry.y2 

Type  Field 
Description  The y coordinate for the second corner of this rect; changing it will affect the rect's height 
Signature  hs.geometry:angle() > number 

Type  Method 
Description  Returns the angle between the positive x axis and this vector2 Parameters:
Returns:

Signature  hs.geometry:angleTo(point) > number 

Type  Method 
Description  Returns the angle between the positive x axis and the vector connecting this point or rect's center to another point or rect's center Parameters:
Returns:

Signature  hs.geometry:distance(point) > number 

Type  Method 
Description  Finds the distance between this point or rect's center and another point or rect's center Parameters:
Returns:

Signature  hs.geometry:equals(other) > boolean 

Type  Method 
Description  Checks if two geometry objects are equal Parameters:
Returns:

Signature  hs.geometry:fit(bounds) > hs.geometry object 

Type  Method 
Description  Ensure this rect is fully inside Parameters:
Returns:

Signature  hs.geometry:floor() > hs.geometry object 

Type  Method 
Description  Truncates all coordinates in this object to integers Parameters:
Returns:

Signature  hs.geometry:fromUnitRect(frame) > hs.geometry rect 

Type  Method 
Description  Converts a unit rect within a given frame into a rect Parameters:
Returns:

Signature  hs.geometry:inside(rect) > boolean 

Type  Method 
Description  Checks if this hs.geometry object lies fully inside a given rect Parameters:
Returns:

Signature  hs.geometry:intersect(rect) > hs.geometry rect 

Type  Method 
Description  Returns the intersection rect between this rect and another rect Parameters:
Returns:
Notes:

Signature  hs.geometry:move(point) > hs.geometry object 

Type  Method 
Description  Moves this point/rect Parameters:
Returns:

Signature  hs.geometry:normalize() > point 

Type  Method 
Description  Normalizes this vector2 Parameters:
Returns:

Signature  hs.geometry:rotateCCW(aroundpoint, ntimes) > hs.geometry point 

Type  Method 
Description  Rotates a point around another point N times Parameters:
Returns:

Signature  hs.geometry:scale(size) > hs.geometry object 

Type  Method 
Description  Scales this vector2/size, or this rect keeping its center constant Parameters:
Returns:

Signature  hs.geometry:toUnitRect(frame) > hs.geometry unit rect 

Type  Method 
Description  Converts a rect into its unit rect within a given frame Parameters:
Returns:
Notes:

Signature  hs.geometry:type() > string 

Type  Method 
Description  Returns the type of an hs.geometry object Parameters:
Returns:

Signature  hs.geometry:union(rect) > hs.geometry rect 

Type  Method 
Description  Returns the smallest rect that encloses both this rect and another rect Parameters:
Returns:

Signature  hs.geometry:vector(point) > point 

Type  Method 
Description  Returns the vector2 from this point or rect's center to another point or rect's center Parameters:
Returns:
