コード例 #1
0
 private void SetupMainDirListener()
 {
     if (Directory.Exists(GH_ComponentServer.GHA_AppDataDirectory))
     {
         var watcher = GH_FileWatcher.CreateDirectoryWatcher(GH_ComponentServer.GHA_AppDataDirectory, "*.ghpy", GH_FileWatcherEvents.Created,
                                                             (sender, filePath, change) =>
         {
             try
             {
                 if (change == WatcherChangeTypes.Created)
                 {
                     if (LoadOneAddon(_gha_environment, filePath))
                     {
                         GH_ComponentServer.UpdateRibbonUI();
                     }
                 }
             }
             catch (Exception ex)
             {
                 Global_Proc.ASSERT(Guid.Empty, "GhPython last exception boundary", ex);
             }
         });
         watcher.Active = true;
     }
 }
コード例 #2
0
        static bool LoadGrasshopperComponents()
        {
            var LoadGHAProc = Instances.ComponentServer.GetType().GetMethod("LoadGHA", BindingFlags.NonPublic | BindingFlags.Instance);

            if (LoadGHAProc == null)
            {
                return(false);
            }

            var bCoff = Instances.Settings.GetValue("Assemblies:COFF", true);

            Instances.Settings.SetValue("Assemblies:COFF", false);

            var rc = (bool)LoadGHAProc.Invoke
                     (
                Instances.ComponentServer,
                new object[] { new GH_ExternalFile(Assembly.GetExecutingAssembly().Location), false }
                     );

            Instances.Settings.SetValue("Assemblies:COFF", bCoff);

            if (rc)
            {
                GH_ComponentServer.UpdateRibbonUI();
            }

            return(rc);
        }
コード例 #3
0
        bool LoadRhinoInsideNXGHComponent()
        {
            {
                var bCoff = Instances.Settings.GetValue("Assemblies:COFF", false);
                try
                {
                    Instances.Settings.SetValue("Assemblies:COFF", false);

                    var location = Path.Combine(RhinoInsideDirectory, "Application", "RhinoInside.NX.GH.dll");
                    if (!LoadGHA(location))
                    {
                        if (!File.Exists(location))
                        {
                            throw new FileNotFoundException("File Not Found.", location);
                        }

                        if (CentralSettings.IsLoadProtected(location))
                        {
                            throw new InvalidOperationException($"Assembly '{location}' is load protected.");
                        }

                        return(false);
                    }
                }
                finally
                {
                    Instances.Settings.SetValue("Assemblies:COFF", bCoff);
                }
            }
            GH_ComponentServer.UpdateRibbonUI();
            return(true);
        }
コード例 #4
0
        static bool LoadGrasshopperComponents()
        {
            var LoadGHAProc = Instances.ComponentServer.GetType().GetMethod("LoadGHA", BindingFlags.NonPublic | BindingFlags.Instance);

            if (LoadGHAProc == null)
            {
                return(false);
            }

            var bCoff = Instances.Settings.GetValue("Assemblies:COFF", true);

            Instances.Settings.SetValue("Assemblies:COFF", false);

            var rc = (bool)LoadGHAProc.Invoke
                     (
                Instances.ComponentServer,
                new object[] { new GH_ExternalFile(Assembly.GetExecutingAssembly().Location), false }
                     );

            // Load all the gha installed under the %APPDATA%\Grasshopper\Libraries-Autodesk-Revit-20XX
            //Load all the gha installed under ProgramData\Grasshopper\Libraries-Autodesk-Revit-20XX
            var schemeName           = ApplicationUI.ControlledApplication.VersionName.Replace(' ', '-');
            var revitAssemblyFolders = new List <string>()
            {
                Grasshopper.Folders.DefaultAssemblyFolder.Substring(0, Grasshopper.Folders.DefaultAssemblyFolder.Length - 1) + '-' + schemeName,
                Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Grasshopper", "Libraries" + '-' + schemeName)
            };

            foreach (string revitAssemblyFolder in revitAssemblyFolders)
            {
                var assemblyFolder = new DirectoryInfo(revitAssemblyFolder);
                try
                {
                    foreach (var file in assemblyFolder.EnumerateFiles("*.gha"))
                    {
                        LoadGHAProc.Invoke(Instances.ComponentServer, new object[] { new GH_ExternalFile(file.FullName), false });
                    }
                }
                catch (System.IO.DirectoryNotFoundException) { }
            }

            Instances.Settings.SetValue("Assemblies:COFF", bCoff);

            if (rc)
            {
                GH_ComponentServer.UpdateRibbonUI();
            }

            return(rc);
        }
