Beispiel #1
0
        private static void UpdateScriptPkgUI(RibbonHandler ribbon)
        {
            // determine which packages need to be loaded
            var curState = new HashSet <ScriptPkg>();

            if (AddinOptions.Current.LoadInstalledScriptPackages)
            {
                curState.UnionWith(CommandGrasshopperPackageManager.GetInstalledScriptPackages());
            }
            if (AddinOptions.Current.LoadUserScriptPackages)
            {
                curState.UnionWith(ScriptPkg.GetUserScriptPackages());
            }

            // create a combined set of both last and current states to iterate over
            var pkgs = new HashSet <ScriptPkg>(curState);

            pkgs.UnionWith(_lastState);

            // update the package ui
            foreach (var pkg in pkgs)
            {
                // skip existing packages
                if (curState.Contains(pkg) && _lastState.Contains(pkg))
                {
                    continue;
                }

                // create new packages
                else if (curState.Contains(pkg) && !_lastState.Contains(pkg))
                {
                    if (LinkedScripts.HasUI(pkg, ribbon))
                    {
                        TaskDialog.Show(
                            Addin.AddinName,
                            $"Package \"{pkg.Name}\" has been previously loaded in to the Revit UI." +
                            "Restart Revit for changes to take effect."
                            );
                    }
                    else
                    {
                        LinkedScripts.CreateUI(pkg, ribbon);
                    }
                }

                // or remove, removed packages
                else if (!curState.Contains(pkg) && _lastState.Contains(pkg))
                {
                    if (LinkedScripts.HasUI(pkg, ribbon))
                    {
                        LinkedScripts.RemoveUI(pkg, ribbon);
                    }
                }
            }

            _lastState = curState;
        }
Beispiel #2
0
        internal static Result Start(RibbonHandler ribbon)
        {
            var result = Result.Failed;
            var button = RestoreButton(CommandName);

            switch (result = Revit.OnStartup(Revit.ApplicationUI))
            {
            case Result.Succeeded:
                // Update Rhino button Tooltip
                button.ToolTip         = $"Restores previously visible Rhino windows on top of Revit window";
                button.LongDescription = $"Use CTRL key to open a Rhino model";
                // hide the button title
                if (button.GetAdwndRibbonButton() is Autodesk.Windows.RibbonButton adwndRadioButton)
                {
                    adwndRadioButton.ShowText = false;
                }

                var assemblies = AppDomain.CurrentDomain.GetAssemblies();

                // Register UI on Revit
                if (assemblies.Any(x => x.GetName().Name == "RhinoCommon"))
                {
                    rhinoPanel = ribbon.CreateAddinPanel(Addin.RhinoVersionInfo?.ProductName ?? "Rhinoceros");
                    CommandRhino.CreateUI(rhinoPanel);
                    CommandImport.CreateUI(rhinoPanel);
                    CommandToggleRhinoPreview.CreateUI(rhinoPanel);
                    CommandPython.CreateUI(rhinoPanel);
                    CommandRhinoOptions.CreateUI(rhinoPanel);
                }

                if (assemblies.Any(x => x.GetName().Name == "Grasshopper"))
                {
                    grasshopperPanel = ribbon.CreateAddinPanel("Grasshopper");
                    CommandGrasshopper.CreateUI(grasshopperPanel);
                    CommandGrasshopperPreview.CreateUI(grasshopperPanel);
                    CommandGrasshopperSolver.CreateUI(grasshopperPanel);
                    CommandGrasshopperRecompute.CreateUI(grasshopperPanel);
                    CommandGrasshopperBake.CreateUI(grasshopperPanel);
                    grasshopperPanel.AddSeparator();
                    CommandGrasshopperPlayer.CreateUI(grasshopperPanel);
                    grasshopperPanel.AddSlideOut();
                    CommandGrasshopperPackageManager.CreateUI(grasshopperPanel);
                    CommandGrasshopperFolders.CreateUI(grasshopperPanel);

                    // Script Packages UI
                    UpdateScriptPkgUI(ribbon);

                    // setup listeners, and in either case, update the packages ui
                    // listed for changes in installed packages
                    CommandGrasshopperPackageManager.CommandCompleted += CommandGrasshopperPackageManager_CommandCompleted;
                    // listen for changes to user-script paths in options
                    AddinOptions.ScriptLocationsChanged += AddinOptions_ScriptLocationsChanged;
                }

                UpdateRibbonCompact();

                result = Result.Succeeded;
                break;

            case Result.Cancelled:
                button.Enabled = false;

                if (Addin.CurrentStatus == Addin.Status.Unavailable)
                {
                    button.ToolTip = "Rhino.Inside failed to found a valid copy of Rhino 7 WIP installed.";
                }
                else if (Addin.CurrentStatus == Addin.Status.Obsolete)
                {
                    button.ToolTip = "Rhino.Inside has expired.";
                }
                else
                {
                    button.ToolTip = "Rhino.Inside load was cancelled.";
                }

                button.SetContextualHelp(new ContextualHelp(ContextualHelpType.Url, @"https://www.rhino3d.com/inside/revit"));
                break;

            case Result.Failed:
                button.Enabled = false;
                button.ToolTip = "Rhino.Inside failed to load.";
                return(Result.Failed);
            }
            return(result);
        }