class CP::Shape::Poly

Overview

A convex polygon shape

Slowest, but most flexible collision shape.

Included Modules

Direct Known Subclasses

Defined in:

chipmunk/shape.cr
chipmunk/unsafe.cr

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class CP::Shape

area : Float64 area, bb : BB bb, body : Body | Nil body, body=(body : Body | Nil) body=, cache_bb : BB cache_bb, center_of_gravity : Vect center_of_gravity, collide(b : Shape) : ContactPointSet collide, collision_type : CollisionType collision_type, collision_type=(collision_type : Int) collision_type=, density : Float64 density, density=(density : Number) density=, elasticity : Float64 elasticity, elasticity=(elasticity : Number) elasticity=, filter : ShapeFilter filter, filter=(filter : ShapeFilter) filter=, friction : Float64 friction, friction=(friction : Number) friction=, mass : Float64 mass, mass=(mass : Number) mass=, moment : Float64 moment, point_query(p : Vect) : PointQueryInfo point_query, segment_query(a : Vect, b : Vect, radius : Number = 0) : SegmentQueryInfo | Nil segment_query, sensor=(sensor : Bool) sensor=, sensor? : Bool sensor?, space : Space | Nil space, surface_velocity : Vect surface_velocity, surface_velocity=(surface_velocity : Vect) surface_velocity=, update(transform : Transform) : BB update

Constructor Detail

def self.new(body : Body | Nil, verts : Array(Vect) | Slice(Vect), transform : Transform = Transform::IDENTITY, radius : Number = 0) #

Initialize a polygon shape with rounded corners. A convex hull will be created from the vertices.

The parameters are: the body to attach the poly to; the verts (vertices) of the polygon; the transform to apply to every vertex; the radius of the corners.

Adding a small radius will bevel the corners and can significantly reduce problems where the poly gets stuck on seams in your geometry.


[View source]
def self.new(body : Body | Nil, verts : Array(Vect) | Slice(Vect), radius : Number) #

Initialize a polygon shape with rounded corners. The vertices must be convex with a counter-clockwise winding.


[View source]

Class Method Detail

def self.area(verts : Array(Vect) | Slice(Vect), radius : Number = 0) : Float64 #

Calculate the signed area of a polygon.

A clockwise winding gives positive area. This is probably backwards from what you expect, but matches Chipmunk's winding for poly shapes.


[View source]
def self.centroid(verts : Array(Vect) | Slice(Vect)) : Vect #

Calculate the natural centroid of a polygon.


[View source]
def self.convex_hull(verts : Array(Vect) | Slice(Vect), tol : Number = 0) : Tuple(Slice(Vect), Int32) #

Calculate the convex hull of a given set of points.

tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull.

Returns the convex hull and the index where the first vertex in the hull came from (i.e. verts[first] == result[0])


[View source]
def self.moment(m : Number, verts : Array(Vect) | Slice(Vect), offset : Vect = CP::Vect.new(0, 0), radius : Number = 0) : Float64 #

Calculate the moment of inertia for a solid polygon shape.

Assumes its center of gravity is at its centroid. The offset is added to each vertex.


[View source]

Instance Method Detail

def radius : Float64 #

Get the radius of a polygon shape.


[View source]
def radius=(radius : Number) #

Unsafe. Set the radius of a poly shape.

This change is only picked up as a change to the position of the shape's surface, but not its velocity. Changing it will not result in realistic physical behavior. Only use if you know what you are doing!


[View source]
def set_verts(verts : Array(Vect) | Slice(Vect), transform : Transform = Transform::IDENTITY) #

Unsafe. Set the vertices of a poly shape.

This change is only picked up as a change to the position of the shape's surface, but not its velocity. Changing it will not result in realistic physical behavior. Only use if you know what you are doing!


[View source]
def size : Int32 #

Get the number of verts in a polygon shape.


[View source]
def unsafe_fetch(index : Int) : Vect #

Get the i-th vertex of a polygon shape.


[View source]