// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of NVIDIA CORPORATION nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright (c) 2008-2023 NVIDIA Corporation. All rights reserved. // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. // Copyright (c) 2001-2004 NovodeX AG. All rights reserved. #pragma once /** \addtogroup vehicle2 @{ */ #include "vehicle2/PxVehicleComponent.h" #include "vehicle2/PxVehicleParams.h" #include "PxVehiclePvdFunctions.h" #if !PX_DOXYGEN namespace physx { namespace vehicle2 { #endif #define VEHICLE_FLOAT_ARRAY_DATA(b) PxVehicleArrayData b; b.setEmpty(); #define VEHICLE_ARRAY_DATA(a, b) PxVehicleArrayData b; b.setEmpty(); #define VEHICLE_SIZED_ARRAY_DATA(a, b) PxVehicleSizedArrayData b; b.setEmpty(); class PxVehiclePVDComponent : public PxVehicleComponent { public: PxVehiclePVDComponent() : PxVehicleComponent() , firstTime(true) {} virtual ~PxVehiclePVDComponent() {} virtual void getDataForPVDComponent( const PxVehicleAxleDescription*& axleDescription, const PxVehicleRigidBodyParams*& rbodyParams, const PxVehicleRigidBodyState*& rbodyState, const PxVehicleSuspensionStateCalculationParams*& suspStateCalcParams, PxVehicleSizedArrayData& brakeResponseParams, const PxVehicleSteerCommandResponseParams*& steerResponseParams, PxVehicleArrayData& brakeResponseStates, PxVehicleArrayData& steerResponseStates, PxVehicleArrayData& wheelParams, PxVehicleArrayData& wheelActuationStates, PxVehicleArrayData& wheelRigidBody1dStates, PxVehicleArrayData& wheelLocalPoses, PxVehicleArrayData& roadGeomStates, PxVehicleArrayData& suspParams, PxVehicleArrayData& suspCompParams, PxVehicleArrayData& suspForceParams, PxVehicleArrayData& suspStates, PxVehicleArrayData& suspCompStates, PxVehicleArrayData& suspForces, PxVehicleArrayData& tireForceParams, PxVehicleArrayData& tireDirectionStates, PxVehicleArrayData& tireSpeedStates, PxVehicleArrayData& tireSlipStates, PxVehicleArrayData& tireStickyStates, PxVehicleArrayData& tireGripStates, PxVehicleArrayData& tireCamberStates, PxVehicleArrayData& tireForces, PxVehicleSizedArrayData& antiRollForceParams, const PxVehicleAntiRollTorque*& antiRollTorque, const PxVehicleCommandState*& commandState, const PxVehicleDirectDriveThrottleCommandResponseParams*& directDriveThrottleResponseParams, const PxVehicleDirectDriveTransmissionCommandState*& directDriveTransmissionState, PxVehicleArrayData& directDrivethrottleResponseState, const PxVehicleClutchCommandResponseParams*& clutchResponseParams, const PxVehicleClutchParams*& clutchParams, const PxVehicleEngineParams*& engineParams, const PxVehicleGearboxParams*& gearboxParams, const PxVehicleAutoboxParams*& autoboxParams, const PxVehicleMultiWheelDriveDifferentialParams*& multiWheelDiffParams, const PxVehicleFourWheelDriveDifferentialParams*& fourWheelDiffParams, const PxVehicleEngineDriveTransmissionCommandState*& engineDriveTransmissionState, const PxVehicleClutchCommandResponseState*& clutchResponseState, const PxVehicleEngineDriveThrottleCommandResponseState*& engineDriveThrottleResponseState, const PxVehicleEngineState*& engineState, const PxVehicleGearboxState*& gearboxState, const PxVehicleAutoboxState*& autoboxState, const PxVehicleDifferentialState*& diffState, const PxVehicleClutchSlipState*& clutchSlipState, PxVehicleArrayData& physxConstraintParams, PxVehicleArrayData& physxMaterialFrictionParams, const PxVehiclePhysXActor*& physxActor, const PxVehiclePhysXRoadGeometryQueryParams*& physxRoadGeomQryParams, PxVehicleArrayData& physxRoadGeomStates, PxVehicleArrayData& physxConstraintStates, PxVehiclePvdObjectHandles*& objectHandles) = 0; virtual bool update(const PxReal dt, const PxVehicleSimulationContext& context) { PX_UNUSED(dt); PX_UNUSED(context); if(!context.pvdContext.attributeHandles || !context.pvdContext.writer) return true; const PxVehicleAxleDescription* axleDesc = NULL; const PxVehicleRigidBodyParams* rbodyParams = NULL; const PxVehicleRigidBodyState* rbodyState = NULL; const PxVehicleSuspensionStateCalculationParams* suspStateCalcParams = NULL; VEHICLE_SIZED_ARRAY_DATA(PxVehicleBrakeCommandResponseParams, brakeResponseParams); const PxVehicleSteerCommandResponseParams* steerResponseParams = NULL; VEHICLE_FLOAT_ARRAY_DATA(brakeResponseStates); VEHICLE_FLOAT_ARRAY_DATA(steerResponseStates); VEHICLE_ARRAY_DATA(PxVehicleWheelParams, wheelParams); VEHICLE_ARRAY_DATA(PxVehicleWheelActuationState, wheelActuationStates); VEHICLE_ARRAY_DATA(PxVehicleWheelRigidBody1dState, wheelRigidBody1dStates); VEHICLE_ARRAY_DATA(PxVehicleWheelLocalPose, wheelLocalPoses); VEHICLE_ARRAY_DATA(PxVehicleRoadGeometryState, roadGeomStates); VEHICLE_ARRAY_DATA(PxVehicleSuspensionParams, suspParams); VEHICLE_ARRAY_DATA(PxVehicleSuspensionComplianceParams, suspComplianceParams); VEHICLE_ARRAY_DATA(PxVehicleSuspensionForceParams, suspForceParams); VEHICLE_ARRAY_DATA(PxVehicleSuspensionState, suspStates); VEHICLE_ARRAY_DATA(PxVehicleSuspensionComplianceState, suspComplianceStates); VEHICLE_ARRAY_DATA(PxVehicleSuspensionForce, suspForces); VEHICLE_ARRAY_DATA(PxVehicleTireForceParams, tireForceParams); VEHICLE_ARRAY_DATA(PxVehicleTireDirectionState, tireDirectionStates); VEHICLE_ARRAY_DATA(PxVehicleTireSpeedState, tireSpeedStates); VEHICLE_ARRAY_DATA(PxVehicleTireSlipState, tireSlipStates); VEHICLE_ARRAY_DATA(PxVehicleTireStickyState, tireStickyStates); VEHICLE_ARRAY_DATA(PxVehicleTireGripState, tireGripStates); VEHICLE_ARRAY_DATA(PxVehicleTireCamberAngleState, tireCamberStates); VEHICLE_ARRAY_DATA(PxVehicleTireForce, tireForces); VEHICLE_SIZED_ARRAY_DATA(PxVehicleAntiRollForceParams, antiRollParams); const PxVehicleAntiRollTorque* antiRollTorque = NULL; const PxVehicleCommandState* commandState = NULL; const PxVehicleDirectDriveThrottleCommandResponseParams* directDriveThrottleResponseParams = NULL; const PxVehicleDirectDriveTransmissionCommandState* directDriveTransmissionState = NULL; VEHICLE_FLOAT_ARRAY_DATA(directDrivethrottleResponseState); const PxVehicleClutchCommandResponseParams* clutchResponseParams = NULL; const PxVehicleClutchParams* clutchParams = NULL; const PxVehicleEngineParams* engineParams = NULL; const PxVehicleGearboxParams* gearboxParams = NULL; const PxVehicleAutoboxParams* autoboxParams = NULL; const PxVehicleMultiWheelDriveDifferentialParams* multiWheelDiffParams = NULL; const PxVehicleFourWheelDriveDifferentialParams* fourWheelDiffParams = NULL; const PxVehicleEngineDriveTransmissionCommandState* engineDriveTransmissionCommandState = NULL; const PxVehicleClutchCommandResponseState* clutchResponseState = NULL; const PxVehicleEngineDriveThrottleCommandResponseState* throttleResponseState = NULL; const PxVehicleEngineState* engineState = NULL; const PxVehicleGearboxState* gearboxState = NULL; const PxVehicleAutoboxState* autoboxState = NULL; const PxVehicleDifferentialState* diffState = NULL; const PxVehicleClutchSlipState* clutchSlipState = NULL; VEHICLE_ARRAY_DATA(PxVehiclePhysXSuspensionLimitConstraintParams, physxConstraintParams); VEHICLE_ARRAY_DATA(PxVehiclePhysXMaterialFrictionParams, physxMaterialFrictionParams); const PxVehiclePhysXActor* physxActor = NULL; const PxVehiclePhysXRoadGeometryQueryParams* physxRoadGeomQryParams = NULL; VEHICLE_ARRAY_DATA(PxVehiclePhysXRoadGeometryQueryState, physxRoadGeomStates); VEHICLE_ARRAY_DATA(PxVehiclePhysXConstraintState, physxConstraintStates); PxVehiclePvdObjectHandles* omniPvdObjectHandles = NULL; getDataForPVDComponent( axleDesc, rbodyParams, rbodyState, suspStateCalcParams, brakeResponseParams, steerResponseParams, brakeResponseStates, steerResponseStates, wheelParams, wheelActuationStates, wheelRigidBody1dStates, wheelLocalPoses, roadGeomStates, suspParams, suspComplianceParams, suspForceParams, suspStates, suspComplianceStates, suspForces, tireForceParams, tireDirectionStates, tireSpeedStates, tireSlipStates, tireStickyStates, tireGripStates, tireCamberStates, tireForces, antiRollParams, antiRollTorque, commandState, directDriveThrottleResponseParams, directDriveTransmissionState, directDrivethrottleResponseState, clutchResponseParams, clutchParams, engineParams, gearboxParams, autoboxParams, multiWheelDiffParams, fourWheelDiffParams, engineDriveTransmissionCommandState, clutchResponseState, throttleResponseState, engineState, gearboxState, autoboxState, diffState, clutchSlipState, physxConstraintParams, physxMaterialFrictionParams, physxActor, physxRoadGeomQryParams, physxRoadGeomStates, physxConstraintStates, omniPvdObjectHandles); if(!omniPvdObjectHandles) return true; if(firstTime) { PxVehiclePvdRigidBodyRegister( rbodyParams, rbodyState, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdSuspensionStateCalculationParamsRegister( suspStateCalcParams, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdCommandResponseRegister( brakeResponseParams, steerResponseParams, brakeResponseStates, steerResponseStates, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdWheelAttachmentsRegister( *axleDesc, wheelParams, wheelActuationStates, wheelRigidBody1dStates, wheelLocalPoses, roadGeomStates, suspParams, suspComplianceParams, suspForceParams, suspStates, suspComplianceStates, suspForces, tireForceParams, tireDirectionStates, tireSpeedStates, tireSlipStates, tireStickyStates, tireGripStates, tireCamberStates, tireForces, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdAntiRollsRegister( antiRollParams, antiRollTorque, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdDirectDrivetrainRegister( commandState, directDriveTransmissionState, directDriveThrottleResponseParams, directDrivethrottleResponseState, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdEngineDrivetrainRegister( commandState, engineDriveTransmissionCommandState, clutchResponseParams, clutchParams, engineParams, gearboxParams, autoboxParams, multiWheelDiffParams, fourWheelDiffParams, clutchResponseState, throttleResponseState, engineState, gearboxState, autoboxState, diffState, clutchSlipState, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdPhysXWheelAttachmentRegister( *axleDesc, physxConstraintParams, physxMaterialFrictionParams, physxActor, physxRoadGeomQryParams, physxRoadGeomStates, physxConstraintStates, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdPhysXRigidActorRegister( physxActor, *context.pvdContext.attributeHandles, omniPvdObjectHandles, context.pvdContext.writer); firstTime = false; } PxVehiclePvdRigidBodyWrite( rbodyParams, rbodyState, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdSuspensionStateCalculationParamsWrite( suspStateCalcParams, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdCommandResponseWrite( *axleDesc, brakeResponseParams, steerResponseParams, brakeResponseStates, steerResponseStates, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdWheelAttachmentsWrite( *axleDesc, wheelParams, wheelActuationStates, wheelRigidBody1dStates, wheelLocalPoses, roadGeomStates, suspParams, suspComplianceParams, suspForceParams, suspStates, suspComplianceStates, suspForces, tireForceParams, tireDirectionStates, tireSpeedStates, tireSlipStates, tireStickyStates, tireGripStates, tireCamberStates, tireForces, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdAntiRollsWrite( antiRollParams, antiRollTorque, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdDirectDrivetrainWrite( *axleDesc, commandState, directDriveTransmissionState, directDriveThrottleResponseParams, directDrivethrottleResponseState, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdEngineDrivetrainWrite( commandState, engineDriveTransmissionCommandState, clutchResponseParams, clutchParams, engineParams, gearboxParams, autoboxParams, multiWheelDiffParams, fourWheelDiffParams, clutchResponseState, throttleResponseState, engineState, gearboxState, autoboxState, diffState, clutchSlipState, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdPhysXWheelAttachmentWrite( *axleDesc, physxConstraintParams, physxMaterialFrictionParams, physxActor, physxRoadGeomQryParams, physxRoadGeomStates, physxConstraintStates, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); PxVehiclePvdPhysXRigidActorWrite( physxActor, *context.pvdContext.attributeHandles, *omniPvdObjectHandles, context.pvdContext.writer); return true; } private: bool firstTime; }; #if !PX_DOXYGEN } // namespace vehicle2 } // namespace physx #endif /** @} */