1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qplaneshape_p.h"
5
6#include <QtQuick3D/QQuick3DGeometry>
7#include <extensions/PxExtensionsAPI.h>
8
9//########################################################################################
10// NOTE:
11// Triangle mesh, heightfield or plane geometry shapes configured as eSIMULATION_SHAPE are
12// not supported for non-kinematic PxRigidDynamic instances.
13//########################################################################################
14
15QT_BEGIN_NAMESPACE
16
17/*!
18 \qmltype PlaneShape
19 \inqmlmodule QtQuick3D.Physics
20 \inherits CollisionShape
21 \since 6.4
22 \brief A collision shape that defines an infinite plane.
23
24 The PlaneShape type defines an infinite plane. The plane divides space into "above" and "below"
25 it. Everything "below" the plane will collide with it and be pushed above it. The orientation of
26 the plane is vertical: The Plane lies on the XY plane with "above" pointing sideways towards positive Z.
27
28 PlaneShape can only be used with \l StaticRigidBody and \l {DynamicRigidBody::isKinematic}{kinematic bodies}.
29*/
30
31QPlaneShape::QPlaneShape() = default;
32
33QPlaneShape::~QPlaneShape()
34{
35 delete m_planeGeometry;
36}
37
38physx::PxGeometry *QPlaneShape::getPhysXGeometry()
39{
40 if (!m_planeGeometry) {
41 updatePhysXGeometry();
42 }
43 return m_planeGeometry;
44}
45
46void QPlaneShape::updatePhysXGeometry()
47{
48 delete m_planeGeometry;
49 // TODO: we need only one plane geometry, and it should live in the backend
50 m_planeGeometry = new physx::PxPlaneGeometry();
51}
52
53QT_END_NAMESPACE
54

source code of qtquick3dphysics/src/quick3dphysics/qplaneshape.cpp