7#include <QtQuick3DRuntimeRender/private/qssgrendernode_p.h>
8#include <QtQuick3DUtils/private/qssgutils_p.h>
9#include <QtQuick3D/private/qquick3dobject_p.h>
132 return d->m_position.x();
146 return d->m_position.y();
160 return d->m_position.z();
172 return d->m_rotation;
185 return d->m_position;
249 return d->m_staticFlags;
351 if (
d->m_sceneTransformDirty)
353 return d->m_sceneTransform;
402 return rotationMatrix;
418 QVector3D prevForward, prevUp, prevRight;
422 if (emitDirectionChanges) {
437 if (emitDirectionChanges) {
444 const bool positionChanged = prevPosition != newPosition;
445 const bool rotationChanged = prevRotation != newRotation;
446 const bool scaleChanged = !
qFuzzyCompare(prevScale, newScale);
448 if (!positionChanged && !rotationChanged && !scaleChanged)
451 emit q->sceneTransformChanged();
454 emit q->scenePositionChanged();
456 emit q->sceneRotationChanged();
458 emit q->sceneScaleChanged();
459 if (emitDirectionChanges) {
460 const bool forwardChanged = prevForward != newForward;
461 const bool upChanged = prevUp != newUp;
462 const bool rightChanged = prevRight != newRight;
481 return (
signal == sceneTransformSignal
482 ||
signal == scenePositionSignal
483 ||
signal == sceneRotationSignal
484 ||
signal == sceneScaleSignal);
495 return (
signal == forwardSignal
497 ||
signal == rightSignal);
507 if (
d->isSceneTransformRelatedSignal(
signal))
508 d->m_sceneTransformConnectionCount++;
509 if (
d->isDirectionRelatedSignal(
signal))
510 d->m_directionConnectionCount++;
516 if (
d->isSceneTransformRelatedSignal(
signal))
517 d->m_sceneTransformConnectionCount--;
518 if (
d->isDirectionRelatedSignal(
signal))
519 d->m_directionConnectionCount--;
526 if (
d->m_sceneTransformConnectionCount > 0 ||
d->m_directionConnectionCount > 0)
527 d->emitChangesToSceneTransform();
552 if (
auto node = qobject_cast<QQuick3DNode *>(
child)) {
564 d->m_position.setX(
x);
565 d->markSceneTransformDirty();
577 d->m_position.setY(
y);
578 d->markSceneTransformDirty();
590 d->m_position.setZ(
z);
591 d->markSceneTransformDirty();
604 d->markSceneTransformDirty();
622 d->markSceneTransformDirty();
642 d->markSceneTransformDirty();
654 d->markSceneTransformDirty();
701 d->markSceneTransformDirty();
731 newRotationMatrix =
d->localRotationMatrix() * addRotationMatrix;
734 newRotationMatrix = addRotationMatrix *
d->localRotationMatrix();
740 newRotationMatrix = prm.
inverted() * addRotationMatrix * prm * lrm;
742 newRotationMatrix =
d->localRotationMatrix() * addRotationMatrix;
749 if (
d->m_rotation == newRotationQuaternion)
752 d->m_rotation = newRotationQuaternion;
753 d->markSceneTransformDirty();
770 bool transformIsDirty =
false;
772 if (spacialNode->pivot !=
d->m_pivot) {
773 transformIsDirty =
true;
774 spacialNode->
pivot =
d->m_pivot;
778 spacialNode->localOpacity =
d->m_opacity;
783 transformIsDirty =
true;
786 transformIsDirty =
true;
789 transformIsDirty =
true;
791 if (transformIsDirty) {
796 spacialNode->staticFlags =
d->m_staticFlags;
799 if (
d->m_isHiddenInEditor)
865 const auto scenePositionOther = node ? node->
mapPositionToScene(localPosition) : localPosition;
944 const auto sceneDirectionOther = node ? node->
mapDirectionToScene(localDirection) : localDirection;
952 d->markSceneTransformDirty();
970 return d->m_rotation;
975 if (change == QQuick3DObject::ItemParentHasChanged)
QGenericMatrix< M, N, T > transposed() const
Returns this matrix, transposed about its diagonal.
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
QMatrix3x3 normalMatrix() const
Returns the normal matrix corresponding to this 4x4 transformation.
QMatrix4x4 inverted(bool *invertible=nullptr) const
Returns the inverse of this matrix.
The QQuaternion class represents a quaternion consisting of a vector and scalar.
static QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3)
QQuaternion normalized() const
Returns the normalized unit form of this quaternion.
QMatrix3x3 toRotationMatrix() const
static QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle)
Creates a normalized quaternion that corresponds to rotating through angle degrees about the specifie...
void setIsHiddenInEditor(bool isHidden)
bool isDirectionRelatedSignal(const QMetaMethod &signal) const
QMatrix4x4 localRotationMatrix() const
QMatrix4x4 sceneRotationMatrix() const
QQuick3DNodePrivate(QQuick3DObjectPrivate::Type t)
int m_directionConnectionCount
void markSceneTransformDirty()
QMatrix4x4 m_sceneTransform
void emitChangesToSceneTransform()
void calculateGlobalVariables()
int m_sceneTransformConnectionCount
bool isSceneTransformRelatedSignal(const QMetaMethod &signal) const
bool m_hasInheritedUniformScale
bool m_sceneTransformDirty
static QQuick3DNodePrivate * get(QQuick3DNode *node)
void eulerRotationChanged()
void setRotation(const QQuaternion &rotation)
void setVisible(bool visible)
void connectNotify(const QMetaMethod &signal) override
virtual void itemChange(ItemChange, const ItemChangeData &) override
Q_INVOKABLE QVector3D mapDirectionFromNode(const QQuick3DNode *node, const QVector3D &localDirection) const
\qmlmethod vector3d QtQuick3D::Node::mapDirectionFromNode(QtQuick3D::Node node, vector3d localDirecti...
Q_INVOKABLE QVector3D mapPositionFromScene(const QVector3D &scenePosition) const
\qmlmethod vector3d QtQuick3D::Node::mapPositionFromScene(vector3d scenePosition)
void disconnectNotify(const QMetaMethod &signal) override
Q_INVOKABLE QVector3D mapDirectionFromScene(const QVector3D &sceneDirection) const
\qmlmethod vector3d QtQuick3D::Node::mapDirectionFromScene(vector3d sceneDirection)
void setEulerRotation(const QVector3D &eulerRotation)
void setScale(const QVector3D &scale)
Q_INVOKABLE void rotate(qreal degrees, const QVector3D &axis, QQuick3DNode::TransformSpace space)
\qmlmethod QtQuick3D::Node::rotate(real degrees, vector3d axis, enumeration space)
Q_INVOKABLE QVector3D mapPositionFromNode(const QQuick3DNode *node, const QVector3D &localPosition) const
\qmlmethod vector3d QtQuick3D::Node::mapPositionFromNode(QtQuick3D::Node node, vector3d localPosition...
void setPivot(const QVector3D &pivot)
void localOpacityChanged()
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
void setStaticFlags(int staticFlags)
void setLocalOpacity(float opacity)
void markAllDirty() override
QMatrix4x4 sceneTransform
void setPosition(const QVector3D &position)
Q_INVOKABLE QVector3D mapPositionToScene(const QVector3D &localPosition) const
\qmlmethod vector3d QtQuick3D::Node::mapPositionToScene(vector3d localPosition)
void sceneRotationChanged()
QQuick3DNode * parentNode() const
Q_INVOKABLE QVector3D mapPositionToNode(const QQuick3DNode *node, const QVector3D &localPosition) const
\qmlmethod vector3d QtQuick3D::Node::mapPositionToNode(QtQuick3D::Node node, vector3d localPosition)
void scenePositionChanged()
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
float localOpacity() const
\qmlproperty real QtQuick3D::Node::opacity
Q_INVOKABLE QVector3D mapDirectionToScene(const QVector3D &localDirection) const
\qmlmethod vector3d QtQuick3D::Node::mapDirectionToScene(vector3d localDirection)
void sceneTransformChanged()
Q_INVOKABLE QVector3D mapDirectionToNode(const QQuick3DNode *node, const QVector3D &localDirection) const
\qmlmethod vector3d QtQuick3D::Node::mapDirectionToNode(QtQuick3D::Node node, vector3d localDirection...
QQuick3DNode(QQuick3DNode *parent=nullptr)
\qmltype Node \inherits Object3D \inqmlmodule QtQuick3D
void staticFlagsChanged()
QQuaternion sceneRotation
QList< QQuick3DObject * > childItems
QQmlListProperty< QQuick3DObject > children()
static QQuick3DObjectPrivate * get(QQuick3DObject *item)
\qmltype Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DObject \inherits QtObject
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
QQuick3DObject * parent
\qmlproperty Object3D QtQuick3D::Object3D::parent This property holds the parent of the Object3D in a...
virtual QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node)
virtual void markAllDirty()
The QVector3D class represents a vector or vertex in 3D space.
QVector3D normalized() const noexcept
Returns the normalized unit vector form of this vector.
constexpr float y() const noexcept
Returns the y coordinate of this point.
constexpr float x() const noexcept
Returns the x coordinate of this point.
constexpr float z() const noexcept
Returns the z coordinate of this point.
QMatrix3x3 toRotationMatrix() const
void ensureDebugObjectName(T *node, QObject *src)
Combined button and popup list for selecting options.
QVector3D Q_QUICK3DUTILS_EXPORT transform(const QMatrix3x3 &m, const QVector3D &v)
QMatrix3x3 Q_QUICK3DUTILS_EXPORT getUpper3x3(const QMatrix4x4 &m)
void Q_QUICK3DUTILS_EXPORT normalize(QMatrix4x4 &m)
QVector3D Q_QUICK3DUTILS_EXPORT transform(const QMatrix4x4 &m, const QVector3D &v)
QVector3D Q_QUICK3DUTILS_EXPORT getScale(const QMatrix4x4 &m)
QVector3D Q_QUICK3DUTILS_EXPORT getPosition(const QMatrix4x4 &m)
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLdouble GLdouble GLdouble GLdouble q
GLenum GLenum GLenum GLenum GLenum scale
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT_X(cond, x, msg)
static Q_REQUIRED_RESULT constexpr bool isNodeType(Type type) Q_DECL_NOTHROW
static QMatrix4x4 calculateTransformMatrix(QVector3D position, QVector3D scale, QVector3D pivot, QQuaternion rotation)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent