public static List <Curve> getSmothMeshEdges(MFnMesh mayaMesh, bool createInMaya = false) { //MCommandResult result = new MCommandResult(); int ne = mayaMesh.numEdges; MFnTransform group = new MFnTransform(); List <Curve> curveObjects = new List <Curve>(ne); MStringArray resultStr = new MStringArray(); var fullName = mayaMesh.fullPathName.Split('|'); string transformName = fullName[fullName.Length - 2]; if (createInMaya) { for (int i = 0; i < ne; i++) { using (MCommandResult result = new MCommandResult()) { MGlobal.executeCommand( $"polyToCurve -name {transformName}Curves -form 2 -degree 3 -conformToSmoothMeshPreview 1 {transformName}.e[{i}]", result); result.getResult(resultStr); curveObjects.Add( DMCurve.CurveFromMfnNurbsCurveFromName(resultStr[0], MSpace.Space.kPostTransform.ToString())); } } } else { //Parallel.For(0, ne, i => { for (int i = 0; i < ne; i++) { using (MCommandResult result = new MCommandResult()) { MGlobal.executeCommand( $"polyToCurve -name deleteMe11232204332AA -form 2 -degree 3 -conformToSmoothMeshPreview 1 {transformName}.e[{i}]", result); result.getResult(resultStr); curveObjects.Add( DMCurve.CurveFromMfnNurbsCurveFromName(resultStr[0], MSpace.Space.kPostTransform.ToString())); try { MGlobal.deleteNode(DMInterop.getDependNode(resultStr[0])); } catch { MGlobal.displayWarning("getSmothMeshEdges: unable to delete temp object"); } } } // }); } return(curveObjects); }
public static List <List <Curve> > getSmothMeshEdgesPerFace(MFnMesh mayaMesh, bool createInMaya = false) { MCommandResult ptcResult = new MCommandResult(); MCommandResult teResult = new MCommandResult(); int numPoly = mayaMesh.numPolygons; List <List <Curve> > curveObjects = new List <List <Curve> >(numPoly); MStringArray ptcResultStr = new MStringArray(); MStringArray teResultStr = new MStringArray(); MStringArray teResultStrFlat = new MStringArray(); List <Curve> tempCurveArray = null; if (createInMaya) { } else { for (int i = 0; i < numPoly; i++) { MGlobal.executeCommand($"polyListComponentConversion -te {mayaMesh.name}.f[{i}]", teResult); teResult.getResult(teResultStr); MGlobal.clearSelectionList(); foreach (var ters in teResultStr) { MGlobal.selectByName(ters, MGlobal.ListAdjustment.kAddToList); } MGlobal.executeCommand($"ls -sl -fl", teResult); teResult.getResult(teResultStrFlat); tempCurveArray = new List <Curve>((int)teResultStrFlat.length); foreach (var e in teResultStrFlat) { MGlobal.executeCommand($"polyToCurve -name deleteMe11232204332AA -form 2 -degree 3 -conformToSmoothMeshPreview 1 {e}", ptcResult); ptcResult.getResult(ptcResultStr); tempCurveArray.Add(DMCurve.CurveFromMfnNurbsCurveFromName(ptcResultStr[0], MSpace.Space.kPostTransform.ToString())); try { MGlobal.deleteNode(DMInterop.getDependNode(ptcResultStr[0])); } catch { MGlobal.displayWarning("getSmothMeshEdges: unable to delete temp object"); } } curveObjects.Add(tempCurveArray); } } return(curveObjects); }
public static List <object> MelCommand(string MelCommand) { MStringArray stringResults = new MStringArray(); MIntArray intResults = new MIntArray(); MDoubleArray doubleResults = new MDoubleArray(); MVectorArray vectorResults = new MVectorArray(); List <object> results = new List <object>(); MCommandResult mcr = new MCommandResult(); MDagPath dag = new MDagPath(); try { MGlobal.executeCommand(MelCommand, mcr); // MGlobal.executeCommand(MelCommand, stringResults); } catch (MemberAccessException e) { MGlobal.displayWarning(e.Message); } switch (mcr.resultType) { case MCommandResult.Type.kStringArray: mcr.getResult(stringResults); results.AddRange(stringResults); break; case MCommandResult.Type.kIntArray: mcr.getResult(intResults); results.AddRange(intResults.Cast <object>()); break; case MCommandResult.Type.kDoubleArray: mcr.getResult(doubleResults); results.AddRange(doubleResults.Cast <object>()); break; case MCommandResult.Type.kVectorArray: mcr.getResult(vectorResults); results.AddRange(vectorResults.Cast <object>()); break; default: mcr.getResult(stringResults); results.AddRange(stringResults); break; } mcr.Dispose(); return(results); }
internal static bool GetBoolProperty(string property, bool defaultValue = false) { bool value = defaultValue; MCommandResult result = new MCommandResult(); MGlobal.executeCommand($"fileInfo -q \"{property}\"", result); if (result.resultType == MCommandResult.Type.kStringArray) { MStringArray stringArray = new MStringArray(); result.getResult(stringArray); value = string.Join("", stringArray.ToArray()).Equals(true.ToString()); } return(value); }
internal static bool GetUserPropString(string property, ref string value) { MCommandResult result = new MCommandResult(); MGlobal.executeCommand($"fileInfo -q \"{property}\"", result); if (result.resultType == MCommandResult.Type.kStringArray) { MStringArray stringArray = new MStringArray(); result.getResult(stringArray); value = string.Join("", stringArray.ToArray()); } else { value = null; } return(!string.IsNullOrEmpty(value)); }
private Dictionary <string, object> _ExportCustomUserAttributes(BaseObject baseObject) { var objectName = ""; if (baseObject.mFnTransform != null) { objectName = baseObject.mFnTransform.name; } else if (baseObject.babylonMaterial != null) { objectName = baseObject.babylonMaterial.name; } MStringArray customAttributeNamesMStringArray = new MStringArray(); Dictionary <string, object> customsAttributes = new Dictionary <string, object>(); MGlobal.executeCommand($"listAttr -ud {objectName}", customAttributeNamesMStringArray); var customAttributeNames = customAttributeNamesMStringArray.Where((attributeName) => { return(!_DisallowedCustomAttributeNames.Contains(attributeName)); }); foreach (string name in customAttributeNames) { MStringArray type = new MStringArray(); MGlobal.executeCommand($"getAttr -type {objectName}.{name}", type); switch (type[0]) { case "double": double floatValue = 0; MGlobal.executeCommand($"getAttr {objectName}.{name}", out floatValue); customsAttributes.Add(name, floatValue); break; case "bool": int boolBinValue = 0; MGlobal.executeCommand($"getAttr {objectName}.{name}", out boolBinValue); customsAttributes.Add(name, boolBinValue); break; case "long": int intValue = 0; MGlobal.executeCommand($"getAttr {objectName}.{name}", out intValue); customsAttributes.Add(name, intValue); break; case "string": string stringValue = ""; MGlobal.executeCommand($"getAttr {objectName}.{name}", out stringValue); customsAttributes.Add(name, stringValue); break; case "enum": int enumValue = 0; MGlobal.executeCommand($"getAttr {objectName}.{name}", out enumValue); customsAttributes.Add(name, enumValue); break; case "double3": MDoubleArray vectorValue = new MDoubleArray(); MGlobal.executeCommand($"getAttr {objectName}.{name}", vectorValue); customsAttributes.Add(name, vectorValue); break; default: MCommandResult attrValue = new MCommandResult(); MGlobal.executeCommand($"getAttr {objectName}.{name}", attrValue); customsAttributes.Add(name, attrValue); break; } } foreach (string name in customAttributeNames) { if (customsAttributes.ContainsKey(name + "X") && customsAttributes.ContainsKey(name + "Y") && customsAttributes.ContainsKey(name + "Z")) { customsAttributes.Remove(name + "X"); customsAttributes.Remove(name + "Y"); customsAttributes.Remove(name + "Z"); } } return(customsAttributes); }