RevitAPIのSharpDevelopで開発したプログラムは、マクロマネージャから実行できます。
ですが苦労して開発したプログラム、せっかくなのでカッコよくリボンタブのボタンから実行してみたいですよね^^
ということで、この記事ではSharpDevelopで開発したプログラムをアドイン化する手順を紹介します。
準備|ボタンに表示するアイコン作成
アドイン化のプログラムを書いていく前に、ボタンに載せるアイコンを作成しておきます。
アイコンにはicoという拡張子を使用します。
下記のサイトでjpgやpngをicoに変換できるので、これを利用しましょう^^
- 変換したいファイルを選択し「変換」ボタンをクリックで変換実行
- icoとpng形式で変換される。アイコンに使用するサイズは「32 x 32」
- 「Download」を右クリックして、「名前を付けてリンク先を保存」する
以上でアイコンの準備完了です。
SharpDevelopでアドイン化用プログラムセットの作成
アドインにするためのプログラムはSharpDevelopで作成します。
新規のモジュールを作成
まずは、マクロマネージャから新規モジュールを作成します。
新規モジュールの作成手順が分からない方は下記記事をご覧ください。
ここでは「RevitAPIyasan」という名前で新規作成しました・
「ThisApplication.cs」に下記コードが出来上がります。
/* * Created by SharpDevelop. * User: ********** * Date: 2021/02/09 * Time: 20:58 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace RevitAPIyasan { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("4CF966AA-B412-48C4-8FD2-EF3AE0350DA1")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { } private void Module_Shutdown(object sender, EventArgs e) { } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } }
「ThisApplication.cs」はこれでOK。
何も書き加える必要はありません。
ボタンに搭載するプログラムの作成
タブやリボン、ボタンに搭載するプログラムを書いていきます。
これは専用でcsファイルを作っておくのが管理しやすいです。
csファイルの追加手順は下記記事をご覧ください。
新規csはClassで作成し、ひとまず下記サンプルコードをそのままコピペしてもらえればOKです。
/* * Created by SharpDevelop. * User: ********** * Date: 2021/02/09 * Time: 20:58 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; using Autodesk.Revit.Attributes; namespace RevitAPIyasan { /// <summary> /// Description of Program. /// </summary> [Transaction(TransactionMode.Manual)] public class Program : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { TaskDialog.Show("Message", "test"); return Result.Succeeded; } } }
ここではクラス名を「Program」として、cs名は「Program.cs」です。
作成したプログラムはサンプルなので、TaskDialogでメッセージを表示する、というシンプルなものです^^
上記で29行目に書いているコードですね。
この部分を書き換えるとそれに応じて、実装したボタンを押したときに起動するプログラムの内容が変わりますよ。
タブ・リボン・ボタンを実装する
次に、Revitを起動したときにタブ・リボン・ボタンを呼び出すプログラムを書いていきます。
これも専用のcsファイルを作っておきます。
新規csファイルをClassで作成し、ひとまず下記をコピペしてください。
/* * Created by SharpDevelop. * User: ********** * Date: 2021/02/09 * Time: 20:59 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; using System.Windows.Media.Imaging; namespace RevitAPIyasan { /// <summary> /// Description of Button. /// </summary> public class Button : IExternalApplication { public Autodesk.Revit.UI.Result OnShutdown(Autodesk.Revit.UI.UIControlledApplication application) { return Result.Succeeded; } public Autodesk.Revit.UI.Result OnStartup(Autodesk.Revit.UI.UIControlledApplication application) { string program = "RevitAPIyasan.Program"; string dllPath = @"C:\ProgramData\Autodesk\Revit\Addins\2020\RevitAPIyasan.dll"; string iconPath = @"C:\ProgramData\Autodesk\Revit\Addins\2020\RevitAPIyasan.ico"; string tabName = "タブ1"; application.CreateRibbonTab(tabName); string ribbonName1 = "リボン1"; RibbonPanel ribbonPanel1 = application.CreateRibbonPanel(tabName, ribbonName1); string programName1 = "プログラム名1"; string buttonName1 = "ボタン1"; PushButton pushButton1 = ribbonPanel1.AddItem(new PushButtonData(programName1, buttonName1, dllPath, program)) as PushButton; pushButton1.LargeImage = new BitmapImage(new Uri(iconPath)); ribbonPanel1.AddSeparator(); string programName2 = "プログラム名2"; string buttonName2 = "ボタン2"; PushButton pushButton2 = ribbonPanel1.AddItem(new PushButtonData(programName2, buttonName2, dllPath, program)) as PushButton; pushButton2.LargeImage = new BitmapImage(new Uri(iconPath)); string ribbonName2 = "リボン2"; RibbonPanel ribbonPanel2 = application.CreateRibbonPanel(tabName, ribbonName2); string programName3 = "プログラム名3"; string buttonName3 = "ボタン3"; PushButton pushButton3 = ribbonPanel2.AddItem(new PushButtonData(programName3, buttonName3, dllPath, program)) as PushButton; pushButton3.LargeImage = new BitmapImage(new Uri(iconPath)); return Result.Succeeded; } } }
最初にアイコンを用意していない方は、45,52,60行目をコメントアウトしておいてください。
ここではクラス名を「Button」として、cs名は「Button.cs」です。
ビルドエラーの回避
このプログラムをこのままビルドすると、エラーになると思います。
というわけで、下記手順で「References」を追加します。
- SharpDevelop左側のブロックより「References」を右クリック
- 「Add References」を選択
- 「GAC」タブより「PresentationCore」を選択し、ダブルクリック
- 下の枠に追加されればOK
- 「GAC」タブより「SystemXaml」を選択し、ダブルクリック
- 下の枠に追加されればOK
- 「GAC」タブより「WindowsBase」を選択し、ダブルクリック
- 下の枠に追加されればOK
- 下の枠に追加された3つをすべて選択する
- 「OK」ボタンをクリック
ここで再度ビルドすると、今度はエラーがなくなるはずです。
コードの解説
「Button.cs」で書いたコードをざっくり解説しておきます。
まずは36,37行目、
string tabName = "タブ1"; application.CreateRibbonTab(tabName);
この部分で新しいタブを作成しています。
そして、39,40行目、
string ribbonName1 = "リボン1"; RibbonPanel ribbonPanel1 = application.CreateRibbonPanel(tabName, ribbonName1);
で新しいリボンを作り、42~45行目、
string programName1 = "プログラム名1"; string buttonName1 = "ボタン1"; PushButton pushButton1 = ribbonPanel1.AddItem(new PushButtonData(programName1, buttonName1, dllPath, program)) as PushButton; pushButton1.LargeImage = new BitmapImage(new Uri(iconPath));
でボタンを実装した、という流れです。
ボタンをクリックしたときに実行されるプログラムは、「namespace名 + class名」で指定するため、ここでは、
string program = "RevitAPIyasan.Program";
としています。
ボタンをひとつ実装した後は、
ribbonPanel1.AddSeparator();
で、セパレータを設けて、
string programName2 = "プログラム名2"; string buttonName2 = "ボタン2"; PushButton pushButton2 = ribbonPanel1.AddItem(new PushButtonData(programName2, buttonName2, dllPath, program)) as PushButton; pushButton2.LargeImage = new BitmapImage(new Uri(iconPath));
これで新しいボタンを作成。
あとは同じ流れで、リボンやボタンを追加していく感じです。
詳しくは出来上がったものと見比べてもらえれば分かりやすいかと思います^^
プログラムを起動するためのファイルを作成
先ほどまでに
- ボタン用のモジュール
- ボタンに載せるプログラム
- ボタンを実装するプログラム
を作成しました。
ここでは、以上のものをRevit起動時に呼び出すためのファイルを作成します。
まずはメモ帳を新規で開き、下記をコピペします。
<?xml version="1.0" encoding="utf-8"?> <RevitAddIns> <AddIn Type="Application"> <Name>RevitAPI屋さん</Name> <Assembly>RevitAPIyasan.dll</Assembly> <AddInId>4CF966AA-B412-48C4-8FD2-EF3AE0350DA1</AddInId> <FullClassName>RevitAPIyasan.Button</FullClassName> <VendorId>RevitAPI屋さん</VendorId> <VendorDescription>RevitAPI屋さん, http://revitapiyasan.com</VendorDescription> </AddIn> </RevitAddIns>
ここで6行目のAddInIdは、「ThisApplication.cs」と同じものに書き換えてください。
これを名前を付けて保存します。
保存する拡張子は「.addin」で、名前は最初に作ったモジュール名と同じにしていたほうが分かりやすいです。
ここでは「RevitAPIyasan.addin」って感じですね。
保存先は下記のフォルダです。
C:\ProgramData\Autodesk\Revit\Addins\2020
このファイルの各行を解説しておくと、こんな感じです。
Name | このファイルの名前。どのプログラムを動かすものか分かりやすい名前にしておくと良い。 |
---|---|
Assembly | 前章で作成したアセンブリ名(後ほど解説) |
AddInId | 先述のとおり |
FullClassName | タブ・リボン・ボタン作成のプログラムを記述した場所。「namespace + class」で書く。ここでは「RevitAPIyasan.Button」 |
VendorId | 販売者名。空欄だとエラーになるので該当しなくても何かしら書いておく。 |
VendorDescription | 販売者の説明。「販売者名, 販売者のURL」で書くがこれも空欄だとエラーになる。 |
タブ・リボン・ボタンの実装
すべてのデータを準備する
ここからは必ずRevitを閉じて作業します。
Revitのインターフェースにタブ・リボン・ボタンを実装するには、
- addinファイル
- dllファイル
- アイコン(必要であれば)
が必要です。
addinファイルは先ほど作成しましたね。
dllファイルは、下記に保存されています。
C:\ProgramData\Autodesk\Revit\Macros\2020\Revit\AppHookup\RevitAPIyasan\AddIn
ここにあるdllファイルをコピーします。
そしてaddinファイルを保存した、下記フォルダに保存します。
C:\ProgramData\Autodesk\Revit\Addins\2020
最初にアイコンを作った方は、同じくこの場所に保存です。
こんな感じになっていればOKですね。
dllファイルとアイコンは、addinファイルと必ずしも同じ場所に置かなくてもOK。
その場合はaddinファイルの「Assembly」でdllファイルのある場所をフルパスで指定します。
<Assembly>RevitAPIyasan.dll</Assembly>
また、「Button.cs」の33,34行目で指定したパスも変更します。
string dllPath = @"C:\ProgramData\Autodesk\Revit\Addins\2020\RevitAPIyasan.dll"; string iconPath = @"C:\ProgramData\Autodesk\Revit\Addins\2020\RevitAPIyasan.ico";
SharpDevelopを書換えるたびに、dllファイルの入替えが必要です。
アイコンのファイル名も変更するたびに書換えが必要なので、最初にしっかりと決めておいたほうが良いですよ^^
Revitを起動して、アドイン実行
以上ですべてのデータが揃いました。
Revitを起動してみましょう。
起動したらすぐに下のメッセージが出てくるかと思います。
これはざっくりいうと、
ってことです。
今まさに作成していたアドインのことですね^^
ここは「常にロード」でOKです。
これで次回以降に確認されることはありません。
エラーがなければ、タブ・リボン・ボタンが作成されているはずです。
どれでもいいので、ボタンを押してみます。
TaskDialogが表示されましたね。
これで世界にひとつだけ、オリジナルアドインの完成です^^
RevitAPI|プログラムのアドイン化|まとめ
以上、Revitのインターフェイスにタブ・リボン・ボタンを実装して、プログラムをアドイン化する手順でした。
いろいろと作業が多くて最初は苦労するかも知れないですが、慣れてくれば簡単です^^
ボタンから実行できるプログラムは見栄えもカッコいいので実践してみてください。
以上です。
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。