コード例 #1
0
        public override void doIt(MArgList argl)
        {
            SubscribeAssemblyResolvingEvent();


            if (!String.IsNullOrEmpty(wpfTitle))
            {
                // Check the existence of the window
                int wndExist = int.Parse(MGlobal.executeCommandStringResult($@"format -stringArg `control -q -ex ""{wpfTitle}""` ""^1s"""));
                if (wndExist > 0)
                {
                    MGlobal.executeCommand($@"catch (`workspaceControl -e -visible true ""{hostTitle}""`);");
                    return;
                }
            }

            if (dynStartUp != null)
            {
                if (dynStartUp.DynView != null)
                {
                    if (dynStartUp.DynView.IsVisible)
                    {
                        MGlobal.displayWarning("Dynamo is already open");
                        return;
                    }
                    else
                    {
                        dynWnd.Show();
                    }
                }
            }
            else
            {
                newDmStartup();
                dynWnd = dynStartUp.DynView;
                // Create the window to dock
                dynWnd.Show();
                // Extract the window handle of the window we want to dock
                IntPtr mWindowHandle = new System.Windows.Interop.WindowInteropHelper(dynWnd).Handle;

                int width  = (int)dynWnd.Width;
                int height = (int)dynWnd.Height;

                var title = dynWnd.Title;
                wpfTitle  = title + " Internal";
                hostTitle = title;

                dynWnd.Title = wpfTitle;

                mayaWnd = new MForeignWindowWrapper(mWindowHandle, true);


                uint flagIdx = argl.flagIndex(flagName);
                if (flagIdx == MArgList.kInvalidArgIndex)
                {
                    // Create a workspace-control to wrap the native window wrapper, and use it as the parent of this WPF window
                    CreateWorkspaceControl(wpfTitle, hostTitle, width, height, false);
                }
            }
        }
コード例 #2
0
        public static void SendGeometry(List <object> Geometry, List <string> Name)
        {
            int    i          = 0;
            string paddedName = "";

            foreach (var geom in Geometry)
            {
                if (Geometry.Count > 1 && Geometry.Count == Name.Count)
                {
                    paddedName = Name[i];
                }
                else if (Geometry.Count == 1 && Name.Count == 1)
                {
                    paddedName = Name[0];
                }
                else
                {
                    int pad = Geometry.Count.ToString().Length;
                    paddedName = Name[0] + "_" + i.ToString().PadLeft(pad);
                }

                try
                {
                    DMInterop.processGeometry(geom, paddedName, "");
                }
                catch (Exception e) { MGlobal.displayWarning(e.Message); }

                i++;
            }
        }
コード例 #3
0
        internal void GetNewGeom()
        {
            // VMDataBridge.DataBridge.Instance.UnregisterCallback(GUID.ToString());
            if (firstRun)
            {
                firstRun = false;
            }
            else
            {
                if (SelectedItems != null)
                {
                    foreach (var itm in SelectedItems.Values)
                    {
                        itm.Dispose();
                    }
                }
            }

            MSelectionList selectionList = new MSelectionList();

            MGlobal.getActiveSelectionList(selectionList, true);

            if (selectionList.isEmpty)
            {
                if (selectionList.isEmpty)
                {
                    SelectedItems = null;
                    OnNodeModified(true);
                    return;
                }
            }

            var TransObjectList = selectionList.DagPaths(MFn.Type.kTransform).ToList();
            var DagObjectList   = selectionList.DagPaths(MFn.Type.kMesh).ToList();

            SelectedItems       = new Dictionary <string, DMMesh>(DagObjectList.Count);
            m_SelectedItemNames = new List <string>(DagObjectList.Count);

            foreach (var dag in TransObjectList)
            {
                if (dag.hasFn(MFn.Type.kMesh))
                {
                    var itm = new DMMesh(dag, space);
                    itm.Renamed += Itm_Renamed;
                    itm.Deleted += MObjOnDeleted;
                    SelectedItems.Add(itm.dagName, itm);
                    m_SelectedItemNames.Add(itm.dagName);
                    // ct++;
                }
                else
                {
                    MGlobal.displayWarning($"Selected item is not a kMesh, it is a {dag.apiType}");
                }
            }

            m_SelectedItemNamesString = ConvertStringListToString(m_SelectedItemNames);

            OnNodeModified(true);
        }
