diff options
Diffstat (limited to 'sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h')
| -rw-r--r-- | sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h new file mode 100644 index 0000000..6824291 --- /dev/null +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + + +#ifndef NVBLASTAUTHORINGFCUTOUTIMPL_H +#define NVBLASTAUTHORINGFCUTOUTIMPL_H + +#include "NvBlastExtAuthoringCutout.h" +#include <vector> +#include "PxMat44.h" // TODO Should replace? + +namespace Nv +{ +namespace Blast +{ + +struct PolyVert +{ + uint16_t index; + uint16_t flags; +}; + +struct ConvexLoop +{ + std::vector<PolyVert> polyVerts; +}; + +struct Cutout +{ + std::vector<physx::PxVec3> vertices; + std::vector<ConvexLoop> convexLoops; +}; + +struct POINT2D +{ + POINT2D() {} + POINT2D(int32_t _x, int32_t _y) : x(_x), y(_y) {} + + int32_t x; + int32_t y; + + bool operator==(const POINT2D& other) const + { + return x == other.x && y == other.y; + } + bool operator<(const POINT2D& other) const + { + if (x == other.x) return y < other.y; + return x < other.x; + } +}; + +void convertTracesToIncremental(std::vector< std::vector<POINT2D>* >& traces); + +struct CutoutSetImpl : public CutoutSet +{ + CutoutSetImpl() : periodic(false), dimensions(0.0f) + { + } + + uint32_t getCutoutCount() const + { + return (uint32_t)cutouts.size(); + } + + uint32_t getCutoutVertexCount(uint32_t cutoutIndex) const + { + return (uint32_t)cutouts[cutoutIndex].vertices.size(); + } + uint32_t getCutoutLoopCount(uint32_t cutoutIndex) const + { + return (uint32_t)cutouts[cutoutIndex].convexLoops.size(); + } + + const physx::PxVec3& getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const + { + return cutouts[cutoutIndex].vertices[vertexIndex]; + } + + uint32_t getCutoutLoopSize(uint32_t cutoutIndex, uint32_t loopIndex) const + { + return (uint32_t)cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts.size(); + } + + uint32_t getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const + { + return cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts[vertexNum].index; + } + uint32_t getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const + { + return cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts[vertexNum].flags; + } + bool isPeriodic() const + { + return periodic; + } + const physx::PxVec2& getDimensions() const + { + return dimensions; + } + + //void serialize(physx::PxFileBuf& stream) const; + //void deserialize(physx::PxFileBuf& stream); + + void release() + { + delete this; + } + + std::vector<Cutout> cutouts; + bool periodic; + physx::PxVec2 dimensions; +}; + +void createCutoutSet(Nv::Blast::CutoutSetImpl& cutoutSet, const uint8_t* pixelBuffer, uint32_t bufferWidth, uint32_t bufferHeight, + float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps); + + +} // namespace Blast +} // namespace Nv + +#endif // ifndef NVBLASTAUTHORINGFCUTOUTIMPL_H |