コード例 #5
0
ファイル: Guest.cs プロジェクト: linear-a/rhino.inside
        bool LoadComponents()
        {
            var LoadGHAProc = Instances.ComponentServer.GetType().GetMethod("LoadGHA", BindingFlags.NonPublic | BindingFlags.Instance);

            if (LoadGHAProc == null)
            {
                return(false);
            }

            var bCoff = Instances.Settings.GetValue("Assemblies:COFF", true);

            Instances.Settings.SetValue("Assemblies:COFF", false);

            var rc = (bool)LoadGHAProc.Invoke
                     (
                Instances.ComponentServer,
                new object[] { new GH_ExternalFile(Assembly.GetExecutingAssembly().Location), false }
                     );

            var assemblyFolders = new DirectoryInfo[]
            {
                // %ProgramData%\Grasshopper\Libraries-Inside-Revit-20XX
                new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Grasshopper", $"Libraries-{Rhinoceros.SchemeName}")),

                // %APPDATA%\Grasshopper\Libraries-Inside-Revit-20XX
                new DirectoryInfo(Folders.DefaultAssemblyFolder.Substring(0, Folders.DefaultAssemblyFolder.Length - 1) + '-' + Rhinoceros.SchemeName)
            };

            foreach (var folder in assemblyFolders)
            {
                IEnumerable <FileInfo> assemblyFiles;
                try { assemblyFiles = folder.EnumerateFiles("*.gha"); }
                catch (System.IO.DirectoryNotFoundException) { continue; }

                foreach (var assemblyFile in assemblyFiles)
                {
                    LoadGHAProc.Invoke(Instances.ComponentServer, new object[] { new GH_ExternalFile(assemblyFile.FullName), false });
                }
            }

            Instances.Settings.SetValue("Assemblies:COFF", bCoff);

            if (rc)
            {
                GH_ComponentServer.UpdateRibbonUI();
            }

            return(rc);
        }
コード例 #6
0
        bool LoadComponents()
        {
            var bCoff = Instances.Settings.GetValue("Assemblies:COFF", true);

            Instances.Settings.SetValue("Assemblies:COFF", false);

            var rc = LoadGHA(Assembly.GetExecutingAssembly().Location);

            var assemblyFolders = new DirectoryInfo[]
            {
                // %ProgramData%\Grasshopper\Libraries-Inside-Revit-20XX
                new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Grasshopper", $"Libraries-{Rhinoceros.SchemeName}")),

                // %APPDATA%\Grasshopper\Libraries-Inside-Revit-20XX
                new DirectoryInfo(Folders.DefaultAssemblyFolder.Substring(0, Folders.DefaultAssemblyFolder.Length - 1) + '-' + Rhinoceros.SchemeName)
            };

            foreach (var folder in assemblyFolders)
            {
                IEnumerable <FileInfo> assemblyFiles;
                try { assemblyFiles = folder.EnumerateFiles("*.gha"); }
                catch (System.IO.DirectoryNotFoundException) { continue; }

                foreach (var assemblyFile in assemblyFiles)
                {
                    bool   loaded          = false;
                    string mainContent     = string.Empty;
                    string expandedContent = string.Empty;

                    try
                    {
                        loaded = LoadGHA(assemblyFile.FullName);
                    }
                    catch (Exception e)
                    {
                        mainContent     = e.Message;
                        expandedContent = e.Source;
                    }

                    if (!loaded)
                    {
                        using
                        (
                            var taskDialog = new TaskDialog(MethodBase.GetCurrentMethod().DeclaringType.FullName)
                        {
                            Title = "Grasshopper Assembly Failure",
                            MainIcon = TaskDialogIcons.IconError,
                            TitleAutoPrefix = false,
                            AllowCancellation = false,
                            MainInstruction = $"Grasshopper cannot load the external assembly {assemblyFile.Name}. Please contact the provider for assistance.",
                            MainContent = mainContent,
                            ExpandedContent = expandedContent,
                            FooterText = assemblyFile.FullName
                        }
                        )
                        {
                            taskDialog.Show();
                        }
                    }
                }
            }

            Instances.Settings.SetValue("Assemblies:COFF", bCoff);

            if (rc)
            {
                GH_ComponentServer.UpdateRibbonUI();
            }

            return(rc);
        }
コード例 #7
0
        bool LoadStartupAssemblies()
        {
            // Load This Assembly as a GHA in Grasshopper
            {
                var bCoff = Instances.Settings.GetValue("Assemblies:COFF", false);
                try
                {
                    Instances.Settings.SetValue("Assemblies:COFF", false);

                    var location = Assembly.GetExecutingAssembly().Location;
                    location = Path.Combine(Path.GetDirectoryName(location), Path.GetFileNameWithoutExtension(location) + ".GH.gha");
                    if (!LoadGHA(location))
                    {
                        if (!File.Exists(location))
                        {
                            throw new FileNotFoundException("File Not Found.", location);
                        }

                        if (CentralSettings.IsLoadProtected(location))
                        {
                            throw new InvalidOperationException($"Assembly '{location}' is load protected.");
                        }

                        return(false);
                    }
                }
                finally
                {
                    Instances.Settings.SetValue("Assemblies:COFF", bCoff);
                }
            }

            var assemblyList = GetAssembliesList();

            foreach (var assemblyFile in assemblyList)
            {
                bool   loaded          = false;
                string mainContent     = string.Empty;
                string expandedContent = string.Empty;

                try
                {
                    loaded = LoadGHA(assemblyFile);
                }
                catch (Exception e)
                {
                    mainContent     = e.Message;
                    expandedContent = e.Source;
                }

                if (!loaded)
                {
                    using
                    (
                        var taskDialog = new TaskDialog(MethodBase.GetCurrentMethod().DeclaringType.FullName)
                    {
                        Title = "Grasshopper Assembly Failure",
                        MainIcon = External.UI.TaskDialogIcons.IconError,
                        TitleAutoPrefix = false,
                        AllowCancellation = false,
                        MainInstruction = $"Grasshopper cannot load the external assembly {Path.GetFileName(assemblyFile)}. Please contact the provider for assistance.",
                        MainContent = mainContent,
                        ExpandedContent = expandedContent,
                        FooterText = assemblyFile
                    }
                    )
                    {
                        taskDialog.Show();
                    }
                }
            }

            GH_ComponentServer.UpdateRibbonUI();
            return(true);
        }