今回のテーマは、Revitのプロジェクト単位とDynamoの関係です。
道路・鉄道用途でDynamoを使用する場合、正確なモデリングをするために、APIを使用してプロジェクト単位を切り替えることをおすすめします。その理由と方法を解説します。
道路・鉄道用途に適したプロジェクト単位
Revitでは、プロジェクト単位で使用する単位を管理します。

Dynamoでは、Dynamoを起動したドキュメントのプロジェクト単位を参照し、単位を定めます。つまり、プロジェクト単位が”mm”であれば、Dynamoの単位も”mm”となります。
ここで、Dynamoでモデリングする際の注意点として、Dynamoには”既定のジオメトリのスケーリング”という設定があり、この内容でモデリング可能な範囲が決まります。もし、モデリング範囲を超えて作図すると、下図のエラーがでてしまいます。

この”既定のジオメトリのスケーリング”設定には、小~特大の範囲があり、もし、プロジェクト単位が”mm”であれば、モデリング可能な範囲は下表になります。
設定 | モデリング可能な範囲 | 寸評 |
---|---|---|
小 | 0.000001mm~100mm(0.1m) | 狭すぎる |
中 | 0.0001mm~10,000mm(10m) | 狭すぎる |
大 | 0.01mm~1,000,000mm(1,000m) | 線形が1kmを超えることがある |
特大 | 1mm~100,000,000mm(100,000m) | 0.1mm単位の図面を作成することがある |
道路・鉄道用途で使用するとき、小・中は範囲が狭すぎて問題外ですし、大や特大も最適とは言えないと思います。たとえば、1km超える線形を扱うと大は不適格です。また、0.1mm単位で図面を作成する場合、特大は不適格になります。
道路・鉄道の設計では、0.1mm~10kmが最適ではないでしょうか。
これに対応するためには、プロジェクト単位を”m”にします。すると、”中”の場合、0.0001m(0.1mm)~10,000m(10km)とまさに理想の範囲になります。
設定 | モデリング可能な範囲 | 寸評 |
---|---|---|
小 | 0.000001m(0.001mm)~100m | 狭すぎる |
中 | 0.0001m(0.1mm)~10,000m(10km) | 最適 |
大 | 0.01m(10mm)~1,000,000m(1,000km) | 広すぎる |
特大 | 1m~100,000,000m(100,000km) | 広すぎる |
とはいえ、プロジェクト単位を”m”にしてしまうと、今度は設計者から反発がありそうです。図面の寸法表記がすべて”m”になる、というのは受け入れられないと思います。
ではどうするかというと、通常は”mm”としておき、Dynamo実行時のみ”m”とすれば良いのですが、いちいち手動で切り替えるのは億劫です。
そこで、Dynamo実行時、自動でプロジェクト単位を切り替える方法をご紹介します。
プロジェクト単位の切り替え内容
通常時とDynamo実行時でプロジェクト単位を切り替えます。”長さ”以外も切り替えることが可能なので、”角度”と”勾配”も切り替えてみます。
それぞれプロジェクト単位は以下の設定とします。なお、下表の”精度”は、少数の表示範囲を示します。記号は、寸法値表記等をしたときに表示する記号です。
- 通常時
-
項目 単位 精度 記号 長さ mm 1 - 角度 度分秒 - - 勾配 1:比率 0.01 1: - Dynamo実行時
-
項目 単位 精度 記号 長さ m 0.001 - 角度 度 0.0001 - 勾配 ‰ 0.1 ‰ -
自動切り替えの方法
特殊な環境でDynamo開発を行っています。詳細は下記でご確認ください。

最初に全体のコードやグラフを示します。その後、解説します。
全体構成

units_change.pyは、Dynamoから直接アクセスする実行用ファイルです。relibパッケージ内にrevit.pyというモジュールを作成し、ここにプロジェクト単位自動切り替え用の関数を作成します。
今回は、units_change.pyを経由して単位変換を行いますが、実務で使用する際は、他の実行用ファイルからrevit.pyにアクセスすることになります。units_change.pyは、動作確認用として本記事限定で使用します。
revit.pyの内容
Pycharmプロジェクト内に用意するPythonファイル(モジュール)です。ディレクトリ構成は下図のようにしています。

