
=head1 NAME

Box2D::b2Shape - Used for collision detection.

=head1 SYNOPSIS

  # Don't use this class directly, use a subclass.

=head1 DESCRIPTION

A shape is used for collision detection. You can create a shape however
you like. Shapes used for simulation in C<Box2D::b2World> are created
automatically when a C<Box2D::b2Fixture> is created.

=head1 METHODS

=head2 ComputeAABB( $aabb, $xf )

Given a transform, compute the associated axis aligned bounding box for
this shape.

Parameters:

=over 4

=item * C<Box2D::b2AABB> C<$aabb> - returns the axis aligned box.

=item * C<Box2D::b2Transform> C<$xf> - the world transform of the
shape.

=back

Implemented in C<Box2D::b2CircleShape>, and C<Box2D::b2PolygonShape>.

=head2 ComputeMass( $massData, $density )

Compute the mass properties of this shape using its dimensions and
density. The inertia tensor is computed about the local origin.

Parameters:

=over 4

=item * C<Box2D::b2MassData> C<$massData> - returns the mass data for
this shape.

=item * C<float32> C<$density> - the density in kilograms per meter
squared.

=back

Implemented in C<Box2D::b2CircleShape>, and C<Box2D::b2PolygonShape>.

=head2 GetType()

Get the type of this shape. You can use this to down cast to the
concrete shape.

Parameters:

Returns a C<int>

=head2 RayCast( $output, $input, $transform )

Cast a ray against this shape.

Parameters:

=over 4

=item * C<Box2D::b2RayCastOutput> C<$output> - the ray-cast results.

=item * C<Box2D::b2RayCastInput> C<$input> - the ray-cast input
parameters.

=item * C<Box2D::b2Transform> C<$transform> - the transform to be
applied to the shape.

=back

Returns a C<bool>

Implemented in C<Box2D::b2CircleShape>, and C<Box2D::b2PolygonShape>.

=head2 TestPoint( $xf, $p )

Test a point for containment in this shape. This only works for convex
shapes.

Parameters:

=over 4

=item * C<Box2D::b2Transform> C<$xf> - the shape world transform.

=item * C<Box2D::b2Vec2> C<$p> - a point in world coordinates.

=back

Returns a C<bool>

Implemented in C<Box2D::b2CircleShape>, and C<Box2D::b2PolygonShape>.

=head2 m_radius()

=head2 m_radius( $m_radius )

Parameters:

=over 4

=item * C<float32> C<$m_radius> (optional)

=back

Returns a C<float32>

=head2 m_type()

=head2 m_type( $m_type )

Parameters:

=over 4

=item * C<int> C<$m_type> (optional)

=back

Returns a C<int>

=head1 SEE ALSO

=over 4

=item * L<Box2D>

=item * L<Box2D::b2CircleShape>

=item * L<Box2D::b2PolygonShape>

=item * L<Box2D::b2World>

=item * L<Box2D::b2Fixture>

=back

=head1 BUGS

See L<Box2D/BUGS>

=head1 AUTHORS

See L<Box2D/AUTHORS>

=head1 COPYRIGHT & LICENSE

See L<Box2D/"COPYRIGHT & LICENSE">

=cut