コード例 #4
0
        private void View_Closed(object sender, EventArgs e)
        {
            //DynamoView dv = (DynamoView)sender;
            if (!dynStartUp.DynViewModel.PerformShutdownSequence(new DynamoViewModel.ShutdownParams(false, true, true)))
            {
                MGlobal.displayWarning("Could not shut down");
            }

            dynStartUp.DynView.Close();
            dynStartUp = null;
        }
コード例 #5
0
ファイル: DynamayaStartup.cs プロジェクト: cerver/DynaMayaV2
        //public void SetupDynamo(out DynamoViewModel viewModel)
        public void SetupDynamo( )
        {
            SubscribeAssemblyResolvingEvent();
            UpdateSystemPathForProcess();

            PreloadDynamoCoreDlls();
            var corePath         = DynamoCorePath;
            var dynamoMayaExeLoc = Assembly.GetExecutingAssembly().Location;
            var dynamoMayaRoot   = Path.GetDirectoryName(dynamoMayaExeLoc);


            var userDataFolder = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                "Dynamo", "Dynamo Core");
            var commonDataFolder = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
                "Dynamo", "Dynamo Core");

            var geometryFactoryPath = string.Empty;
            var preloaderLocation   = string.Empty;

            var loadedLibGVersion = PreloadAsmFromMayaATF();

            try
            {
                if (isDynModelNull)
                {
                    DynModel = DynamoModel.Start(
                        new DynamoModel.DefaultStartConfiguration
                    {
                        DynamoCorePath      = corePath,
                        DynamoHostPath      = corePath,
                        GeometryFactoryPath = GetGeometryFactoryPath(corePath, loadedLibGVersion),
                        PathResolver        = new PathResolver(userDataFolder, commonDataFolder),
                    });
                    isDynModelNull = false;
                }
                if (isDynViewModelNull)
                {
                    DynViewModel = DynamoViewModel.Start(
                        new DynamoViewModel.StartConfiguration
                    {
                        // CommandFilePath = commandFilePath,
                        DynamoModel = DynModel
                    });
                    isDynViewModelNull = false;
                }
            }
            catch (Exception e)
            {
                MGlobal.displayWarning(e.Message);
            }
        }
コード例 #6
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);
        }
コード例 #7
0
 public void eventCallback(object sender, MBasicFunctionArgs args)
 {
     if (data >= 0 && data < (int)eventTestCmd.eventNames.Length)
     {
         MGlobal.displayInfo("event " +
                             eventTestCmd.eventNames[data] +
                             " occurred\n");
     }
     else
     {
         MGlobal.displayWarning("BOGUS client data in eventCB!\n");
     }
 }
コード例 #8
0
 internal static string ConvertStringListToString(List <string> stringList)
 {
     if (stringList.Count > 0)
     {
         string listAsString = "";
         for (int i = 0; i < stringList.Count - 1; i++)
         {
             listAsString += stringList[i] + ",";
         }
         listAsString += stringList[stringList.Count - 1];
         return(listAsString);
     }
     MGlobal.displayWarning("selected items are invalid");
     return("");
 }
