Revit二次开发示例:APIAppStartup

下面介绍一个在Revit启动和关闭时调用外部程序的例子。

 

Revit调用的dll主程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk;
using Autodesk.Revit;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;

namespace APIAppStartup
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
    public class AppSample:IExternalApplication
    {
        #region IExternalApplication Members

        public Result OnShutdown(UIControlledApplication application)
        {
            TaskDialog.Show("Revit", "Quit External Application!");
            return Result.Succeeded;
        }

        public Result OnStartup(UIControlledApplication application)
        {
            string version = application.ControlledApplication.VersionName;

            //display splash window for 10 seconds
            SplashWindow.StartSplash();
            SplashWindow.ShowVersion(version);
            System.Threading.Thread.Sleep(10000);
            SplashWindow.StopSplash();

            return Result.Succeeded;
        }

        #endregion
    }
}

 

在Revit启动时调用的启动画面程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace APIAppStartup
{
    
    public delegate void DelegateCloseSplash();
    

    public partial class SplashWindow : Form
    {
        public SplashWindow()
        {
            InitializeComponent();
            m_delegateClose = new DelegateCloseSplash(InternalCloseSplash);
        }

        private DelegateCloseSplash m_delegateClose;
        private static SplashWindow m_instance;
        private static Thread InstanceCaller;

        //start a new thread to display splash window
        public static void StartSplash()
        {
            m_instance = new SplashWindow();
            m_instance.TopMost = true;
            InstanceCaller = new Thread(new ThreadStart(MySplashThreadFunc));
            InstanceCaller.Start();
        }

        //kill the thread
        public static void StopSplash()
        {
            if (m_instance != null)
            {
                m_instance.Invoke(m_instance.m_delegateClose);
            }
        }

        //show Revit version info
        public static void ShowVersion(string version)
        {
            m_instance.Version.Text = version;
        }

        void InternalCloseSplash()
        {
            this.Close();
            this.Dispose();
        }


        //this is called by the new thread to show the splash screen
        private static void MySplashThreadFunc()
        {
            if (m_instance != null)
            {
                m_instance.TopMost = true;
                m_instance.ShowDialog();
            }
        }
    }
}

 

Addin文件:

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
  <AddIn Type="Application">
    <Name>APIAppStartup</Name>
    <Assembly>
      C:UsersAdministratordocumentsvisual studio 2012ProjectsAPIAppStartupAPIAppStartupinReleaseAPIAppStartup.dll
    </Assembly>
    <AddInId>502fe383-2648-4e98-adf8-5e6047f9dc34</AddInId>
    <FullClassName>APIAppStartup.AppSample</FullClassName>
    <VendorId>ADSK</VendorId>
    <VendorDescription>http://xpvincent.cnblogs.com</VendorDescription>
  </AddIn>
</RevitAddIns>
原文地址:https://www.cnblogs.com/xpvincent/p/3596589.html