protected override void CopyTo(JointInfo target)
        {
            base.CopyTo(target);
            FixedRevoluteJointInfo c = target as FixedRevoluteJointInfo;

            c.worldAnchor    = this.worldAnchor;
            c.localAnchor    = this.localAnchor;
            c.motorSpeed     = this.motorSpeed;
            c.maxMotorTorque = this.maxMotorTorque;
            c.motorEnabled   = this.motorEnabled;
            c.limitEnabled   = this.limitEnabled;
            c.lowerLimit     = this.lowerLimit;
            c.upperLimit     = this.upperLimit;
            c.refAngle       = this.refAngle;
        }
        private void DrawJoint(Canvas canvas, FixedRevoluteJointInfo joint)
        {
            float angularCircleRad = joint.BodyA.BoundRadius * 0.25f;

            this.DrawWorldPosConstraint(canvas, joint.BodyA, joint.LocalAnchor, joint.WorldAnchor);
            if (joint.LimitEnabled)
            {
                this.DrawLocalAngleConstraint(
                    canvas, joint.BodyA, joint.LocalAnchor,
                    joint.LowerLimit + joint.ReferenceAngle, joint.UpperLimit + joint.ReferenceAngle, joint.BodyA.GameObj.Transform.Angle,
                    angularCircleRad);
            }

            if (joint.MotorEnabled)
            {
                this.DrawLocalAngleMotor(canvas, joint.BodyA, Vector2.Zero, joint.MotorSpeed, joint.MaxMotorTorque, joint.BodyA.BoundRadius * 1.15f);
            }

            this.DrawWorldAnchor(canvas, joint.BodyA, joint.WorldAnchor);
            this.DrawLocalAnchor(canvas, joint.BodyA, joint.LocalAnchor);
        }