void ModelPreviewWorker::setModel(const std::string& modelName) { if (mModel) { if (mModel->getDefinition()->getName() == modelName) { return; } else { //Reset the model mount to start with. delete mModelMount; mModelMount = 0; mWorld.getSceneManager().destroyMovableObject(mModel); } } mModel = Model::Model::createModel(mWorld.getSceneManager(), modelName); mModel->Reloaded.connect(sigc::mem_fun(*this, &ModelPreviewWorker::model_Reloaded)); //if the model definition isn't valid, use a placeholder if (!mModel->getDefinition()->isValid()) { S_LOG_FAILURE( "Could not find " << modelName << ", using placeholder."); //add a placeholder model Model::ModelDefnPtr modelDef = mModel->getDefinition(); modelDef->createSubModelDefinition("3d_objects/primitives/models/box.mesh")->createPartDefinition("main")->setShow(true); modelDef->setValid(true); modelDef->reloadAllInstances(); } mModelMount = new Model::ModelMount(*mModel, new SceneNodeProvider(*mEntityNode, mModel)); initFromModel(); // Setting inital position and orientation if (mPos.isValid()) { mEntityNode->setPosition(Convert::toOgre(mPos)); } mEntityNode->setOrientation(Convert::toOgre(mOrientation)); }
void EntityCreatorCreationInstance::setModel(const std::string& modelName) { if (mModel) { if (mModel->getDefinition()->getName() == modelName) { return; } else { //Reset the model mount to start with. delete mModelMount; mModelMount = 0; delete mModel; } } auto modelDef = Model::ModelDefinitionManager::getSingleton().getByName(modelName); if (!modelDef) { modelDef = Model::ModelDefinitionManager::getSingleton().getByName("placeholder"); } mModel = new Model::Model(mWorld.getSceneManager(), modelDef, modelName); mModel->Reloaded.connect(sigc::mem_fun(*this, &EntityCreatorCreationInstance::model_Reloaded)); mModel->load(); // //if the model definition isn't valid, use a placeholder // if (!mModel->getDefinition()->isValid()) { // S_LOG_FAILURE("Could not find " << modelName << ", using placeholder."); // //add a placeholder model // Model::ModelDefinitionPtr modelDef = mModel->getDefinition(); // modelDef->createSubModelDefinition("common/primitives/model/box.mesh")->createPartDefinition("main")->setShow(true); // modelDef->setValid(true); // modelDef->reloadAllInstances(); // } Ogre::SceneNode* node = mEntityNode->createChildSceneNode(OgreInfo::createUniqueResourceName(mRecipe.getName())); mModelMount = new Model::ModelMount(*mModel, new SceneNodeProvider(node, mEntityNode)); mModelMount->reset(); initFromModel(); // Setting inital position and orientation if (mPos.isValid()) { mEntityNode->setPosition(Convert::toOgre(mPos)); } mEntityNode->setOrientation(Convert::toOgre(mInitialOrientation)); }
void ModelPreviewWorker::model_Reloaded() { initFromModel(); }
void EntityCreatorCreationInstance::model_Reloaded() { initFromModel(); }