Main Page   Class List   Class Members  

  • Main Page
  • User's Guide
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h

Go to the documentation of this file.
00001 // This code contains NVIDIA Confidential Information and is disclosed to you
00002 // under a form of NVIDIA software license agreement provided separately to you.
00003 //
00004 // Notice
00005 // NVIDIA Corporation and its licensors retain all intellectual property and
00006 // proprietary rights in and to this software and related documentation and
00007 // any modifications thereto. Any use, reproduction, disclosure, or
00008 // distribution of this software and related documentation without an express
00009 // license agreement from NVIDIA Corporation is strictly prohibited.
00010 //
00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
00015 //
00016 // Information and code furnished is believed to be accurate and reliable.
00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
00018 // information or for any infringement of patents or other rights of third parties that may
00019 // result from its use. No license is granted by implication or otherwise under any patent
00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice.
00021 // This code supersedes and replaces all information previously supplied.
00022 // NVIDIA Corporation products are not authorized for use as critical
00023 // components in life support devices or systems without express written approval of
00024 // NVIDIA Corporation.
00025 //
00026 // Copyright (c) 2020 NVIDIA Corporation. All rights reserved.
00027 
00028 
00029 #ifndef NVBLASTEXTAUTHORINGBONDGENERATORIMPL_H
00030 #define NVBLASTEXTAUTHORINGBONDGENERATORIMPL_H
00031 
00032 #include "NvBlastExtAuthoringBondGenerator.h"
00033 #include "NvBlastExtAuthoringFractureTool.h"
00034 #include <PxPlane.h>
00035 #include <NvBlastExtAuthoringConvexMeshBuilder.h>
00036 #include <vector>
00037 #include <set>
00038 
00039 namespace Nv
00040 {
00041 namespace Blast
00042 {
00043 
00048 class BlastBondGeneratorImpl : public BlastBondGenerator
00049 {
00050 public: 
00051                 
00052     BlastBondGeneratorImpl(ConvexMeshBuilder* builder) 
00053         : mConvexMeshBuilder(builder) {};
00054 
00055     virtual void release() override;
00056 
00057     virtual int32_t buildDescFromInternalFracture(FractureTool* tool, const bool* chunkIsSupport,
00058         NvBlastBondDesc*& resultBondDescs, NvBlastChunkDesc*& resultChunkDescriptors)  override;
00059 
00060     virtual int32_t createBondBetweenMeshes(uint32_t meshACount, const Triangle* meshA, uint32_t meshBCount, const Triangle* meshB,
00061         NvBlastBond& resultBond, BondGenerationConfig conf) override;
00062 
00063     virtual int32_t createBondBetweenMeshes(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry,
00064         uint32_t overlapsCount, const uint32_t* overlapsA, const uint32_t* overlapsB,
00065         NvBlastBondDesc*& resultBond, BondGenerationConfig cfg) override;
00066 
00067     virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry,
00068         const bool* chunkIsSupport, NvBlastBondDesc*& resultBondDescs,
00069         BondGenerationConfig conf) override;
00070 
00071     virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls,
00072         const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, float maxSeparation) override;
00073 
00074 
00075                 
00076 private:
00077     float   processWithMidplanes(TriangleProcessor* trProcessor, const Triangle* mA, uint32_t mavc, const Triangle* mB, uint32_t mbvc, const CollisionHull* hull1, const CollisionHull* hull2,
00078                              const std::vector<physx::PxVec3>& hull1p, const std::vector<physx::PxVec3>& hull2p,
00079                              physx::PxVec3& normal, physx::PxVec3& centroid, float maxRelSeparation);
00080 
00081     int32_t createFullBondListAveraged( uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, const CollisionHull** chunkHulls,
00082                                         const bool* supportFlags, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, BondGenerationConfig conf, std::set<std::pair<uint32_t, uint32_t> >* pairNotToTest = nullptr);
00083     int32_t createFullBondListExact(    uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry,
00084                                         const bool* supportFlags, NvBlastBondDesc*& resultBondDescs, BondGenerationConfig conf);
00085     int32_t createFullBondListExactInternal(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry,
00086                                             std::vector<PlaneChunkIndexer>& planeTriangleMapping , NvBlastBondDesc*& resultBondDescs);
00087     int32_t createBondForcedInternal(   const std::vector<physx::PxVec3>& hull0, const std::vector<physx::PxVec3>& hull1,const CollisionHull& cHull0, 
00088                                         const CollisionHull& cHull1, physx::PxBounds3 bound0, physx::PxBounds3 bound1, NvBlastBond& resultBond, float overlapping);
00089 
00090     void    buildGeometryCache(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry);
00091     void    resetGeometryCache();
00092 
00093     ConvexMeshBuilder*                          mConvexMeshBuilder;
00094 
00095     std::vector<std::vector<Triangle> >         mGeometryCache;
00096 
00097     std::vector<PlaneChunkIndexer>              mPlaneCache;
00098     std::vector<CollisionHull*>                 mCHullCache;
00099     std::vector<std::vector<physx::PxVec3> >    mHullsPointsCache;
00100     std::vector<physx::PxBounds3 >              mBoundsCache;
00101 
00102 
00103 };
00104 
00105 }   // namespace Blast
00106 }   // namespace Nv
00107 
00108 #endif // NVBLASTEXTAUTHORINGBONDGENERATORIMPL_H
Copyright © 2015-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com