コード例 #9
0
        public static void SetRobotJointsRotations(double[] rotationVals, string[] jointNames = null)
        {
            string[] jName;

            if (jointNames != null && jointNames.Length == 6)
            {
                jName = jointNames;
            }
            else
            {
                jName = new string[6] {
                    "J1", "J2", "J3", "J4", "J5", "J6"
                };
            }

            if (rotationVals.Length != 6)
            {
                new WarningException("The roation values must contain exactly 6 values, one for each axis");
            }

            /*
             * string melCmd =
             *  string.Format(
             *      "setAttr J1.rx  {0}; setAttr J2.rz {1}; setAttr J3.rz {2}; setAttr J4.rx {3}; setAttr J5.rz {4}; setAttr J6.rx {5}; ",
             *      rotationVals[0], -rotationVals[1], -rotationVals[2], rotationVals[3], rotationVals[4], rotationVals[5]+90);
             *
             * MGlobal.executeCommand(melCmd);
             */
            try
            {
                MPlug j1Plug = DMInterop.getPlug(jName[0], "rx");
                j1Plug.setDouble(rotationVals[0] * 0.0174533);
                MPlug j2Plug = DMInterop.getPlug(jName[1], "rz");
                j2Plug.setDouble(-rotationVals[1] * 0.0174533);
                MPlug j3Plug = DMInterop.getPlug(jName[2], "rz");
                j3Plug.setDouble(-rotationVals[2] * 0.0174533);
                MPlug j4Plug = DMInterop.getPlug(jName[3], "rx");
                j4Plug.setDouble(rotationVals[3] * 0.0174533);
                MPlug j5Plug = DMInterop.getPlug(jName[4], "rz");
                j5Plug.setDouble(-rotationVals[4] * 0.0174533);
                MPlug j6Plug = DMInterop.getPlug(jName[5], "rx");
                j6Plug.setDouble(rotationVals[5] * 0.0174533);
            }
            catch (Exception e)
            {
                MGlobal.displayWarning(e.Message);
            }
        }
コード例 #10
0
ファイル: moveTool.cs プロジェクト: venerin/Maya-devkit
        public override void doPress(MEvent eventArg)
        {
            base.doPress(eventArg);

            // If we are not in selecting mode (i.e. an object has been selected)
            // then set up for the translation.
            if (!_isSelecting())
            {
                eventArg.getPosition(ref startPos_x, ref startPos_y);

                view = M3dView.active3dView;

                MDagPath  camera   = view.Camera;
                MFnCamera fnCamera = new MFnCamera(camera);
                MVector   upDir    = fnCamera.upDirection(MSpace.Space.kWorld);
                MVector   rightDir = fnCamera.rightDirection(MSpace.Space.kWorld);

                // Determine the camera used in the current view
                if (fnCamera.isOrtho)
                {
                    if (upDir.isEquivalent(MVector.zNegAxis, 1e-3))
                    {
                        currWin = 0;                         // TOP
                    }
                    else if (rightDir.isEquivalent(MVector.xAxis, 1e-3))
                    {
                        currWin = 1;                         // FRONT
                    }
                    else
                    {
                        currWin = 2;                         // SIDE
                    }
                }
                else
                {
                    currWin = 3;                     // PERSP
                    MGlobal.displayWarning("moveTool only works in top, front and side views");
                }

                // Create an instance of the move tool command.
                cmd = _newToolCommand() as moveCmd;
                cmd.setVector(0.0, 0.0, 0.0);
            }
        }
コード例 #11
0
        public static void SetPlugValue(string objectName, string plugName, object plugValue)
        {
            MPlug plug;

            try
            {
                plug = DMInterop.getPlug(objectName, plugName);
            }
            catch (Exception e)
            {
                MGlobal.displayWarning($"plug not found: {e.Message}");
                return;
            }


            if (plugValue is double)
            {
                plug.setDouble(Convert.ToDouble(plugValue));
            }
            else if (plugValue is int)
            {
                plug.setInt(Convert.ToInt32(plugValue));
            }
            else if (plugValue is Vector)
            {
                Vector vec     = (Vector)plugValue;
                var    mVector = new MVector();
                if (MGlobal.isYAxisUp)
                {
                    mVector.x = vec.X;
                    mVector.y = vec.Z;
                    mVector.z = -vec.Y;
                }
                else
                {
                    mVector.x = vec.X;
                    mVector.y = vec.Y;
                    mVector.z = vec.Z;
                }
            }
        }
