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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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);
        }