renderer::Assembly* getOrCreateAssembly(const MayaObject* obj) { renderer::Assembly *ass = getAssembly(obj); if (ass == 0) ass = createAssembly(obj); return ass; }
void triggerAssembly(int row, int col, float inputStrength) { if (inputStrength > 1) { inputStrength = 1; } else if (inputStrength < 0) { inputStrength = 0; } getAssembly(row, col).setActivation(inputStrength); }
//------------------------------------------------------------------------------ // void SceneRepresentation::getExternalContent( MExternalContentInfoTable& table ) const { const AssemblyDefinition* const assembly = dynamic_cast< AssemblyDefinition* >( getAssembly() ); if ( assembly == 0 ) { return; } table.addUnresolvedEntry( "Data", assembly->getRepData( getName() ), assembly->name() ); }
renderer::AssemblyInstance* createAssemblyInstance(const MayaObject* obj) { MayaObject* assemblyObject = getAssemblyMayaObject(obj); boost::shared_ptr<AppleseedRenderer> appleRenderer = boost::static_pointer_cast<AppleseedRenderer>(getWorldPtr()->mRenderer); renderer::Assembly* ass = getAssembly(obj); renderer::Assembly* master = getMasterAssemblyFromProject(appleRenderer->getProjectPtr()); MString assemblyInstanceName = getAssemblyInstanceName(assemblyObject); foundation::auto_release_ptr<renderer::AssemblyInstance> assemblyInstance = renderer::AssemblyInstanceFactory::create(assemblyInstanceName.asChar(), renderer::ParamArray(), ass->get_name()); fillMatrices(obj, assemblyInstance->transform_sequence()); renderer::AssemblyInstance* assInst = assemblyInstance.get(); master->assembly_instances().insert(assemblyInstance); return assInst; }
//------------------------------------------------------------------------------ // void SceneRepresentation::setExternalContent( const MExternalContentLocationTable& table ) { AssemblyDefinition* const assembly = dynamic_cast< AssemblyDefinition* >( getAssembly() ); if ( assembly == 0 ) { return; } MString path; table.getLocation( "Data", path ); assembly->setRepData( getName(), path ); }
//------------------------------------------------------------------------------ // bool SceneRepresentation::activate() { AssemblyDefinition* const assembly = dynamic_cast< AssemblyDefinition* >( getAssembly() ); if ( assembly == 0 ) { return false; } MFnAssembly aFn(assembly->thisMObject()); bool fileIgnoreVersion = (MGlobal::optionVarIntValue("fileIgnoreVersion") == 1); MStatus status = aFn.importFile( assembly->getRepData(getName()) /*fileName*/, NULL /*type*/, true /*preserveReferences*/, NULL /*nameSpace*/, fileIgnoreVersion); return (status == MStatus::kSuccess); }
//------------------------------------------------------------------------------ // bool CacheRepresentation::activate() { AssemblyDefinition* const assembly = dynamic_cast< AssemblyDefinition* >( getAssembly() ); if ( assembly == 0 ) { return false; } // Create a gpuCache node, and parent it to our container. MDagModifier dagMod; MStatus status; MObject cacheObj = dagMod.createNode( MString("gpuCache"), assembly->thisMObject(), &status); if (status != MStatus::kSuccess) { int isLoaded = false; // Validate that the gpuCache plugin is loaded. MGlobal::executeCommand( "pluginInfo -query -loaded gpuCache", isLoaded ); if(!isLoaded){ MString errorString = MStringResource::getString(rCreateGPUCacheNodeError, status); MGlobal::displayError(errorString); } return false; } status = dagMod.doIt(); if (status != MStatus::kSuccess) { return false; } // Set the cache attribute to point to our Alembic file. MFnDependencyNode cache(cacheObj); MPlug fileName = cache.findPlug(MString("cacheFileName"), true, &status); if (status != MStatus::kSuccess) { return false; } fileName.setValue(assembly->getRepData(getName())); return status == MStatus::kSuccess; }
//------------------------------------------------------------------------------ // bool LocatorRepresentation::activate() { MPxAssembly* const assembly = getAssembly(); // Create a locator node, and parent it to our container. MDagModifier dagMod; MStatus status; dagMod.createNode(MString("locator"), assembly->thisMObject(), &status); if (status != MStatus::kSuccess) { return false; } status = dagMod.doIt(); if (status != MStatus::kSuccess) { return false; } // If we have annotation text, create an annotation shape, and a // transform for it. Parent the annotation transform to the assembly. if (fAnnotation.numChars() > 0) { MObject transformObj = dagMod.createNode( MString("transform"), assembly->thisMObject(), &status); if (status != MStatus::kSuccess) { return false; } MString annotationName = "annotation"; // the + "#" forces Maya to rename using integers for unique names MString transformName = annotationName + "#"; dagMod.renameNode(transformObj, transformName); status = dagMod.doIt(); if (status != MStatus::kSuccess) { return false; } MObject annotationObj = dagMod.createNode( MString("annotationShape"), transformObj, &status); if (status != MStatus::kSuccess) { return false; } status = dagMod.doIt(); if (status != MStatus::kSuccess) { return false; } // Set the annotation text. MFnDependencyNode annotation(annotationObj); MPlug text = annotation.findPlug(MString("text"), true, &status); if (status != MStatus::kSuccess) { return false; } text.setValue(fAnnotation); // Get rid of the arrow: our annotation doesn't need to be // offset from the locator for readability, since the locator // has no volume. Therefore, we don't need an arrow to point // from the annotation back to the object. MPlug displayArrow = annotation.findPlug(MString("displayArrow"), true, &status); if (status != MStatus::kSuccess) { return false; } displayArrow.setValue(false); } return status == MStatus::kSuccess; }
//------------------------------------------------------------------------------ // SceneRepresentation::SceneRepresentation( MPxAssembly* assembly, const MString& name ) : BaseClass(assembly, name) { assert( dynamic_cast< AssemblyDefinition* >( getAssembly() ) != 0 ); }