コード例 #12
0
        public static void ToMaya(Curve CurveToSend, string name)
        {
            NurbsCurve ctsAsNurb = null;

            if (CurveToSend is Rectangle)
            {
                Rectangle rec = (Rectangle)CurveToSend;
                ctsAsNurb = NurbsCurve.ByControlPoints(rec.Points, 1, true);
            }
            else if (CurveToSend is Polygon)
            {
                Polygon rec = (Polygon)CurveToSend;
                ctsAsNurb = NurbsCurve.ByControlPoints(rec.Points, 1, true);
            }
            else
            {
                ctsAsNurb = CurveToSend.ToNurbsCurve();
            }

            var ncd = new MFnNurbsCurveData();


            MFnNurbsCurveForm mfnform;

            if (ctsAsNurb.IsClosed)
            {
                mfnform = MFnNurbsCurveForm.kClosed;
            }
            else
            {
                mfnform = MFnNurbsCurveForm.kOpen;
            }

            var mayaCurve = new MFnNurbsCurve();

            var vtxs = new MPointArray();

            var cvs = ctsAsNurb.ControlPoints();
            var yUp = MGlobal.isYAxisUp;

            if (yUp)
            {
                foreach (var cv in cvs)
                {
                    var pt = new MPoint(cv.X, cv.Z, -cv.Y);
                    vtxs.Add(pt);
                    //pt.Dispose();
                }
            }
            else
            {
                foreach (var cv in cvs)
                {
                    var pt = new MPoint(cv.X, cv.Y, cv.Z);
                    vtxs.Add(pt);
                    //pt.Dispose();
                }
            }

            var knots    = ctsAsNurb.Knots();
            var crvKnots = new MDoubleArray(knots);

            crvKnots.RemoveAt(0);
            crvKnots.RemoveAt(crvKnots.Count - 1);

            MDagPath node       = null;
            var      nodeExists = false;

            Task checkNode  = null;
            Task deleteNode = null;

            try
            {
                node       = DMInterop.getDagNode(name);
                nodeExists = true;
            }
            catch (Exception)
            {
                nodeExists = false;
            }

            MObject obj;

            if (nodeExists)
            {
                MDagPath nodeShape = node;
                nodeShape.extendToShape();
                var modifyCrv = new MDGModifier();
                mayaCurve = new MFnNurbsCurve(nodeShape);

                try
                {
                    MFnNurbsCurveData dataCreator  = new MFnNurbsCurveData();
                    MObject           outCurveData = dataCreator.create();
                    var    span   = (vtxs.Count - ctsAsNurb.Degree);
                    string rblCmd = $"rebuildCurve -rt 0 -s {span} -d {ctsAsNurb.Degree} {name}";

                    if (mayaCurve.numCVs != vtxs.Count || mayaCurve.degree != ctsAsNurb.Degree)
                    {
                        MGlobal.executeCommand(rblCmd);
                    }

                    mayaCurve.setCVs(vtxs);
                    mayaCurve.setKnots(crvKnots, 0, crvKnots.length - 1);
                    mayaCurve.updateCurve();
                    modifyCrv.doIt();

                    if (CurveToSend.GetType() == typeof(Circle))
                    {
                        span   = 8;
                        rblCmd = $"rebuildCurve -rt 0 -s {span} {name}";
                        MGlobal.executeCommand(rblCmd);
                    }
                }
                catch (Exception e)
                {
                    MGlobal.displayWarning(e.Message);
                }
            }

            else
            {
                obj = mayaCurve.create(vtxs, crvKnots, (uint)ctsAsNurb.Degree, (MFnNurbsCurve.Form)mfnform,
                                       false, ctsAsNurb.IsRational);
                MFnDependencyNode nodeFn = new MFnDagNode(obj);
                nodeFn.setName(name);
            }
        }
