12 #include "ScriptableModel.h"
14 #include <glm/glm.hpp>
15 #include <graphics/BufferViewHelpers.h>
16 #include <DependencyManager.h>
20 #include <QtCore/QList>
21 #include <QtCore/QObject>
22 #include <QtCore/QUuid>
23 #include <QtCore/QVariant>
24 #include <QtCore/QVector>
26 #include "GraphicsScriptingUtil.h"
28 #include <graphics/Geometry.h>
29 #include <Scriptable.h>
33 namespace scriptable {
71 class ScriptableMesh :
public ScriptableMeshBase,
Scriptable {
74 Q_PROPERTY(glm::uint32 numParts READ getNumParts)
75 Q_PROPERTY(glm::uint32 numAttributes READ getNumAttributes)
76 Q_PROPERTY(glm::uint32 numVertices READ getNumVertices)
77 Q_PROPERTY(glm::uint32 numIndices READ getNumIndices)
78 Q_PROPERTY(QVector<QString> attributeNames READ getAttributeNames)
79 Q_PROPERTY(QVector<scriptable::ScriptableMeshPartPointer> parts READ getMeshParts)
80 Q_PROPERTY(
bool valid READ isValid)
81 Q_PROPERTY(
bool strong READ hasValidStrongMesh)
82 Q_PROPERTY(QVariantMap extents READ getMeshExtents)
83 Q_PROPERTY(QVariantMap bufferFormats READ getBufferFormats)
84 QVariantMap getBufferFormats()
const;
86 operator const ScriptableMeshBase*()
const {
return (qobject_cast<const scriptable::ScriptableMeshBase*>(
this)); }
88 ScriptableMesh(WeakModelProviderPointer provider, ScriptableModelBasePointer model, MeshPointer mesh, QObject* parent)
89 : ScriptableMeshBase(provider, model, mesh, parent),
Scriptable() { strongMesh = mesh; }
90 ScriptableMesh(MeshPointer mesh, QObject* parent)
91 : ScriptableMeshBase(WeakModelProviderPointer(), nullptr, mesh, parent),
Scriptable() { strongMesh = mesh; }
92 ScriptableMesh(
const ScriptableMeshBase& other);
93 ScriptableMesh(
const ScriptableMesh& other) : ScriptableMeshBase(other),
Scriptable() {};
94 virtual ~ScriptableMesh();
96 const scriptable::MeshPointer getOwnedMeshPointer()
const {
return strongMesh; }
97 scriptable::ScriptableMeshPointer getSelf()
const {
return const_cast<scriptable::ScriptableMesh*
>(
this); }
98 bool isValid()
const {
return !weakMesh.expired(); }
99 bool hasValidStrongMesh()
const {
return (
bool)strongMesh; }
100 glm::uint32 getNumParts()
const;
101 glm::uint32 getNumVertices()
const;
102 glm::uint32 getNumAttributes()
const;
103 glm::uint32 getNumIndices()
const;
104 QVector<QString> getAttributeNames()
const;
105 QVector<scriptable::ScriptableMeshPartPointer> getMeshParts()
const;
106 QVariantMap getMeshExtents()
const;
108 operator bool()
const {
return !weakMesh.expired(); }
109 int getSlotNumber(
const QString& attributeName)
const;
119 const scriptable::ScriptableModelPointer getParentModel()
const {
return qobject_cast<scriptable::ScriptableModel*>(model); }
126 QVector<glm::uint32> getIndices()
const;
136 QVector<glm::uint32> findNearbyVertexIndices(
const glm::vec3& origin,
float epsilon = 1e-6)
const;
146 glm::uint32 addAttribute(
const QString& attributeName,
const QVariant& defaultValue = QVariant());
157 glm::uint32 fillAttribute(
const QString& attributeName,
const QVariant& value);
166 bool removeAttribute(
const QString& attributeName);
175 QVariantList queryVertexAttributes(QVariant selector)
const;
184 QVariantMap getVertexAttributes(glm::uint32 vertexIndex)
const;
198 bool setVertexAttributes(glm::uint32 vertexIndex,
const QVariantMap& attributeValues);
209 QVariant getVertexProperty(glm::uint32 vertexIndex,
const QString& attributeName)
const;
221 bool setVertexProperty(glm::uint32 vertexIndex,
const QString& attributeName,
const QVariant& value);
228 scriptable::ScriptableMeshPointer cloneMesh();
239 glm::uint32 updateVertexAttributes(
const ScriptValue& callback);
247 glm::uint32 forEachVertex(
const ScriptValue& callback);
259 bool isValidIndex(glm::uint32 vertexIndex,
const QString& attributeName = QString())
const;
264 Q_DECLARE_METATYPE(scriptable::ScriptableMeshPointer)
265 Q_DECLARE_METATYPE(QVector<scriptable::ScriptableMeshPointer>)
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40
[ScriptInterface] Provides an engine-independent interface for QScriptable
Definition: Scriptable.h:29