Dynamo実行時のプロジェクト単位の切り替え

今回のテーマは、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単位の図面を作成することがある
プロジェクト単位が”mm”の場合

道路・鉄道用途で使用するとき、小・中は範囲が狭すぎて問題外ですし、大や特大も最適とは言えないと思います。たとえば、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”にしてしまうと、今度は設計者から反発がありそうです。図面の寸法表記がすべて”m”になる、というのは受け入れられないと思います。

ではどうするかというと、通常は”mm”としておき、Dynamo実行時のみ”m”とすれば良いのですが、いちいち手動で切り替えるのは億劫です。

そこで、Dynamo実行時、自動でプロジェクト単位を切り替える方法をご紹介します。

プロジェクト単位の切り替え内容

通常時とDynamo実行時でプロジェクト単位を切り替えます。”長さ”以外も切り替えることが可能なので、”角度”と”勾配”も切り替えてみます。

それぞれプロジェクト単位は以下の設定とします。なお、下表の”精度”は、少数の表示範囲を示します。記号は、寸法値表記等をしたときに表示する記号です。

通常時
項目単位精度記号
長さmm1
角度度分秒
勾配1:比率0.011:
Dynamo実行時
項目単位精度記号
長さm0.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.Metersm0.001Noneなし
DB.UnitTypeId.Degrees°0.0001Noneなし
DB.UnitTypeId.PerMille0.1DB.SymbolTypeId.PerMille

UnitTypeIdSymbolTypeIdの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.Millimetersmm1Noneなし
DB.UnitTypeId.DegreesMinutes度分秒なしNoneなし
DB.UnitTypeId.OneToRatio1:比率0.01DB.SymbolTypeId.OneColon1:

戻り値の設定

    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)は下表の内容です。

indexunit_info[0]unit_info[1]unit_info[2]unit_info[3]
0DB.SpecTypeId.LengthDB.UnitTypeId.Meters0.001None
1DB.SpecTypeId.AngleDB.UnitTypeId.Degrees0.0001None
2DB.SpecTypeId.SlopeDB.UnitTypeId.PerMille0.1DB.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_optformat_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_idget_unit_info関数で設定した項目(長さや角度など)です。format_optは、40~49行目で作成した単位・精度・記号です。

SetFormatOptionsを使用し、project_unitの内容をspec_type_idget_unit_infoの内容に更新しています。

API Docsの説明【SetFormatOptions】

project_unitGetUnis()で確認したとおり、Unitsクラスのインスタンスです。ですので、Unitsクラスを見てみましょう。メソッドのところにSetFromatOptions Methodがあります。

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

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

つまり、SpecTypeIdパラメータには、ForgeTypeId型のデータを入力すれば良いということです。

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

つまり、今回、”長さ”を指定するのにDB.SpecTypeId.Lengthとしましたが、DB.ForgeTypeId("Length")でも代用可能ということです。なお、UnitTypeIdSymbolTypeIdForgeTypeId(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_dynamoTrueであれば、Dynamo用を設定した旨、FalseであればRevit作業用ということを表示します。

最後に

かなりの長文になってしまいました。読んでいただくのも大変ですね・・・。

こうやって記事にすることで、自分の中でも情報を整理できました。

分かりづらいところが多々あると思いますが、ご容赦ください。いずれ説明能力も向上するはずです(?)

次は、鋼箱桁取り組みの解説に入りたいと思います。

コメント(承認後に表示されます。メールアドレスは表示されません)

コメントする

目次