コード例 #13
0
        public static void updateManipulators(RotateManipContext ctx)
        {
            if (ctx == null)
            {
                return;
            }

            ctx.deleteManipulators();

            // Add the rotate manipulator to each selected object.  This produces
            // behavior different from the default rotate manipulator behavior.  Here,
            // a distinct rotate manipulator is attached to every object.
            //
            try
            {
                MSelectionList list = MGlobal.activeSelectionList;

                MItSelectionList iter = new MItSelectionList(list, MFn.Type.kInvalid);
                for (; !iter.isDone; iter.next())
                {
                    // Make sure the selection list item is a depend node and has the
                    // required plugs before manipulating it.
                    //
                    MObject dependNode = new MObject();
                    iter.getDependNode(dependNode);
                    if (dependNode.isNull || !dependNode.hasFn(MFn.Type.kDependencyNode))
                    {
                        MGlobal.displayWarning("Object in selection list is not a depend node.");
                        continue;
                    }

                    MFnDependencyNode dependNodeFn = new MFnDependencyNode(dependNode);
                    try
                    {
                        /* MPlug rPlug = */
                        dependNodeFn.findPlug("rotate");
                    }
                    catch (System.Exception)
                    {
                        MGlobal.displayWarning("Object cannot be manipulated: " + dependNodeFn.name);
                        continue;
                    }

                    // Add manipulator to the selected object
                    //
                    MObject manipObject = new MObject();

                    exampleRotateManip manipulator;
                    try
                    {
                        manipulator = exampleRotateManip.newManipulator("exampleRotateManipCSharp", manipObject) as exampleRotateManip;

                        // Add the manipulator
                        //
                        ctx.addManipulator(manipObject);

                        // Connect the manipulator to the object in the selection list.
                        //
                        try
                        {
                            manipulator.connectToDependNode(dependNode);
                        }
                        catch (System.Exception)
                        {
                            MGlobal.displayWarning("Error connecting manipulator to object: " + dependNodeFn.name);
                        }
                    }
                    catch (System.Exception)
                    {
                    }
                }
            }
            catch (System.Exception)
            {
            }
        }
コード例 #14
0
        void AddOneCommand(CommandData cd)
        {
            //Debug.Log("try add:" + cd.DebugMessage());
            string realSubMenuName = "";

            if (cd.subMenuName == null)
            {
                realSubMenuName = totalMenuName;
            }
            else
            {
                string[] labelLayers = cd.subMenuName.Split('/');
                string[] menuLayers  = new string[labelLayers.Length];
                menuLayers[0] = labelLayers[0];
                for (int i = 1; i < menuLayers.Length; i++)
                {
                    menuLayers[i] = labelLayers[i] + menuLayers[i - 1];
                }

                string lastRealName = totalMenuName;
                for (int i = 0; i < menuLayers.Length; i++)
                {
                    if (subMenuDic.ContainsKey(menuLayers[i]))
                    {
                        lastRealName = subMenuDic[menuLayers[i]];
                        continue;
                    }
                    else
                    {
                        lastRealName = AddSubMenu(lastRealName, labelLayers[i], true);
                        subMenuDic.Add(menuLayers[i], lastRealName);
                    }
                }

                realSubMenuName = lastRealName;
                //if (subMenuDic.ContainsKey(cd.subMenuName))
                //{
                //    realSubMenuName = subMenuDic[cd.subMenuName];
                //}
                //else
                //{
                //    realSubMenuName = AddSubMenu(totalMenuName, cd.subMenuName, true);
                //    subMenuDic.Add(cd.subMenuName, realSubMenuName);
                //}
            }

            if (cd.isDivider)
            {
                AddMenuItemDivider(cd.labelStr, realSubMenuName);
                return;
            }



            Dictionary <string, Action> paramActionDic;

            if (commandDic.ContainsKey(cd.cmdTypeStr))
            {
                paramActionDic = commandDic[cd.cmdTypeStr];
            }
            else
            {
                paramActionDic = new Dictionary <string, Action>();
                commandDic.Add(cd.cmdTypeStr, paramActionDic);
            }
            if (paramActionDic.ContainsKey(cd.paramStr))
            {
                MGlobal.displayWarning("Repeated Command Param:" + cd.paramStr);
                while (paramActionDic.ContainsKey(cd.paramStr))
                {
                    cd.paramStr += "_r";
                }
                MGlobal.displayWarning("Rename to:" + cd.paramStr);
            }
            paramActionDic.Add(cd.paramStr, cd.action);

            AddMenuItem(cd.labelStr, realSubMenuName, "InazumaCommand", cd.cmdTypeStr + " " + cd.paramStr);
        }