#include #include "vtPhysXAll.h" using namespace vtAgeia; pJointD6::pJointD6(pRigidBody* _a,pRigidBody* _b) : pJoint(_a,_b,JT_D6) { } void pJointD6::setDriveAngularVelocity(VxVector angVel) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return; joint->saveToDesc(descr); //joint->setDriveAngularVelocity(pMath::getFrom(angVel)); descr.driveAngularVelocity = (pMath::getFrom(angVel)); joint->loadFromDesc(descr); } ////////////////////////////////////////////////////////////////////////// void pJointD6::setDriveLinearVelocity(VxVector linVel) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); //joint->setDriveLinearVelocity(pMath::getFrom(linVel)); descr.driveLinearVelocity = (pMath::getFrom(linVel)); joint->loadFromDesc(descr); } ////////////////////////////////////////////////////////////////////////// void pJointD6::setDriveRotation(VxQuaternion rot) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); joint->setDriveOrientation(pMath::getFrom(rot)); joint->loadFromDesc(descr); } ////////////////////////////////////////////////////////////////////////// void pJointD6::setDrivePosition(VxVector pos) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); joint->setDrivePosition(pMath::getFrom(pos)); descr.drivePosition = (pMath::getFrom(pos)); joint->loadFromDesc(descr); } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getSlerpDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.slerpDrive.damping,descr.slerpDrive.spring,descr.slerpDrive.forceLimit,descr.slerpDrive.driveType.bitField); return result; } int pJointD6::setSlerpDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.slerpDrive = sdrive; descr.flags |=NX_D6JOINT_SLERP_DRIVE; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getTwistDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.twistDrive.damping,descr.twistDrive.spring,descr.twistDrive.forceLimit,descr.twistDrive.driveType); return result; } int pJointD6::setTwistDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.twistDrive = sdrive; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getSwingDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.swingDrive.damping,descr.swingDrive.spring,descr.swingDrive.forceLimit,descr.swingDrive.driveType); return result; } int pJointD6::setSwingDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.swingDrive = sdrive; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getZDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.zDrive.damping,descr.zDrive.spring,descr.zDrive.forceLimit,descr.zDrive.driveType); return result; } int pJointD6::setZDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.zDrive = sdrive; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getYDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.yDrive.damping,descr.yDrive.spring,descr.yDrive.forceLimit,descr.yDrive.driveType); return result; } int pJointD6::setYDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.yDrive = sdrive; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6Drive pJointD6::getXDrive() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6Drive result(descr.xDrive.damping,descr.xDrive.spring,descr.xDrive.forceLimit,descr.xDrive.driveType); return result; } int pJointD6::setXDrive(pJD6Drive drive) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointDriveDesc sdrive; sdrive.damping = drive.damping; sdrive.spring = drive.spring; sdrive.forceLimit = drive.forceLimit; sdrive.driveType=drive.driveType; descr.xDrive = sdrive; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6SoftLimit pJointD6::getTwistLowLimit() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6SoftLimit result(descr.twistLimit.low.damping,descr.twistLimit.low.spring,descr.twistLimit.low.value,descr.twistLimit.low.restitution); return result; } int pJointD6::setTwistLowLimit(pJD6SoftLimit limit) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointLimitSoftDesc sLimit; sLimit.value = limit.value; sLimit.spring = limit.spring; sLimit.damping = limit.damping; sLimit.restitution = limit.restitution; if (!sLimit.isValid())return -1; descr.twistLimit.low= sLimit; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6SoftLimit pJointD6::getTwistHighLimit() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6SoftLimit result(descr.twistLimit.high.damping,descr.twistLimit.high.spring,descr.twistLimit.high.value,descr.twistLimit.high.restitution); return result; } int pJointD6::setTwistHighLimit(pJD6SoftLimit limit) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointLimitSoftDesc sLimit; sLimit.value = limit.value; sLimit.spring = limit.spring; sLimit.damping = limit.damping; sLimit.restitution = limit.restitution; if (!sLimit.isValid())return -1; descr.twistLimit.high= sLimit; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6SoftLimit pJointD6::getSwing2Limit() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6SoftLimit result(descr.swing2Limit.damping,descr.swing2Limit.spring,descr.swing2Limit.value,descr.swing2Limit.restitution); return result; } int pJointD6::setSwing2Limit(pJD6SoftLimit limit) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointLimitSoftDesc sLimit; sLimit.value = limit.value; sLimit.spring = limit.spring; sLimit.damping = limit.damping; sLimit.restitution = limit.restitution; if (!sLimit.isValid())return -1; descr.swing2Limit= sLimit; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6SoftLimit pJointD6::getSwing1Limit() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6SoftLimit result(descr.swing1Limit.damping,descr.swing1Limit.spring,descr.swing1Limit.value,descr.swing1Limit.restitution); return result; } int pJointD6::setSwing1Limit(pJD6SoftLimit limit) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointLimitSoftDesc sLimit; sLimit.value = limit.value; sLimit.spring = limit.spring; sLimit.damping = limit.damping; sLimit.restitution = limit.restitution; if (!sLimit.isValid())return -1; descr.swing1Limit= sLimit; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// pJD6SoftLimit pJointD6::getLinearLimit() { NxD6JointDesc descr;NxD6Joint *joint = static_cast(getJoint());joint->saveToDesc(descr); pJD6SoftLimit result(descr.linearLimit.damping,descr.linearLimit.spring,descr.linearLimit.value,descr.linearLimit.restitution); return result; } int pJointD6::setLinearLimit(pJD6SoftLimit limit) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return -1 ; joint->saveToDesc(descr); NxJointLimitSoftDesc sLimit; sLimit.value = limit.value; sLimit.spring = limit.spring; sLimit.damping = limit.damping; sLimit.restitution = limit.restitution; if (!sLimit.isValid())return -1; descr.linearLimit = sLimit; joint->loadFromDesc(descr); return 1; } ////////////////////////////////////////////////////////////////////////// void pJointD6::setTwistMotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.twistMotion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } void pJointD6::setSwing1MotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.swing1Motion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } void pJointD6::setSwing2MotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.swing2Motion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } void pJointD6::setXMotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.xMotion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } void pJointD6::setYMotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.yMotion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } void pJointD6::setZMotionMode(D6MotionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint());if (!joint)return;joint->saveToDesc(descr); descr.zMotion = (NxD6JointMotion)mode; joint->loadFromDesc(descr); } D6MotionMode pJointD6::getTwist() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.twistMotion; } D6MotionMode pJointD6::getSwing1() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.swing1Motion; } D6MotionMode pJointD6::getSwing2() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.swing2Motion; } D6MotionMode pJointD6::getXMotion() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.xMotion; } D6MotionMode pJointD6::getYMotion() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.yMotion; } D6MotionMode pJointD6::getZMotion() { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return D6MM_Locked; joint->saveToDesc(descr); return (D6MotionMode)descr.zMotion; } void pJointD6::setGlobalAnchor(VxVector anchor) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); joint->setGlobalAnchor(pMath::getFrom(anchor)); } void pJointD6::setGlobalAxis(VxVector axis) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); joint->setGlobalAxis(pMath::getFrom(axis)); //joint->setGlobalA(pMath::getFrom(anchor)); } void pJointD6::setRatio(float ratio) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); if (ratio!=0.0f) { descr.jointFlags|=NX_D6JOINT_GEAR_ENABLED; descr.gearRatio = ratio; }else { descr.jointFlags&=~NX_D6JOINT_GEAR_ENABLED; } joint->loadFromDesc(descr); } void pJointD6::enableCollision( bool value ) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); if (value) { descr.jointFlags|=NX_JF_COLLISION_ENABLED; }else { descr.jointFlags&=~NX_JF_COLLISION_ENABLED; } joint->loadFromDesc(descr); } void pJointD6::setProjectionMode(ProjectionMode mode) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); descr.projectionMode = (NxJointProjectionMode)mode; joint->loadFromDesc(descr); } void pJointD6::setProjectionDistance(float distance) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); descr.projectionDistance= distance; joint->loadFromDesc(descr); } void pJointD6::setProjectionAngle(float angle) { NxD6JointDesc descr; NxD6Joint *joint = static_cast(getJoint()); if (!joint)return ; joint->saveToDesc(descr); descr.projectionAngle= angle; joint->loadFromDesc(descr); }