Revitが持っている長さの単位はメートルではなくフィートです。
なのでRevitAPIで長さのパラメータを扱うとき、メートルとフィートの換算が必要になります。
具体的には以下の作業です。
- Revitの取得した数値(フィート)をミリメートルに換算するため304.8を掛ける
- Revitに付与する数値(ミリメートル)をフィートに換算するため304.8で割る
これはかなり面倒くさいですね。
というわけで、単位変換に利用できるUnitUtilsというクラスがあります。
ここではフィートとミリメートルの単位変換のサンプルソースコードを紹介します。
Revitアドイン開発をLancersにて承っております。
詳しくは下の記事にまとめています。
UnitUtilsクラスについて
単位をあれこれ変換するときに使用するクラスです。
メンバーは静的メソッドしか持っていません。
単位換算のために作られたクラスって感じですね。
UnitUtilsを使った単位変換
Microsoftのサンプルに摂氏と華氏を変換するものがあったので、これに倣って作ってみました。
サンプルコード(~2020)
SharpDevelopで「UnitConverter.cs」というクラスを追加してコーディングしました。
※クラスの追加方法は下記の記事にまとめています。
以下、作成したソースコードを載せておきます。
using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace TestMacro { /// <summary> /// Description of UnitConverter. /// </summary> public class UnitConverter { public static double FtoM(double feet) { double millimeter = UnitUtils.Convert(feet, DisplayUnitType.DUT_DECIMAL_FEET, DisplayUnitType.DUT_MILLIMETERS); return millimeter; } public static double MtoF(double millimeter) { double feet = UnitUtils.Convert(millimeter, DisplayUnitType.DUT_MILLIMETERS, DisplayUnitType.DUT_DECIMAL_FEET); return feet; } } }
サンプルコード(2021~)
前章のコードはRevit2020まで有効で、Revit2021からは仕様変更のため下記のようになります。
using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace TestMacro { /// <summary> /// Description of UnitConverter. /// </summary> public class UnitConverter { public static double FtoM(double feet) { double millimeter = UnitUtils.Convert(feet, UnitTypeId.Feet, UnitTypeId.Millimeters); return millimeter; } public static double MtoF(double millimeter) { double feet = UnitUtils.Convert(millimeter, UnitTypeId.Millimeters, UnitTypeId.Feet); return feet; } } }
解説
フィートからミリメートルへの変換、ミリメートルからフィートへの変換の静的メソッドを作成しました。
それぞれのクラスでConvertメソッドを使っています。
Convert(変換する数値, 変換前の単位, 変換後の単位)
第2引数と第3引数の変換前後の単位は
- Revit2020以前はDisplayUnitType
- Revit2021以降はUnitTypeId
を使用します。
Revitのバージョンによって引数が変わるのが複雑ですね。
- フィートはDisplayUnitType.DUT_DECIMAL_FEET
- ミリメートルはDisplayUnitType.DUT_MILLIMETERS
- フィートはUnitTypeId.Feet
- ミリメートルはUnitTypeId.Millimeters
UnitUtilsまとめ
以上、UnitUtilsを使った単位変換クラスの紹介でした。
一度作ってしまえば、使いまわせるので便利ですね^^
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。