void ShaderFXShaderExporter::exportSamplerAndSurface(const MFnDependencyNode & node, const MObject & attr) { MStatus status; if (!attr.hasFn(MFn::kTypedAttribute)) return; MFnTypedAttribute fnTypedAttr(attr, &status); if (!status) return; MFnData::Type type = fnTypedAttr.attrType(&status); if (!status) return; if (type != MFnData::kString) return; MPlug plug = node.findPlug(attr, &status); MString value; status = plug.getValue(value); if (!status) return; if (value.length() == 0) return; bool isUsedAsFilename = MFnAttribute(attr).isUsedAsFilename(&status); if (!status) return; // Filename are treated as texture filenames. if (!isUsedAsFilename) return; exportSamplerAndSurfaceInner(value); }
void AttributeParser::parseTypedAttribute(MFnDependencyNode & node, MObject & attr) { MStatus status; MFnTypedAttribute fnTypedAttr(attr, &status); if (!status) return; MFnData::Type type = fnTypedAttr.attrType(&status); if (!status) return; switch (type) { //! Invalid value case MFnData::kInvalid: break; //! Numeric, use MFnNumericData extract the node data. case MFnData::kNumeric: parseNumericData(node, attr); break; //! Plugin Blind Data, use MFnPluginData to extract the node data. case MFnData::kPlugin: // TODO break; //! Plugin Geometry, use MFnGeometryData to extract the node data. case MFnData::kPluginGeometry: // TODO break; //! String, use MFnStringData to extract the node data. case MFnData::kString: parseStringData(node, attr); break; //! Matrix, use MFnMatrixData to extract the node data. case MFnData::kMatrix: // TODO break; //! String Array, use MFnStringArrayData to extract the node data. case MFnData::kStringArray: // TODO break; //! Double Array, use MFnDoubleArrayData to extract the node data. case MFnData::kDoubleArray: // TODO break; #if MAYA_API_VERSION >= 201400 //! Float Array, use MFnFloatArrayData to extract the node data. case MFnData::kFloatArray: // TODO break; #endif //! Int Array, use MFnIntArrayData to extract the node data. case MFnData::kIntArray: // TODO break; //! Point Array, use MFnPointArrayData to extract the node data. case MFnData::kPointArray: // TODO break; //! Vector Array, use MFnVectorArrayData to extract the node data. case MFnData::kVectorArray: // TODO break; //! Component List, use MFnComponentListData to extract the node data. case MFnData::kComponentList: // TODO break; //! Mesh, use MFnMeshData to extract the node data. case MFnData::kMesh: parseMeshData(node, attr); break; //! Lattice, use MFnLatticeData to extract the node data. case MFnData::kLattice: // TODO break; //! Nurbs Curve, use MFnNurbsCurveData to extract the node data. case MFnData::kNurbsCurve: // TODO break; //! Nurbs Surface, use MFnNurbsSurfaceData to extract the node data. case MFnData::kNurbsSurface: // TODO break; //! Sphere, use MFnSphereData to extract the node data. case MFnData::kSphere: // TODO break; //! ArrayAttrs, use MFnArrayAttrsData to extract the node data. case MFnData::kDynArrayAttrs: // TODO break; /*! SweptGeometry, use MFnDynSweptGeometryData to extract the node data. This data node is in OpenMayaFX which must be linked to. */ case MFnData::kDynSweptGeometry: // TODO break; //! Subdivision Surface, use MFnSubdData to extract the node data. case MFnData::kSubdSurface: // TODO break; //! nObject data, use MFnNObjectData to extract node data case MFnData::kNObject: // TODO break; //! nId data, use MFnNIdData to extract node data case MFnData::kNId: // TODO break; #if MAYA_API_VERSION >= 201200 //! Typically used when the data can be one of several types. case MFnData::kAny: // TODO break; #endif default: break; } }