本サイトの方針です。
構成
以下の4部構成を考えております。
- 取り組み事例の紹介
-
生産性向上を目的としたBIM/CIMの取り組みを紹介します。
- 事例の解説
-
紹介した事例をどのようにして実現したかを解説します。本サイトのメインコンテンツです。
- ノウハウの紹介
-
RevitやDynamo等のノウハウをご紹介します。
- SBOについて
-
SBOの紹介や雑談的な内容はこちらに分類します。
解説レベル
本サイトでは、Revitに関して様々な解説をしますが、実践的な内容を多く紹介したいと思っています。
そのため、事細かな説明はしない予定です。たとえば、どこどこのアイコンをクリックする、というような説明はあまりしないと思います。
Revitのバージョン
Revitのバージョンは、2024以降を対象とします。
この理由は、Excelとのデータ入出力にPandasを使用するためです。Revit2024より、Pandas等のライブラリもインストールされるようになりました。
- Rvit2022/2023を使用する場合
-
この場合、下記の方法でPandasをインストールするか、Excel用ノードで代用していただく必要があります。リンク先は、GitHubのDynamo Wikiです。
Customizing Dynamo’s Python 3 installation · DynamoDS/Dynamo Wiki · GitHub
- Revit2021以前を使用する場合
-
申し訳ございませんが、SBOでは対応不可能です。
この理由は、私たちはCpython3で検討しているためです。2021以前は、IronPython2であり、これには精通していないためアドバイスができません。
IronPython2とCpython3の互換性に関しては、この記事が詳しいと思います。まだ内容を理解していないですが、いずれ勉強するかもしれないため、自分のためにもリンクを貼っておきます。こちらもGitHubのDynamo Wikiです。
https://github.com/DynamoDS/Dynamo/wiki/Work-in-progress-to-improve-Python-3-support
作成するツール
設計の生産性向上を図るには様々なツールを用意する必要があります。
ツール作成にあたっての方針は次のとおりです。
ツールの実行手段
Revitにはツールを実行する方法がいくつか用意されていますが、Dynamoプレーヤを使用します。
また、設計要素(設計者が定める数値等)はExcelで管理し、Dynamoを介してデータをやりとりします。
テキスト or ビジュアル
Dynamoプレーヤを使用しますが、プログラミングをすべてノードで行う、ということではありません。
ビジュアルプログラミングは、とっつきやすく初心者がプログラミングになじむことには向いていますが、高度化には不向きです。具体的には、次のような欠点があります。
- 判断(if)や繰り返し処理(for, while)が苦手
- 簡素化が難しく、複雑になりがち
- APIにアクセスできない
よって、SBOではほぼテキストでコードを作成します。
ノードを使用するのは、Pythonコードの読み込み&実行用とインタフェース用のみです。インタフェース用ノードは、用途により数が変わります。下図がグラフの基本形です。

APIについて
ある処理をするとき、APIを使用するか、それともDesign ScriptやRevit.Elementsを使用するか、その線引きは悩みます。
今のところ、明確な線引きはせず両方使用したいと思っています。悪く言えば、その日の気分次第で使い分けます。前向きにとらえれば、両方を学ぶ機会が得られます。
それぞれの特徴は下記のようなところでしょうか。
項目 | API | Design Script / Revit.Elements |
---|---|---|
処理 | なんでもできる | できない処理がある |
メソッド | ノードとは異なる | ノードと同じなので分かりやすい |
Dynamo画面 | 図形を表示させるのにひと手間必要 | 図形を表示可能 |
単位 | フィート&ラジアン固定 | プロジェクトと同じ |
方針に関して述べたいことは、以上です。
以下は、おまけです。
(参考)APIとDesing Scriptの例
APIとDesign Scriptの違いを少しだけ見てみましょう。
以下にグラフとコード(APIとDesing Script)を示します。Dynamoを立ち上げたプロジェクトの”プロジェクト単位:長さ”がmmであれば、実行結果はどれも同じです。

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript import Geometry as geo
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Design Script
point1_ds = geo.Point.ByCoordinates(0, 0, 0)
point2_ds = geo.Point.ByCoordinates(20, 0, 0)
line_ds = geo.Line.ByStartPointEndPoint(point1_ds, point2_ds)
# API
point1_api = DB.XYZ(0, 0, 0)
point2_api = DB.XYZ(20/1000/0.3048, 0, 0)
line_api = DB.Line.CreateBound(point1_api, point2_api).ToProtoType()
# 出力を OUT 変数に割り当てます。
OUT = line_ds, line_api
- Desing Script
-
コードの記述がノードと同じで分かりやすいです。
数値入力は、20と入っているだけです(ノードもそうですね)。プロジェクト単位の長さがmmであれば20mmの線、mであれば20mの線を作図します。
- API
-
ノードとは異なるメソッド(XYZやCreateBound)を使用する必要があります。
数値入力は、フィート換算する必要があります。20mmの線を作成するなら、20/1000/0.3048という処理が必要になります。/1000でm ⇒ mmとし、/0.3048でmm ⇒ feetになります。
Dynamo画面に図形を表示させるひと手間というのは、11行目の
clr.ImportExtensions(Revit.Elements)
と21行目の.ToProtoType()
です。これらの詳しい解説は下記にあります。例によって、こちらもGitHubのDynamo Wikiです。
https://github.com/DynamoDS/Dynamo/wiki/Python-0.6.3-to-0.7.x-Migration
コメント(承認後に表示されます。メールアドレスは表示されません)