使用Windows窗体创建Revit插件

时间:2017-01-06 11:23:33

标签: c# winforms revit-api revit

我一直在尝试使用带有Windows窗体的Visual Studio 2015为Revit 2017创建一个插件。 不幸的是,我没有在网上找到任何文件(如果你有链接,我很乐意让他们看看)

我使用列表框和选择按钮

构建了一个简单的表单
  • 列表框显示Revit项目中的所有门
  • 选择按钮从列表框中选择所有选定的门,并在Revit项目中选择它们(有很多选择......)

它是一个测试解决方案,看看它是如何工作的。

WeWillSee类是实现主要RevitAPI函数的类Execute:

 using System; 
 using Autodesk.Revit.UI; 
 using Autodesk.Revit.Attributes; 
 using Autodesk.Revit.DB;

 namespace Test2 {

 [Transaction(TransactionMode.Manual)]
 class WeWillSee : IExternalCommand
 {
     public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
     {
         UIApplication uiapp = commandData.Application;
         /*UIDocument uidoc = uiapp.ActiveUIDocument;
         Document doc = uidoc.Document;*/

         try
         {
             System.Windows.Forms.Application.EnableVisualStyles();
            System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
             System.Windows.Forms.Application.Run(new Form(commandData));
             //System.Windows.Forms.Form wf = new Form1(uiapp);
         }
         catch (Exception e)
         {
             TaskDialog.Show("Error", e.ToString());
             return Result.Failed;
         }

         return Result.Succeeded;
     }
 } 
 }

我要打开的表格(其余不重要):

namespace Test2
{
    public partial class Form : System.Windows.Forms.Form
    {
        private UIApplication uiapp;
        private UIDocument uidoc;
        private Document doc;

        public Form(ExternalCommandData commandData)
        {
            InitializeComponent();

            uiapp = commandData.Application;
            uidoc = uiapp.ActiveUIDocument;
            doc = uidoc.Document;
        }

最后是Program.cs文件(导致我出问题的文件):

namespace Test2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(/*Can't call ExternalCommandData on static class*/));
        }
    }
}

感谢您提供的任何帮助! :)

3 个答案:

答案 0 :(得分:1)

我认为您甚至不需要像编写项目那样在项目中使用Program.cs类文件。

答案 1 :(得分:1)

您不需要执行Application.Run类型的操作(仅适用于独立的Windows应用程序)。你根本不需要Program.cs。

你可以在开始时做:

Form1 wf = new Form1(uiapp);  if(wf.ShowDialog()== System.Windows.Forms.DialogResult.OK)返回Result.Success

答案 2 :(得分:1)

这是一个简单的Revit加载项,它实现了一个外部命令,可以动态创建和显示Windows窗体:

http://thebuildingcoder.typepad.com/blog/2012/05/the-schedule-api-and-access-to-schedule-data.html