
=head1 NAME

Box2D::b2LineJointDef - Line joint definition.

=head1 SYNOPSIS

  my $joint_def = Box2D::b2LineJointDef->new();
  $joint_def->Initialize( $body_a, $body_b, $anchor, $axis );
  $joint_def->enableLimit( 1 );
  $joint_def->lowerTranslation( $lower_translation );
  $joint_def->upperTranslation( $upper_translation );
  $joint_def->enableMotor( 1 );
  $joint_def->motorSpeed( $speed );
  $joint_def->maxMotorForce( $max_force );
  my $joint = $world->CreateJoint( $joint_def );

=head1 DESCRIPTION

Line joint definition. This requires defining a line of motion using an
axis and an anchor point. The definition uses local anchor points and a
local axis so that the initial configuration can violate the constraint
slightly. The joint translation is zero when the local anchor points
coincide in world space. Using local anchors and a local axis helps
when saving and loading a game.

=head1 METHODS

=head2 new()

Default constructor.

Returns a C<Box2D::b2LineJointDef>

=head2 Initialize( $bodyA, $bodyB, $anchor, $axis )

Initialize the bodies, anchors, axis, and reference angle using the
world anchor and world axis.

Parameters:

=over 4

=item * C<Box2D::b2Body> C<$bodyA>

=item * C<Box2D::b2Body> C<$bodyB>

=item * C<Box2D::b2Vec2> C<$anchor>

=item * C<Box2D::b2Vec2> C<$axis>

=back

=head2 enableLimit()

=head2 enableLimit( $enableLimit )

Enable/disable the joint limit.

Parameters:

=over 4

=item * C<bool> C<$enableLimit> (optional)

=back

Returns a C<bool>

=head2 enableMotor()

=head2 enableMotor( $enableMotor )

Enable/disable the joint motor.

Parameters:

=over 4

=item * C<bool> C<$enableMotor> (optional)

=back

Returns a C<bool>

=head2 localAnchorA()

=head2 localAnchorA( $localAnchorA )

The local anchor point relative to body1's origin.

Parameters:

=over 4

=item * C<Box2D::b2Vec2> C<$localAnchorA> (optional)

=back

Returns a C<Box2D::b2Vec2>

=head2 localAnchorB()

=head2 localAnchorB( $localAnchorB )

The local anchor point relative to body2's origin.

Parameters:

=over 4

=item * C<Box2D::b2Vec2> C<$localAnchorB> (optional)

=back

Returns a C<Box2D::b2Vec2>

=head2 localAxisA()

=head2 localAxisA( $localAxisA )

The local translation axis in body1.

Parameters:

=over 4

=item * C<Box2D::b2Vec2> C<$localAxisA> (optional)

=back

Returns a C<Box2D::b2Vec2>

=head2 lowerTranslation()

=head2 lowerTranslation( $lowerTranslation )

The lower translation limit, usually in meters.

Parameters:

=over 4

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

=back

Returns a C<float32>

=head2 maxMotorForce()

=head2 maxMotorForce( $maxMotorForce )

The maximum motor torque, usually in N-m.

Parameters:

=over 4

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

=back

Returns a C<float32>

=head2 motorSpeed()

=head2 motorSpeed( $motorSpeed )

The desired motor speed in radians per second.

Parameters:

=over 4

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

=back

Returns a C<float32>

=head2 upperTranslation()

=head2 upperTranslation( $upperTranslation )

The upper translation limit, usually in meters.

Parameters:

=over 4

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

=back

Returns a C<float32>

=head1 SEE ALSO

=over 4

=item * L<Box2D>

=item * L<Box2D::b2LineJoint>

=item * L<Box2D::b2JointDef>

=item * L<Box2D::b2World>

=back

=head1 BUGS

See L<Box2D/BUGS>

=head1 AUTHORS

See L<Box2D/AUTHORS>

=head1 COPYRIGHT & LICENSE

See L<Box2D/"COPYRIGHT & LICENSE">

=cut
