※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

RevitAPI

【RevitAPI】UnitUtilsでフィートとミリメートルを変換

Revitが持っている長さの単位はメートルではなくフィートです。

なのでRevitAPIで長さのパラメータを扱うとき、メートルとフィートの換算が必要になります。

具体的には以下の作業です。

  • Revitの取得した数値(フィート)をミリメートルに換算するため304.8を掛ける
  • Revitに付与する数値(ミリメートル)をフィートに換算するため304.8で割る

これはかなり面倒くさいですね。

というわけで、単位変換に利用できるUnitUtilsというクラスがあります。

ここではフィートとミリメートルの単位変換のサンプルソースコードを紹介します。

UnitUtilsクラスについて

単位をあれこれ変換するときに使用するクラスです。

メンバーは静的メソッドしか持っていません。

単位換算のために作られたクラスって感じですね。

UnitUtilsを使った単位変換

Microsoftのサンプルに摂氏と華氏を変換するものがあったので、これに倣って作ってみました。

→Microsoftの摂氏・華氏変換コードを確認する。

サンプルコード(~2020)

SharpDevelopで「UnitConverter.cs」というクラスを追加してコーディングしました。

※クラスの追加方法は下記の記事にまとめています。

SharpDevelopでcs作成
SharpDevelop(シャープデベロップ)のcsファイル追加手順|RevitAPISharpDevelop(シャープデベロップ)にcsファイルを追加する手順を紹介します。メインのソースコードがぐちゃぐちゃになる前に、適切な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;
    }
  }
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

サンプルコード(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;
    }
  }
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

解説

フィートからミリメートルへの変換、ミリメートルからフィートへの変換の静的メソッドを作成しました。

それぞれのクラスでConvertメソッドを使っています。

Convertメソッド

Convert(変換する数値, 変換前の単位, 変換後の単位)

第2引数と第3引数の変換前後の単位は

  • Revit2020以前はDisplayUnitType
  • Revit2021以降はUnitTypeId

を使用します。

Revitのバージョンによって引数が変わるのが複雑ですね。

DisplayUnitType
  • フィートはDisplayUnitType.DUT_DECIMAL_FEET
  • ミリメートルはDisplayUnitType.DUT_MILLIMETERS
UnitTypeId
  • フィートはUnitTypeId.Feet
  • ミリメートルはUnitTypeId.Millimeters

UnitUtilsまとめ

以上、UnitUtilsを使った単位変換クラスの紹介でした。

一度作ってしまえば、使いまわせるので便利ですね^^

RevitAPI独学用教材

最後に教材等を紹介します。

RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。

下記、オススメの参考書です。

プログラムが初心者にオススメのC#教材

イラストでの解説が分かりやすく、初めてのプログラミング学習にピッタリです。

プログラムの基礎知識がある人にオススメのC#教材

少し踏み込んだ内容まで学習でき、C#の知識が深まります。

美しいコードを書きたい人はこちら

個人的には、プログラマーひとり一冊は持っておくべきと思っている名作です^^
スポンサーリンク



Revitアドイン作ります

のんびり学習してる余裕などない!という方にご案内です。

ランサーズにてRevitのアドイン作成を承っております!

スキル、資格等の詳細はプロフィールをご覧ください。

ご質問などもお気軽にメッセージしていただければと思います。

詳しくは下の記事にまとめています。

【開発依頼】あなただけのRevitアドインを真心込めて作ります!RevitAPIを使ったアドイン開発を承ります。1から学習してアドイン作る余裕がない、外注でアドイン作成を依頼したい、という方はご利用をご検討いただければと思います^^...

最後まで読んでいただき、ありがとうございました^^

以上です。