Revitの簡単なカスタマイズ(外部アプリケーションを作成)をしてみようと思います。
使用するもの
今回は下記環境にて実施しました。
Visual Studio 2015
Revit 2018 無償体験版
プロジェクトの作成
では、早速はじめます。まずはVisual Studioを起動して、新規プロジェクトを作成します。
テンプレートのツリービューからVisual C#を選択し、さらにクラスライブラリを選択します。
今回作成するプロジェクトの名前は「HelloWorld」にします。
参照の追加
プロジェクトを作成したら次は参照の設定を行います。ビルドするときに参照する先のことですね。
まず、RevitAPIとRevitAPIUIを追加します。
あとPresentationCoreとWindowsBase、System.Xamlも追加します。
コードの記述
参照の設定が終わったら、次はコーディングします。
プロジェクト作成時にデフォルトでClass1.csというクラスファイルが出来ていると思います。Class1だと何の処理なのかわかりづらいのでクラス名をCsHelloWorldに変更します。そして、CsHelloWorld.csを開き、下記コードを記述します。
using System;
using System.Reflection;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Windows.Media.Imaging;
namespace HelloWorld
{
/// <remarks>
/// This application's main class. The class must be Public.
/// </remarks>
public class CsHelloWorld : IExternalApplication
{
// Both OnStartup and OnShutdown must be implemented as public method
public Result OnStartup(UIControlledApplication application)
{
// Add a new ribbon panel
RibbonPanel ribbonPanel = application.CreateRibbonPanel("NewRibbonPanel");
// Create a push button to trigger a command add it to the ribbon panel.
string thisAssemblyPath = Assembly.GetExecutingAssembly().Location;
PushButtonData buttonData = new PushButtonData("cmdHelloWorld",
"Hello World", thisAssemblyPath, "HelloWorld.HelloWorld");
PushButton pushButton = ribbonPanel.AddItem(buttonData) as PushButton;
// Optionally, other properties may be assigned to the button
// a) tool-tip
pushButton.ToolTip = "Say hello to the entire world.";
// b) large bitmap
Uri uriImage = new Uri(@"C:\Users\会社\Documents\Visual Studio 2015\Projects\HelloWorld\地球アイコン9.jpeg");
BitmapImage largeImage = new BitmapImage(uriImage);
pushButton.LargeImage = largeImage;
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication application)
{
// nothing to clean up in this simple case
return Result.Succeeded;
}
}
/// <remarks>
/// The "HelloWorld" external command. The class must be Public.
/// </remarks>
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class HelloWorld : IExternalCommand
{
// The main Execute method (inherited from IExternalCommand) must be public
public Autodesk.Revit.UI.Result Execute(ExternalCommandData revit,
ref string message, ElementSet elements)
{
TaskDialog.Show("Revit", "Hello World");
return Autodesk.Revit.UI.Result.Succeeded;
}
}
}
ビルド
コーディングが終わったらビルドします。
ちなみにアクティブ ソリューション プラットフォームが「Any CPU」のままですと、ビルド時に
「warning MSB3270: 構築されているプロジェクトのプロセッサ アーキテクチャ "MSIL" と、参照 "RevitAPI" のプロセッサ アーキテクチャ "AMD64" の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロジェクト アーキテクチャとの依存関係を参照で設定することを検討してください。」
という警告文が出てきます。警告を出ないようにプラットフォームを「x64」に変更してからビルドして下さい。
アドインマニフェスト作成
ビルドに成功し、HelloWorld.dllが作成されたら、次はアドインマニフェストを作成します。これがないとRevitから作成したアプリケーションを起動できません。
Visual Studioを使って、XMLファイルを追加します。ただし、ファイル名を~.addinにします。
作成したaddinファイルを開き、下記コードを記述します。
Assemblyにはビルドして作成された.dllのファイルパスを記述します。
AddInIdは適宜変更してください。同じIDをもったアプリケーションが複数あると起動しません。Visual Studioのメニュー>ツール>GUIDの作成から新規作成ができます。
VendorIdに自社の情報を記述してください。エラー発生時のダイアログに表示されます。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>HelloWorld</Name>
<Assembly>C:\Users\aaa\Documents\Visual Studio 2015\Projects\HelloWorld\HelloWorld\bin\x64\Debug\HelloWorld.dll</Assembly>
<AddInId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</AddInId>
<FullClassName>HelloWorld.CsHelloWorld</FullClassName>
<VendorId>会社</VendorId>
<VendorDescription>会社</VendorDescription>
</AddIn>
</RevitAddIns>
アドインマニフェストを所定の位置に配置
上記で作成したaddinファイルをRevitのインストールフォルダ配下のAddins\2018フォルダに配置します。
C:\ProgramData\Autodesk\Revit\Addins\2018
Revit起動
アプリケーションの準備が整ったら、Revitを起動して任意のプロジェクトを開きます。
アドインタブを開くと今回追加したHello Woldが表示されます。
アプリ起動
アドイン>HelloWorldを選択して実行すると上記アプリが起動します。