16 #ifndef hifi_ApplicationMeshProvider_h
17 #define hifi_ApplicationMeshProvider_h
19 #include <graphics/Forward.h>
21 class ApplicationMeshProvider :
public scriptable::ModelProviderFactory {
23 virtual scriptable::ModelProviderPointer lookupModelProvider(
const QUuid& uuid)
override {
25 if (
auto nestable = DependencyManager::get<SpatialParentFinder>()->find(uuid, success).lock()) {
26 auto type = nestable->getNestableType();
27 #ifdef SCRIPTABLE_MESH_DEBUG
28 qCDebug(interfaceapp) <<
"ApplicationMeshProvider::lookupModelProvider" << uuid << SpatiallyNestable::nestableTypeToString(type);
31 case NestableType::Entity:
32 return getEntityModelProvider(
static_cast<EntityItemID>(uuid));
33 case NestableType::Avatar:
34 return getAvatarModelProvider(uuid);
41 scriptable::ModelProviderPointer getEntityModelProvider(
EntityItemID entityID) {
42 scriptable::ModelProviderPointer provider;
43 auto entityTreeRenderer = qApp->getEntities();
44 auto entityTree = entityTreeRenderer->getTree();
45 if (
auto entity = entityTree->findEntityByID(entityID)) {
46 if (
auto renderer = entityTreeRenderer->renderableForEntityId(entityID)) {
47 provider = std::dynamic_pointer_cast<scriptable::ModelProvider>(renderer);
48 provider->modelProviderType = NestableType::Entity;
50 qCWarning(interfaceapp) <<
"no renderer for entity ID" << entityID.toString();
56 scriptable::ModelProviderPointer getAvatarModelProvider(QUuid sessionUUID) {
57 scriptable::ModelProviderPointer provider;
58 auto avatarManager = DependencyManager::get<AvatarManager>();
59 if (
auto avatar = avatarManager->getAvatarBySessionID(sessionUUID)) {
60 provider = std::dynamic_pointer_cast<scriptable::ModelProvider>(avatar);
61 provider->modelProviderType = NestableType::Avatar;
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28