revit.pyのソースコードです。このコードをPython Scriptノードで使用する場合は、最後の方にあるメモ(#)を消してください。また、IN[0]にBooleanノードをつないでください。Dynamoグラフのところに画像を用意しましたので、参考にしてください。
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
def get_unit_info(for_dynamo: bool):
spec_type_ids = (
DB.SpecTypeId.Length, DB.SpecTypeId.Angle, DB.SpecTypeId.Slope
)
if for_dynamo:
unit_type_ids = (
DB.UnitTypeId.Meters, DB.UnitTypeId.Degrees, DB.UnitTypeId.PerMille
)
accuracies = (0.001, 0.0001, 0.1)
symbol_type_ids = (
None, None, DB.SymbolTypeId.PerMille
)
else:
unit_type_ids = (
DB.UnitTypeId.Millimeters, DB.UnitTypeId.DegreesMinutes, DB.UnitTypeId.OneToRatio
)
accuracies = (1, None, 0.01)
symbol_type_ids = (
None, None, DB.SymbolTypeId.OneColon
)
return spec_type_ids, unit_type_ids, accuracies, symbol_type_ids
def set_units(unit_info):
doc = DocumentManager.Instance.CurrentDBDocument
project_unit = doc.GetUnits()
for spec_type_id, unit_type_id, accuracy, symbol_type_id in zip(
unit_info[0], unit_info[1], unit_info[2], unit_info[3]
):
if symbol_type_id:
format_opt = DB.FormatOptions(
unit_type_id, symbol_type_id
)
else:
format_opt = DB.FormatOptions(
unit_type_id
)
if accuracy:
format_opt.Accuracy = accuracy
project_unit.SetFormatOptions(
spec_type_id,
format_opt
)
TransactionManager.Instance.EnsureInTransaction(doc)
doc.SetUnits(project_unit)
TransactionManager.Instance.TransactionTaskDone()
######################################################
# dynamo scriptノードで使用する際は、下の#を消してください
# IN[0]にBooleanノードをつないでください
######################################################
# for_dynamo = IN[0]
#
# set_units(get_unit_info(for_dynamo=for_dynamo))
#
# OUT = "Dynamo用のプロジェクト単位を設定しました" if for_dynamo \
# else "Revit作業用のプロジェクト単位を設定しました"
units_change.pyの内容
DynamoのFile Pathノードで参照するPythonファイル(実行用ファイル)です。
プロジェクトディレクトリ直下にdynamo_exeというディレクトリを作成し、そこに保存します。

なお、Python Scriptノードを使う場合、このPythonファイルは不要です。
import sys
sys.path.append(r"E:\BIM\PyProjects\relib\src")
from relib_sbo.cmn import revit
import importlib
importlib.reload(revit)
for_dynamo = IN[0]
revit.set_units(revit.get_unit_info(for_dynamo=for_dynamo))
OUT = "Dynamo用のプロジェクト単位を設定しました" if for_dynamo \
else "Revit作業用のプロジェクト単位を設定しました"
Dynamoグラフ
SBO式はこちらです。

Dynamoプレーヤで使用する場合は、適宜入力/出力処理を行ってください。ノード名が分かるようこの画像では処理をしていません。
Python Scriptノード版も紹介しておきます。

revit.pyの解説
ここからは、ソースコードの解説をしていきます。
importまわり
コードにコメントを追記しました。詳しく説明できるほどの知識はありません。やりたいことに対し、暗黙で記述します。
import clr # DynamoでPythonを使用するとき必要
clr.AddReference("RevitAPI") # APIを使用するとき必要
from Autodesk.Revit import DB # API(Autodesk.Revit.DB)を使用するとき必要
clr.AddReference("RevitServices") # 下2行のどちらかを記述すると必要
from RevitServices.Persistence import DocumentManager # ドキュメントを取得するとき必要
from RevitServices.Transactions import TransactionManager # ドキュメントにデータを書き込むとき必要
【余談】import *(ワイルドカード)について
Dynamo Forumでは、importに*(ワイルドカード)を使用するコードが多いです。しかし、本サイトでは基本的に使用しません。
たとえば、↑のコードでは、from Autodesk.Revit import DB
としています。
こうすることで、以後、Autodesk.Revit.DB
のクラス等を使う場合は、DBに属していることが明示されます。たとえば、DB.SpecTypeId.Length
とかです。
Dynamo Forumではfrom Autodesk.Revit.DB import *
としているのをよく見かけます。こうすると、コードは短くなりSpecTypeId.Length
ですみますが、様々な問題があります。様々の内容は、”Python import ワイルドカード”で検索すると出てきます。
import *の影響を理解したうえで使用するのは良いと思いますが、初学者が使用するのはおすすめしません。
Dynamo界隈でimport *の使用が多いのは、Python Scriptノードのせいでしょうか。

get_unit_info関数
プロジェクト単位の設定内容を決めるための関数です。Revitドキュメントにプロジェクト単位を設定する関数とは分けています。
ここからは、コード > 解説の順で示します。
関数の宣言
def get_unit_info(for_dynamo: bool):
関数の宣言文です。for dynamo
はブーリアン(True/False)を入力し、設定するプロジェクト単位の判断(通常用かDynamo用か)に使用します。
spec_type_ids(項目)の設定
spec_type_ids = (
DB.SpecTypeId.Length, DB.SpecTypeId.Angle, DB.SpecTypeId.Slope
)
spec_type_ids
は、プロジェクト単位のどの項目を対象にするかを指定しています。今回は、下表のようになります。
spec_type_ids | 項目 |
---|---|
DB.SpecTypeId.Length | 長さ |
DB.SpecTypeId.Angle | 角度 |
DB.SpecTypeId.Slope | 勾配 |
SpecTypeId
の他の項目を調べたい場合(たとえば距離を指定したい場合)は、Revit API Docsで確認できます。
せっかくなので、API Docsの見方も合わせて説明します。APIをマスターするには、このサイトの活用が必須だからです。もともとapidocs.coの方を使っていたのですが、エラーが表示されるので、Revit API Docsで説明します。
API Docsの説明文は、普段閉じています。説明をご覧になりたい方は、▼を押してください。
API Docsの説明【SpecTypeId】
ここでは、Revit API Docsを使ってSpecTypeId
を調べる方法を説明します。
Revit API Docsにアクセスします。
検索窓に調べたい用語とRevitのバージョンを入力します。ここでは、SpecTypeId
を調べます。

すると関係するものが表示されるので、SpecTypeId Class
をクリックします。

SpecTypeId Class
> SpecTypeId Properties
とクリックしていきます。

するとプロパティの一覧が表示されます。
一番上のAcceleration
を見ていきます。

Nameがプロパティ名、Descriptionが説明です。

説明を読むと、Acceleration
= 加速度、in discipline Structural
= 専門分野は構造、であることが分かります。Revitのプロジェクト単位にも該当するものがあります。

ここで、そもそもプロパティとは何かということですが、各クラス専用の変数で、さらに読み取り専用とか書き込み専用にしているもの、と理解しています。今回のDB.SpecTypeId.Acceleration
であれば、SpecTypeId
クラスの読み取り専用変数であり、プロジェクト単位の加速度を意味している、ということになります。
他の単位も調べてみましょう。例として、”単位面積あたりのコスト”を調べます。まず、ctrl+f
を押して検索窓を開き、試しに”cost”と入力します。

すると、いくつかヒットしました。その中にCostPerArea
があります。たぶん、これですね。DB.SpecTypeId.CostPerArea
としてあげれば、これが”単位面積あたりのコスト”を意味します。

unit_type_ids(単位)、accuracies(精度)、symbol_type_ids(記号)の設定
if for_dynamo:
unit_type_ids = (
DB.UnitTypeId.Meters, DB.UnitTypeId.Degrees, DB.UnitTypeId.PerMille
)
accuracies = (0.001, 0.0001, 0.1)
symbol_type_ids = (
None, None, DB.SymbolTypeId.PerMille
)
for_dynamo
が 真の場合、つまりDynamo用のプロジェクト単位を設定します。
unit_type_ids
は単位、accuracies
は精度、symbol_type_ids
は記号を指定しています。
unit_type_ids : 単位 | accuracies : 精度 | symbol_type_ids : 記号 |
---|---|---|
DB.UnitTypeId.Meters m | 0.001 | None なし |
DB.UnitTypeId.Degrees ° | 0.0001 | None なし |
DB.UnitTypeId.PerMille ‰ | 0.1 | DB.SymbolTypeId.PerMille ‰ |
UnitTypeId
とSymbolTypeId
のAPI Docsの使い方はSpecTypeId
と同様のため、説明は省略します。Accuracy
は、後ほど(FormatOptions
で)説明します。
Revit作業時の設定
else:
unit_type_ids = (
DB.UnitTypeId.Millimeters, DB.UnitTypeId.DegreesMinutes, DB.UnitTypeId.OneToRatio
)
accuracies = (1, None, 0.01)
symbol_type_ids = (
None, None, DB.SymbolTypeId.OneColon
)
for_dynamo
が真ではない場合、つまりRevit作業時の設定です。内容を表で示します。
unit_type_ids : 単位 | accuracies : 精度 | symbol_type_ids : 記号 |
---|---|---|
DB.UnitTypeId.Millimeters mm | 1 | None なし |
DB.UnitTypeId.DegreesMinutes 度分秒 | なし | None なし |
DB.UnitTypeId.OneToRatio 1:比率 | 0.01 | DB.SymbolTypeId.OneColon 1: |
戻り値の設定
return spec_type_ids, unit_type_ids, accuracies, symbol_type_ids
spec_type_ids, unit_type_ids, accuracies, symbol_type_ids
の順で値を返します。これらの値は、次に説明するset_units
関数で使用します。
set_units関数
ドキュメントにget_unit_infoで設定したプロジェクト単位を登録する関数です。ここも、コード>解説の順で示します。
関数の宣言とドキュメントの取得
def set_units(unit_info):
doc = DocumentManager.Instance.CurrentDBDocument
unit_info
には、先ほど作ったget_unit_info
関数の戻り値を入力します。
doc = DocumentManager.Instance.CurrentDBDocument
でドキュメントを取得できます。取得されるドキュメントは、Dynamoを起動したプロジェクト(またはファミリ)です。これは定型文なので、そういうものだと覚えてください。
ドキュメントの現プロジェクト単位の取得
project_unit = doc.GetUnits()
ドキュメントから現在のプロジェクト単位設定を取得します。
API Docsの説明【GetUnits()】
GetUnits
で検索すると様々なメソッドがでてきてよく分かりません。ですので違う手順で調べます。
まずコードを見ると、doc.GetUnits()
となっています。docは、doc=DocumentManager.Instance.CurrentDBDocument
で取得したものですね。type(doc)
で型を確認すると、Autodesk.Revit.DB.Document
であることが分かります。

ためしに、documentで検索してみましょう。
Document Class
が表示されたのでクリックすると、下図のDocument Class
が選択されました。しかし、よく見るとこれはAutodesk.Revit.Creation Namespace
と書いてあります。つまり、Autodesk.Revit.DB
ではありません。

すぐ下にAutodesk.Revit.DB Namespace
の表示がありますね。今回探したいDocumentクラスはこの中にあります。早速探してみましょう。
Document Methods
をクリックすると、中ほどにGetUnits Method
があります。これが、今回使用しているGetUnits()
です。Return Valueには、このメソッドの戻り値が示されています。The Units object.となっています。

次は、このThe Units Objectを確認しましょう。少し上にあるUnits
をクリックします。
すると、Units
クラスが表示されます。ここのRemarksを読んでみましょう。
Unitsクラスは、単位を持つ数値を文字列としてフォーマットするためのドキュメントのデフォルト設定を表します。各単位タイプの FormatOptions オブジェクトと、小数点記号や桁のグループ化に関する設定が含まれています。
Revit API Docsに記載の内容をDeepLで翻訳した文章です

正直、何やらよく分かりませんが、要は、Units
オブジェクトというのは、単位のドキュメントのデフォルト設定 = プロジェクト単位のことです。
つまり、project_unit = doc.GetUnits()
とは、ドキュメントからUnits
オブジェクト(プロジェクト単位)を取得し、project_unit
に格納した、ということです。
さて、↑の引用文にFormatOptions
という用語が出てきました。続きはproject_unit.SetFormatOptions()
のところで説明します。
get_unit_infoの戻り値(unit_info)を順番に取得
for spec_type_id, unit_type_id, accuracy, symbol_type_id in zip(
unit_info[0], unit_info[1], unit_info[2], unit_info[3]
):
for文でget_unit_info
関数の戻り値を繰り返し取得します。Dynamo用であれば、get_unit_infoの戻り値(unit_info
)は下表の内容です。
index | unit_info[0] | unit_info[1] | unit_info[2] | unit_info[3] |
---|---|---|---|---|
0 | DB.SpecTypeId.Length | DB.UnitTypeId.Meters | 0.001 | None |
1 | DB.SpecTypeId.Angle | DB.UnitTypeId.Degrees | 0.0001 | None |
2 | DB.SpecTypeId.Slope | DB.UnitTypeId.PerMille | 0.1 | DB.SymbolTypeId.PerMill |
FormatOptionsの設定
if symbol_type_id:
format_opt = DB.FormatOptions(
unit_type_id, symbol_type_id
)
else:
format_opt = DB.FormatOptions(
unit_type_id
)
symbol_type_id
(記号)に値が入力されている場合(今回だと”勾配”が該当し‰や1:を表示)、DB.FormatOptions
によりunit_type_id
(単位)とsymbol_type_id
(記号)を設定したformat_opt
というインスタンスを作成しています。
symbol_type_id
が空の場合は、unit_type_id
(単位)のみ設定します。
API Docsの説明【DB.FormatOptions()】
API Docsの見方に少し慣れてきたでしょうか。今回は、DB.FormatOptions()
となっています。ということは、FormatOptions()
はAutodesk.Revit.DB
の中にあるかな?と想像できると思います。早速見てみましょう。
無事、FormatOptionsクラスがAutodesk.Revit.DB Namespace
の中にありました。
まず、Remarksを読んでみます。
FormatOptionsクラスは、単位付き数値を文字列としてフォーマットする方法を制御する設定を含んでいます。このクラスには、通常エンドユーザーが書式設定ダイアログで選択し、ドキュメントに保存される設定が含まれています。
FormatOptionsクラスは2つの異なる方法で使用されます。UnitsクラスのFormatOptionsオブジェクトは、ドキュメントのデフォルト設定を表します。他の場所で使用される FormatOptions オブジェクトは、オプションでデフォルト設定を上書きできる設定を表します。
Revit API Docsに記載の内容をDeepLで翻訳した文章です
相変わらずよく分かりませんが、青下線の部分を読むと、プロジェクト単位の更新ができそうな気がしてきます(実際、できます)。ちなみに、Remarksには大事なことが書かれているので、コードがうまく動作しないときに読むと解決のヒントになることがあります。
さて、次は、FormatOptions Constructorをクリックします。
Descriptionを読んでみましょう。2番目(FormatOptions Constructor(ForgeTypeId)
)と4番目(FormatOptions Constructor(ForgeTypeId, ForgeTypeId)
)には下記の記載があります。これで新しい設定が作れそうです。
カスタム書式を表す新しい FormatOptions オブジェクトを作成します。
Revit API Docsに記載の内容をDeepLで翻訳した文章です

それぞれをクリックしてみましょう。下の内容が表示されます。この2つの違いは、SymbolTypeId
(記号)を入力するかどうかですね。

format_opt = DB.FormatOptions(unit_type_id, symbol_type_id)
は、get_unit_info
関数で作成したunit_type_id
(単位)とsymbol_type_id
(記号)から新たな単位設定(FormatOptions
)を作っている、ということですね。
Accuracy(精度)の設定
if accuracy:
format_opt.Accuracy = accuracy
accuracy
(精度)に値が入力されている場合の処理です。今回だと”角度が度分秒”以外のすべてが該当します。先ほど作ったformat_opt.Accuracy
の値をaccuracy
に更新しています。accuracy
にはget_unit_info
関数で定めた値が入っています。
API Docsの説明【Accuracy】
まず、format_opt
はformat_opt = DB.FormatOptions(unit_type_id, symbol_type_id)
等で作成されました。つまり、FormatOptions
クラスのインスタンスです。というわけで、FormatOptions
クラスを見てみます。すると、Accuracy Property
がありました。

Accuracy
はプロパティですので、format_opt.Accuracy
で精度値を格納する変数になるとご理解ください。format_opt.Accuracy = 数値
で精度値を更新できます。
プロジェクト単位データの更新
project_unit.SetFormatOptions(
spec_type_id,
format_opt
)
38行目で取得したproject_unit
の内容を更新しています。project_unit
には、プロジェクト単位の設定内容が格納されています。spec_type_id
はget_unit_info
関数で設定した項目(長さや角度など)です。format_opt
は、40~49行目で作成した単位・精度・記号です。
SetFormatOptions
を使用し、project_unit
の内容をspec_type_id
とget_unit_info
の内容に更新しています。
API Docsの説明【SetFormatOptions】
project_unit
はGetUnis()
で確認したとおり、Units
クラスのインスタンスです。ですので、Units
クラスを見てみましょう。メソッドのところにSetFromatOptions Method
があります。

SetFormatOPtions
には2つメソッドがあることが分かります。しかし、一方はObolete.と表示されています。旧式、ということなので表記がない方を使いましょう。Obsolete.と表記されているものは、いずれ削除されると思います。

これを見ると、SpecTypeId
とFormatOptions
を入力すれば良い、というのが分かると思います。ここで、SpecTypeId
の横にForgeTypeId
と記載されています。これは、型を示しており、SpecTypeId
はパラメータ名です。
つまり、SpecTypeId
パラメータには、ForgeTypeId
型のデータを入力すれば良いということです。

ここでForgeTypeId
をクリックし、Constructorを見てみます。するとForgeTypeId(string)
でForgeTypeId
型のデータが作れることが分かります。

つまり、今回、”長さ”を指定するのにDB.SpecTypeId.Length
としましたが、DB.ForgeTypeId("Length")
でも代用可能ということです。なお、UnitTypeId
やSymbolTypeId
もForgeTypeId(string)
で対応可能です。
# 今回作成したget_unit_info関数の抜粋(11行目)
spec_type_ids = (
DB.SpecTypeId.Length, DB.SpecTypeId.Angle, DB.SpecTypeId.Slope
)
# こちらでも動きます
spec_type_ids = (
DB.ForgeTypeId("Length"), DB.ForgeTypeId("Angle"), DB.FrogeTypeId("Slope")
)
DB.SpecTypeId.Length
とする方が何をしているかが明確なので、本サイトではこちらを使用しています。ForgeTypeId
の場合、たとえば、単位mと記号mは、DB.ForgeTypeId("Meters")
とDB.ForgeTypeId("Meter")
となり、一見では単位か記号か分かりません。
ドキュメントへの新プロジェクト単位データの登録(トランザクション)
TransactionManager.Instance.EnsureInTransaction(doc)
doc.SetUnits(project_unit)
TransactionManager.Instance.TransactionTaskDone()
ここが、Revitにデータを書き込む処理です。Revitのデータを書き換える場合(たとえば、パラメータ値の入力やファミリの配置/削除など)は、トランザクション処理をする必要があります。データを読むだけ(たとえば、パラメータ値の取得)であれば、トランザクション処理は不要です。
トランザクションのコードは、定型文と理解していただいても問題はないと思います。
##### トランザクションのソースコード #####
TransactionManager.Instance.EnsureInTransaction(doc)
# ここにRevit処理を記述
TransactionManager.Instance.TransactionTaskDone()
doc.SetUnits(project_unit)
に関しては、50行目で作成したproject_unit
インスタンスにより、ドキュメントのプロジェクト単位を更新しています。もうAPI Docsの説明は不要でしょう。
units_change.pyの解説
Dynamoから直接アクセスする実行用ファイルです。単位変換の動作確認用です。
sys
import sys
sys.path.append(r"E:\BIM\PyProjects\relib\src")
Dynamoは、relibパッケージの存在を認識していません。そのため、その場所を教えてあげるためのコードです。sys.path.append()
として、()内にsrcディレクトリまでのパスを入力します。これがないと、次のfrom relib_sbo import revit
でエラーがでます。
importlib
from relib_sbo.cmn import revit
import importlib
importlib.reload(revit)
from relib_sbo.cmn import revit
とすることで、revit.py内の関数等が使用できるようになります。
Pythonの仕様上、一度importすると、Dynamoを再起動するまで最初にimportした内容を保持します。つまり、revit.pyのソースコードを修正しても動作に影響を与えません。
開発中の場合は都合が悪いため、import内容を常に更新するようにします。importlib.reload(revit)
でそれを行っています。
INと関数の実行
for_dynamo = IN[0]
revit.set_units(revit.get_unit_info(for_dynamo=for_dynamo))
get_unit_info
関数ではブーリアンでプロジェクト単位の内容を切り替えます。for_dynamo = IN[0]
は、そのブーリアンを取り込むためのものです。Python Script From String
ノードのIN[0]にBoolean
ノードをつなぎます。
revit.set_units(revit.get_unit_info(for_dynamo=for_dynamo))
で作成した関数を実行します。
OUT
OUT = "Dynamo用のプロジェクト単位を設定しました" if for_dynamo \
else "Revit作業用のプロジェクト単位を設定しました"
処理が正常に終わったら結果を表示させます。for_dynamo
がTrue
であれば、Dynamo用を設定した旨、False
であればRevit作業用ということを表示します。
最後に
かなりの長文になってしまいました。読んでいただくのも大変ですね・・・。
こうやって記事にすることで、自分の中でも情報を整理できました。
分かりづらいところが多々あると思いますが、ご容赦ください。いずれ説明能力も向上するはずです(?)
次は、鋼箱桁取り組みの解説に入りたいと思います。
コメント(承認後に表示されます。メールアドレスは表示されません)