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

            c.localAnchorB = this.localAnchorB;
            c.localAnchorA = this.localAnchorA;
            c.worldAnchorB = this.worldAnchorB;
            c.worldAnchorA = this.worldAnchorA;
            c.maxLengthA   = this.maxLengthA;
            c.maxLengthB   = this.maxLengthB;
            c.totalLength  = this.totalLength;
            c.ratio        = this.ratio;
        }
        private void DrawJoint(Canvas canvas, PulleyJointInfo joint)
        {
            float maxLenA = MathF.Min(joint.MaxLengthA, joint.TotalLength - (joint.Ratio * joint.LengthB));
            float maxLenB = MathF.Min(joint.MaxLengthB, joint.Ratio * (joint.TotalLength - joint.LengthA));

            this.DrawWorldDistConstraint(canvas, joint.BodyA, joint.LocalAnchorA, joint.WorldAnchorA, 0.0f, maxLenA);
            this.DrawWorldDistConstraint(canvas, joint.BodyB, joint.LocalAnchorB, joint.WorldAnchorB, 0.0f, maxLenB);
            this.DrawWorldLooseConstraint(canvas, joint.BodyA, joint.WorldAnchorA, joint.WorldAnchorB);
            this.DrawLocalAnchor(canvas, joint.BodyB, joint.LocalAnchorB);
            this.DrawLocalAnchor(canvas, joint.BodyA, joint.LocalAnchorA);
        }