Ejemplo n.º 1
0
        /// <summary>
        /// 创建一个按钮
        /// </summary>
        /// <param name="plugin"></param>
        /// <param name="panel"></param>
        private static void CreateButton(IFangCommand plugin, RibbonPanel panel)
        {
            if (plugin.SplitName != null && plugin.SplitName != "")
            {
                SplitButton splitbt = FindSplitByName(panel, plugin.SplitName);
                if (splitbt != null)
                {
                    PushButtonData data = new PushButtonData(plugin.AlaisName, plugin.AlaisName, plugin.GetType().Assembly.Location, plugin.ModelName);
                    PushButton     ps   = splitbt.AddPushButton(data);
                    ps.LargeImage = plugin.ImageURI;
                    ps.Image      = plugin.ImageURI;

                    ps.SetShortCut(plugin.ShortCutKey);
                }
                else
                {
                    SplitButtonData splidata = new SplitButtonData(plugin.SplitName, plugin.SplitName);
                    SplitButton     ps       = panel.AddItem(splidata) as SplitButton;
                    ps.LargeImage = plugin.ImageURI;
                    ps.Image      = plugin.ImageURI;
                    ps.SetShortCut(plugin.ShortCutKey);
                    ps.IsSynchronizedWithCurrentItem = false;
                    //ps.ItemText = plugin.SplitName;
                }
            }
            else
            {
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 加载所有的插件信息
        /// </summary>
        /// <param name="revitapp"></param>
        /// <param name="splash"></param>
        public static void LoadAllPlugins(UIControlledApplication revitapp, ISplash splash)
        {
            /// <summary>
            /// 所有的插件列表
            /// </summary>
            List <IFangCommand> plugins = new List <IFangCommand>();
            //获取当前的应用程序路径
            string appPath = Unity.GetAssemblyPath();

            if (appPath != null)
            {
                //获取当前所有的文件信息
                string[] files = Directory.GetFiles(appPath);
                //获取下面所有的dll
                foreach (string file in files)
                {
                    if (file.Contains("Fang.LGK.Plugin.") == false)
                    {
                        continue;
                    }
                    //获取扩展名
                    string ext = Path.GetExtension(file);
                    //判断是否是扩展名
                    if (ext.ToLower() != ".dll")
                    {
                        continue;
                    }

                    try
                    {
                        //加载当前的程序集
                        Assembly tmp = Assembly.LoadFrom(file);
                        //获取当前所有类型信息
                        Type[] types = tmp.GetTypes();
                        //显示加载进度
                        splash.ProcessData = Path.GetFileName(file);
                        //获取当前的成员类型信息
                        foreach (Type t in types)
                        {
                            if (IsValidPlugin(t))
                            {
                                try
                                {
                                    //创建当前的插件信息
                                    IFangCommand plugin = (IFangCommand)tmp.CreateInstance(t.FullName);
                                    plugins.Add(plugin);
                                }
                                catch (Exception ex) {
                                    splash.ProcessData = "当前应用程序加载失败" + ex.Message;
                                    continue;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        splash.ProcessData = "当前应用程序加载失败" + ex.Message;
                    }
                    //创建当前界面
                }

                CreateUI(revitapp, plugins, splash);
            }
            else
            {
            }
        }