public abstract void AddConstraintRef(BulletBody obj, BulletConstraint constrain);
 public override bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain)
 {
     BulletWorldUnman worldu = world as BulletWorldUnman;
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.RemoveConstraintFromWorld2(worldu.ptr, constrainu.ptr);
 }
 public override bool SetAngularLimits(BulletConstraint constrain, Vector3 low, Vector3 hi)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.SetAngularLimits2(constrainu.ptr, low, hi);
 }
 public abstract bool SetFrames(BulletConstraint constrain,
     Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot);
 public abstract void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations);
 public abstract bool HasAnisotripicFriction(BulletConstraint constrain);
 public abstract bool SetBreakingImpulseThreshold(BulletConstraint constrain, float threshold);
 public abstract bool CalculateTransforms(BulletConstraint constrain);
 public abstract bool SetConstraintParam(BulletConstraint constrain, ConstraintParams paramIndex, float value,
                                         ConstraintParamAxis axis);
 public abstract bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel,
                                              float maxMotorForce);
 public abstract bool SetBreakingImpulseThreshold(BulletConstraint constrain, float threshold);
 public abstract bool UseFrameOffset(BulletConstraint constrain, float enable);
 public abstract bool SetAngularLimits(BulletConstraint constrain, Vector3 low, Vector3 hi);
 public abstract bool SetFrames(BulletConstraint constrain,
                                Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot);
 public abstract bool CalculateTransforms(BulletConstraint constrain);
 public abstract bool DestroyConstraint(BulletWorld world, BulletConstraint constrain);
 public virtual void DumpConstraint(BulletWorld sim, BulletConstraint constrain)
 {
 }
 public abstract bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain,
                                           bool disableCollisionsBetweenLinkedObjects);
 public abstract void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain);
 public abstract bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain);
 public abstract void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations);
 // =====================================================================================
 // btCollisionObject entries
 public abstract Vector3 GetAnisotripicFriction(BulletConstraint constrain);
 public abstract bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel,
     float maxMotorForce);
 public abstract Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict);
 public override bool HasAnisotripicFriction(BulletConstraint constrain)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.HasAnisotripicFriction2(constrainu.ptr);
 }
 public abstract bool HasAnisotripicFriction(BulletConstraint constrain);
 public override void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain)
 {
     BulletBodyUnman bodyu = obj as BulletBodyUnman;
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     BSAPICPP.RemoveConstraintRef2(bodyu.ptr, constrainu.ptr);
 }
 public abstract void AddConstraintRef(BulletBody obj, BulletConstraint constrain);
 public override Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.SetAnisotripicFriction2(constrainu.ptr, frict);
 }
 public abstract void RemoveConstraintRef(BulletBody obj, BulletConstraint constrain);
 public abstract bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain,
     bool disableCollisionsBetweenLinkedObjects);
 public virtual void DumpConstraint(BulletWorld sim, BulletConstraint constrain)
 {
 }
 public abstract bool DestroyConstraint(BulletWorld world, BulletConstraint constrain);
 public override bool AddConstraintToWorld(BulletWorld world, BulletConstraint constrain,
     bool disableCollisionsBetweenLinkedObjects)
 {
     BulletWorldUnman worldu = world as BulletWorldUnman;
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.AddConstraintToWorld2(worldu.ptr, constrainu.ptr, disableCollisionsBetweenLinkedObjects);
 }
 // =====================================================================================
 // btCollisionObject entries
 public abstract Vector3 GetAnisotripicFriction(BulletConstraint constrain);
 public override bool TranslationalLimitMotor(BulletConstraint constrain, float enable, float targetVel,
     float maxMotorForce)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.TranslationalLimitMotor2(constrainu.ptr, enable, targetVel, maxMotorForce);
 }
 public abstract bool RemoveConstraintFromWorld(BulletWorld world, BulletConstraint constrain);
 public override bool UseFrameOffset(BulletConstraint constrain, float enable)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.UseFrameOffset2(constrainu.ptr, enable);
 }
 public abstract Vector3 SetAnisotripicFriction(BulletConstraint constrain, Vector3 frict);
 public override bool CalculateTransforms(BulletConstraint constrain)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.CalculateTransforms2(constrainu.ptr);
 }
 public abstract void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse);
 public override bool DestroyConstraint(BulletWorld world, BulletConstraint constrain)
 {
     BulletWorldUnman worldu = world as BulletWorldUnman;
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.DestroyConstraint2(worldu.ptr, constrainu.ptr);
 }
 public abstract bool SetConstraintParam(BulletConstraint constrain, ConstraintParams paramIndex, float value,
     ConstraintParamAxis axis);
 public override void DumpConstraint(BulletWorld world, BulletConstraint constrain)
 {
     BulletWorldUnman worldu = world as BulletWorldUnman;
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     BSAPICPP.DumpConstraint2(worldu.ptr, constrainu.ptr);
 }
 public abstract bool SetLinearLimits(BulletConstraint constrain, Vector3 low, Vector3 hi);
 // =====================================================================================
 // btCollisionObject entries
 public override Vector3 GetAnisotripicFriction(BulletConstraint constrain)
 {
     BulletConstraintUnman constrainu = constrain as BulletConstraintUnman;
     return BSAPICPP.GetAnisotripicFriction2(constrainu.ptr);
 }
 public abstract bool UseFrameOffset(BulletConstraint constrain, float enable);
 public abstract void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse);