取り組み事例解説の第2回目です。
鋼箱桁の自動作成では、モデルの位置やパラメータ値を3本の基準線より取得します。今回解説するのは、この基準線ファミリの作成方法と配置方法です。なお、Revitバージョンは2024です。
取り組み事例の内容は、こちらをご覧ください。

概要
道路・鉄道の設計では、中心線は線形計算用ソフトで作成していると思います。もし、そのソフトで線形の3Dモデルをdwg形式で作成可能であれば、Revitへはそのまま取り込めば良いです。
今回は、dwgデータがないため、座標値から基準線ファミリを作成しこれをRevitに配置します。
作成する基準線は、基準線_CL、基準線_G1、基準線_G2の3本です。

この基準線をどのように活用するかは、こちらをご覧ください。

基準線作成のソースコードとグラフ
まずはソースコードやグラフをすべて記載しておきます。なお、SBO式の開発環境を前提としています。
Dynamo+Pycham+Pythonという少し変わった環境で開発をしています。詳細はこちらをご覧ください。

全体構成
実行ファイル名は、create_center_crv_family.pyです。
relibパッケージ内にexcel.py, family.py, revit.pyを作成します。

Dynamoグラフ
ノード名が確認できるようにDynamoプレーヤ用の処理は行っていません。

create_center_crv_family.py
Dynamoで読み込む実行用ファイルです。
Pycharmプロジェクトの構成

ソースコード
import sys
sys.path.append(r"E:\BIM\PyProjects\relib\src")
from relib_sbo.cmn import excel
from relib_sbo.cmn import family
import importlib
importlib.reload(excel)
importlib.reload(family)
excel_path = IN[0]
template_path = IN[1]
directory_path = IN[2]
file_name = IN[3]
# エクセルから情報取得
df = excel.get_df_multi_idx(excel_path, "ベース")
# 線形ファミリを作成し、保存
family.create_center_line_family(
template_path, directory_path, file_name+"_CL", df.loc["CL"]
)
family.create_center_line_family(
template_path, directory_path, file_name+"_G1", df.loc["G1"]
)
family.create_center_line_family(
template_path, directory_path, file_name+"_G2", df.loc["G2"]
)
OUT = "基準線ファミリを作成しました"
excel.py
Excelデータ読み込み用のモジュールです。
Pycharmプロジェクトの構成

ソースコード
import pandas as pd
def get_df_multi_idx(filepath, sheet_name, header=0, index_col1=0, index_col2=1):
df = pd.read_excel(
filepath, sheet_name, header=header, index_col=[index_col1, index_col2]
)
df.drop([col for col in df.columns if "Unnamed" in str(col)], axis="columns", inplace=True)
return df
family.py
ファミリ操作用のモジュールです。
Pycharmプロジェクトの構成

ソースコード
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
from relib_sbo.cmn import revit
import importlib
importlib.reload(revit)
def create_center_line_family(
template_path: str,
save_directory_path: str,
file_name: str,
df,
):
doc, save_path = revit.create_family_document(
file_name, save_directory_path, template_path
)
feet = 0.3048
ref_pt_array = DB.ReferencePointArray()
ts = DB.Transaction(doc, "ts")
ts.Start()
for col in df.columns:
xyz = DB.XYZ(df[col]["X"]/feet, df[col]["Y"]/feet, df[col]["Z"]/feet)
ref_pt_array.Append(
doc.FamilyCreate.NewReferencePoint(xyz)
)
doc.FamilyCreate.NewCurveByPoints(ref_pt_array)
ts.Commit()
ts.Dispose()
doc.SaveAs(save_path)
doc.Close(False)
revit.py
Revit操作用のモジュールです。
Pycharmプロジェクトの構成

ソースコードは、以前ご紹介したプロジェクト単位の自動切替の部分も含めます。まだそれほど長くないので良いですが、いずれ行数が増えた場合にどのように紹介すれば良いのか、やや不安です。
今回追加した部分は、解説のところで紹介します。
import os
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
from Autodesk.Revit import Exceptions
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()
def create_family_document(
file_name: str,
save_directory_path: str,
template_path: str
):
uiapp = DocumentManager.Instance.CurrentUIApplication
new_file_name = file_name + ".rfa"
save_path = os.path.join(save_directory_path, new_file_name)
try:
doc = uiapp.Application.OpenDocumentFile(save_path)
except Exceptions.FileNotFoundException:
doc = uiapp.Application.NewFamilyDocument(template_path)
else:
doc.Close(False)
os.remove(save_path)
doc = uiapp.Application.NewFamilyDocument(template_path)
return doc, save_path
基準線ファミリ作成の解説
ここからは解説です。基準線ファミリの作成手順に沿って説明します。

座標データの作成
最初に、線形モデルのベースとなる座標データを用意します。これは、Excelで作成します。
座標データは、原点を(0, 0, 0)とした小座標系とします。A列に線形の名前、B列にはX,Y,Zと表記します。1行目には各地点の名称を記載し、あとはそれぞれの座標値を入力します。

座標値のシート名は、”ベース”としてください。このシート名を変更したい場合は、ここのコードを修正してください。
また、座標値表に記載する線形の名称は、CL, G1, G2としています。もし、この名称を変更したい場合は、ここのコードを修正してください。上の表では、G1RやG2Lといった名前も表示されていますが、これらは基準線ファミリ作成には必要ありません。一方、G2は表示されておりませんが、必要です。
なお、座標の間隔を狭くするほど、線形モデルの精度が向上します。設計内容により求められる精度が変わりますが、座標間隔を0.1mとすれば、ほとんどの場合で設計上十分な精度を確保できると思います。
excel.pyの解説-座標データの読み込み-
excel.pyは、Excelを読み書きするためのモジュールです。今回は、座標データを読み込みデータフレームを作成する関数を作ります。

Excelデータの読み書きは、Pandasを使用します。
ほかにも、openpyxlやpywin32、Data.ImportExcelノード等でも可能ですが、CPython3を使用するならPandasがもっとも良いと思います。これは、データの整形機能に優れているためです。
と、分かっている風な書きっぷりをしましたが、本当はずっとpywin32を使用していました。Revit2024よりPandasが標準インストールされるようになったため、乗り換えました。そのため、Pandasはまだ勉強中です。ただ、CPython3ならPandasがベストは、たぶん本当だと思います。
それでは、ソースコードを解説します。コード > 解説の順で示します。
import pandas
import pandas as pd
pandasをインポートしています。pandasは、pdで略すのが世界共通の作法らしいです。
get_df_multi_idx関数とpd.read_excel()
def get_df_multi_idx(filepath, sheet_name, header=0, index_col1=0, index_col2=1):
df = pd.read_excel(
filepath, sheet_name, header=header, index_col=[index_col1, index_col2]
)
関数の宣言とpandasデータフレームの作成をしています。
引数の解説です
- filepath
-
Excelファイルのパスを入力します。
- sheet_name
-
Excelファイルのシート名を入力します。
- header
-
データフレームの列名となる行を指定します。今回は1行目です(Pythonの0は、Excelの1行目です)。
- index_col1, index_col2
-
こちらは、列を指定します。0列(A)と1列(B)を指定します。
データフレームは、マルチインデックスで作成します。DynamoでいうL3リストに近いです。マルチインデックス化することで、各線形(G1やCL等)の各座標値を指定して取得できるようになります。
データフレームから欲しい値を取得する流れを説明します
- df = pd.read_excel(マルチインデックス)で取得したデータ
-
dfには下表のデータが入っています。
C1 C2 C3 C4 名前 座標 G1 X 数値1 数値2 数値3 数値4 Y 数値5 数値6 数値7 数値8 Z 数値9 数値10 数値11 数値12 G1R X 数値13 数値14 数値15 数値16 Y 数値17 数値18 数値19 数値20 Z 数値21 数値22 数値23 数値24 - df.loc[“G1R”]とすると
-
G1Rのデータのみ抽出できます。
C1 C2 C3 C4 座標 X 数値13 数値14 数値16 数値16 Y 数値17 数値18 数値19 数値20 Z 数値21 数値22 数値23 数値24 - df.loc[“G1R”][“C2”]とすると
-
G1Rの中のC2を抽出できます。
-
座標 X 数値14 Y 数値18 Z 数値22 - df.loc[“G1R”][“C2”][“Z”]とすると
-
数値22を取得できます。
データフレームの整形とreturn
df.drop([col for col in df.columns if "Unnamed" in str(col)], axis="columns", inplace=True)
return df
データフレームの整形をしています。
もし、座標データ(Excel表)にヘッダーが空欄の列があった場合、その列全体を削除しています。これは、下表のようにExcel表にメモ書き等があった場合などを想定しています。

まず、pd.read_excel()の解説ですが、もしExcel表のヘッダー欄が空欄だった場合、自動的にUnnamedという名称が与えられます。たとえば、下の左表からデータフレームを作成すると右表のようになり、空欄の箇所にはUnnamed: 2とUnnamed: 3というヘッダー名が付与されます。
header | a | ||
数値 | 1 | 2 | 3 |
a | Unnamed: 2 | Unnamed: 3 |
1 | 2 | 3 |
このため、ヘッダーが空欄かどうかは、ヘッダー名にUnnamedがあるかどうかを確認すれば分かります。
この確認を行っているのが[col for col in df.columns if "Unnamed" in str(col)]
です。for col in df.columns
で順番にヘッダー名を取得し、if "Unnamed" in str(col)
でヘッダー名にUnnamedが含まれているかを確認しています。含まれていた場合は、そのヘッダー名がリスト化されます。もし、上の右表であれば、ヘッダー名リストとして[Unnamed: 2, Unnamed: 3]が作成されます。
データフレームから列を削除する処理が、df.drop([削除対象のヘッダー名], axis="columns", inplace=True)
の部分です。axis="columns"
は、削除対象がヘッダー名であることを意味します。inplaceはデータフレームのコピーを作成するかどうかです。今回は、データフレームそのものを削除すれば良い(コピーを作成しない)ため、inplace=True
としています。
最後に、return df
で取得したデータフレームを返します。
revit.pyの解説-ファミリドキュメントの作成-
次は、revit.pyに新たなファミリドキュメントを作成する関数を作ります。

revit.pyには、既に紹介済みのプロジェクト単位切り替え用コードも記述されています。この部分の解説は省略し、追加した部分のみ解説します。
プロジェクト単位切り替えの解説はこちらをご覧ください。なお、今回、プロジェクト単位の切り替え処理は行いません。

import
import os
from Autodesk.Revit import Exceptions # 6行目
osとExceptionsをインポートします。osは、Pythonの標準モジュールで、主にファイルやディレクトリの操作を行います。Exceptionsは、Revitの例外をまとめたものです(例外とは何かはこちらでご確認ください。python公式チュートリアルです)。try文のexceptで使用します。
create_family_document関数の宣言
def create_family_document(
file_name: str,
save_directory_path: str,
template_path: str
):
新たなファミリドキュメントを作成するための関数を作ります。
引数の解説です
- file_name
-
作成するファミリのファイル名です。
- save_directory_path
-
作成したファミリを保存するディレクトリの場所です。
- template_path
-
作成するファミリのテンプレートを指定します。
Revitアプリケーション操作の準備
uiapp = DocumentManager.Instance.CurrentUIApplication
今回の処理では、新たなドキュメントを作成するなどRevitアプリケーションの操作を行う必要があります。これは、その準備です。このコードは、定型文と理解して問題ありません。
uiapp.Application
でRevitアプリケーションを操作することができるようになります。詳細は後述します。
前処理
new_file_name = file_name + ".rfa"
save_path = os.path.join(save_directory_path, new_file_name)
new_file_name = file_name + ".rfa"
は、file_nameに拡張子(.rfa)をつけています。
save_path = os.path.join(save_directory_path, new_file_name)
は、作成したファミリを保存するパスを作成しています。
save_pathでドキュメントを開けるか確認
try:
doc = uiapp.Application.OpenDocumentFile(save_path)
doc = uiapp.Application.OpenDocumentFile(save_path)
は、先ほど作成したsave_path
でドキュメントを開くことを試みています。言い方を変えると、save_path
のドキュメントが存在するかを確認しています。開ける(存在する) or 開けない(存在しない)で今後の処理を分けるため、tryを使用しています。
apidocs.coの説明
今回は、apidocs.coで説明します。前回使用したRevit API Docsとは異なるサイトですが、両方ともGui Talaricoさんが管理されているようです。
まず、前段のuiapp = DocumentManager.Instance.CurrentUIApplication
を確認しましょう。このコードは、Revitアプリケーションを操作したい場合に使用します。作成したuiapp
の型を確認すると、Autodesk.Revit.UI.UIApplication
であることが分かります。

では、uiapp.Application
の意味を確認しましょう。apidocs.coでAutodesk.Revit.UI.UIApplication
を見ると、Propaertiesの中にApplicationプロパティが確認できます。これは、Applicationオブジェクトを取得できる、という意味です。

赤字のApplicationをクリックすると、Autodesk.Revit.ApplicationServices
のApplication
クラスに飛びます。

この中には、様々なメソッド等があることが分かります。NewProjectDocument
など、メソッド名だけで何ができるか分かりそうなものもあります。今回使用しているOpenDocumentFile
もありました。

OpenDocumentFileには3種類の記述方法があるようですが、今回使用しているのは、OpenDocumentFile(String)です。Stringには、開きたいドキュメントのパスを入力します。

ドキュメントを開けなかった場合
except Exceptions.FileNotFoundException:
doc = uiapp.Application.NewFamilyDocument(template_path)
開けなかった場合の処理です。tryを使用しているため、開けなかったとしても即座にエラーとはなりません。except Exceptions.FileNotFoundException:
は、もしFileNotFoundException
という例外が発生したら次の処理をしてね、という意味です。FileNotFoundException
は、ファイルが存在しないとき/見つからないときに発生する例外です。
その時にどんな処理をするかというと、doc = uiapp.Application.NewFamilyDocument(template_path)
です。template_path
で示されたファミリテンプレートを使用し、新しいファミリドキュメントを作成します。なお、ファミリテンプレートは、一般モデル_アダプティブを指定します。
apidocs.coの説明
まず、Exceptions.FileNotFoundException
です。先ほど確認したOpenDocumentFileメソッドの説明を確認します。すると、例外(Exceptions)の一覧が記載されているので、この中から該当するものを使用します。

次に、doc = uiapp.Application.NewFamilyDocument(template_path)
です。uiapp.Application
まではOpenDocumentFile
メソッドと同じということから、これもAutodesk.Revit.ApplicationServices.Application
の中にありそうだということが分かります。string
にファミリテンプレートのパス(template_path
)を入力すれば、これに従いファミリドキュメントを作成します。

ドキュメントが開けた場合
else:
doc.Close(False)
os.remove(save_path)
doc = uiapp.Application.NewFamilyDocument(template_path)
今度は、ドキュメントが開けた場合です。
まず、doc.Close(False)
で開いたドキュメントを閉じます。(False)は、上書き保存しないことを意味します。
次に、os.remove(save_path)
でそのドキュメントを削除します。
最後に、先ほどと同じくdoc = uiapp.Application.NewFamilyDocument(template_path)
で新たなファミリドキュメントを作成します。
return
return doc, save_path
作成したファミリドキュメント(doc)とファミリドキュメントの保存場所(save_path)を返します。これで、この関数の処理は終わりです。
family.pyの解説-基準線ファミリの作成-
ここでは、基準線ファミリを作成する関数を作成します。

import
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
from relib_sbo.cmn import revit
import importlib
importlib.reload(revit)
APIを使用するため、Autodesk.Revit.DB
をインポートします。また、先ほど作成したcreate_family_document
関数等を使用するため、relib.sbo.cmn.rebit
もインポートします。こちらは、開発中のためimportlib.reload()
を使用します。
create_center_line_family関数
def create_center_line_family(
template_path: str,
save_directory_path: str,
file_name: str,
df,
):
基準線ファミリを作成するための関数を作ります。
引数の解説
- template_path
-
先ほど作成した
create_family_document
関数で使用するtemplate_path
です。ファミリテンプレートのパスを入力します。 - save_directory_path
-
こちらも
create_family_document
関数で使用する引数です。ファミリドキュメントを保存するディレクトリを入力します。 - file_name
-
これも
create_family_document
関数用です。ファミリドキュメントの名前を入力します。 - df
-
excel.pyの
get_df_multi_idx
関数で作成したデータフレームを入力します。
ファミリドキュメントの作成
doc, save_path = revit.create_family_document(
file_name, save_directory_path, template_path
)
revit.pyに作成したcreate_famly_document
関数でファミリドキュメント(doc)とその保存場所(save_path)を作成します。
基準線ファミリの作成
feet = 0.3048
ref_pt_array = DB.ReferencePointArray()
ts = DB.Transaction(doc, "ts")
ts.Start()
for col in df.columns:
xyz = DB.XYZ(df[col]["X"]/feet, df[col]["Y"]/feet, df[col]["Z"]/feet)
ref_pt_array.Append(
doc.FamilyCreate.NewReferencePoint(xyz)
)
doc.FamilyCreate.NewCurveByPoints(ref_pt_array)
ts.Commit()
ts.Dispose()
少し長いですが、まとめて解説します。基準線ファミリの作成手順は、以下のとおりです。
- データフレームから座標値を抽出
- 座標値から点を作成
- 点から参照点を作成し、配列に格納する
- 参照点間を滑らかに結ぶ曲線を作成し、これを基準線ファミリとする。
①~➂を行っているのが、24行目から始まるfor文です。まず、for col in df.columns:
でデータフレームのヘッダー(下図赤枠)を順番に取り出します。df[col]
で下図青枠を取得できるので、あとはdf[col]["X"]
としてX, Y, Z値を取得します。

そして、xyz = DB.XYZ(df[col]["X"]/feet, df[col]["Y"]/feet, df[col]["Z"]/feet)
で座標値から点を作成しています。座標値はm単位のため、0.3048で割りfeetに変換しています(20行目で変数feetには0.3048を代入しています)。
次にref_pt_array.Append(doc.FamilyCreate.NewReferencePoint(xyz))
で、作成した点から参照点を作成し、それをref_pt_arrayに挿入し配列を作成しています。なお、ref_pt_array
の型は、ReferencePointArray
である必要があるため、21行目のref_pt_array = DB.ReferencePointArray()
が必要です。ref_pt_array = []
でリストとするのは不可です。
④の基準線ファミリ作成は、29行目のdoc.FamilyCreate.NewCurveByPoints(ref_pt_array)
です。ref_pt_array
を基に3D曲線を作成しています。
ts = DB.Transaction(doc, "ts")
等の22, 23, 30, 31行目は、トランザクションです。これは後述します。
apidocs.coの説明
まずは、29行目で使用しているdoc.FamilyCreate
を確認しましょう。すると、FamilyItemFactory
というオブジェクトを取得できることが分かります。下図のFamilyItemFactory
(赤枠部分)をクリックしてみます。

すると、Autodesk.Revit.Creation
のFamilyItemFactory
クラスの説明に飛びます。様々なメソッドがありますが、その中に、今回使用しているNewCurveByPoints
メソッドがあります。

これをクリックすると、NewCurveByPoints
は、ReferencePointArray
を基に作成できることが分かります。では、ReferencePointArray
をクリックします。

Constructorにあるとおり、ReferencePointArray()
とすればインスタンスを作成できるので、ソースコードの21行目のようにref_pt_array = DB.ReferencePointArray()
とし、参照点の配列の枠を作ります。そして、ReferecePointArray
のメソッドにあるAppend
を使えば、その配列に点を挿入していくことが可能です。

次は、参照点(ReferencePoint
)の作成方法です。NewCurveByPoints
と同様にFamilyItemFactory
の中にNewReferencePoint
メソッドがあります。

作り方は3通りあるようですが、今回は、NewReferencePoint(XYZ)を使用します。

Autodesk.Revit.DB.XYZ
のConstructorを確認すると、XYZの作成方法が確認できます。

トランザクションについて
Dynamoでのトランザクションの基本形は、下のコードです。
import clr
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
TransactionManager.Instance.EnsureInTransaction(doc)
# ここにRevit処理を記述
TransactionManager.Instance.TransactionTaskDone()
これは、ドキュメントをdoc = DocumentManager.Instance.CurrentDBDocument
で取得した場合に利用できます。つまり、ほとんどの場合で利用できるはずです。
一方、今回のドキュメント取得方法はdoc = uiapp.Application.OpenDocumentFile(save_path)
でした。このように、uiapp.Application経由でドキュメントを取得した場合、上のトランザクションではエラーが発生する場合があります。
まだトランザクションの仕組みは理解できておらず、原因を正確に説明できないため、対処法のみ紹介します。APIのトランザクションを使用すれば、エラーは発生しません。
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit import DB
ts = DB.Transaction(doc, "ts")
ts.Start()
# ここにRevit処理を記述
ts.Commit()
ts.Dispose()
コードは定型文のため、解説は省略します。
ドキュメントの取得方法により、トランザクションを使い分ける必要があることを覚えておいてください。
ファミリの保存
doc.SaveAs(save_path)
doc.Close(False)
doc.SaveAs(save_path)
で作成したファミリを保存し、doc.Close(False)
でファミリドキュメントを閉じます。以上で基準線ファミリ作成用の関数ができました。
create_center_crv_family.pyの解説
最後に、Dynamoからアクセスするcreate_center_crv_family.py
の解説です。
import
import sys
sys.path.append(r"E:\BIM\PyProjects\relib\src")
from relib_sbo.cmn import excel
from relib_sbo.cmn import family
import importlib
importlib.reload(excel)
importlib.reload(family)
sysやimportlibの解説は、こちらをご覧ください。
IN
excel_path = IN[0]
template_path = IN[1]
directory_path = IN[2]
file_name = IN[3]
IN[0]~[3]には、それぞれノードをつなぎます。つなぐノードはこちら(今回のグラフです)をご覧ください。
それぞれおさらいしておきます。
- excel_path
-
座標値が入力されているExcelファイルのパスです。ファイル名まで指定します。
- template_path
-
ファミリテンプレート(一般モデル_アダプティブ)のパスです。Revitのバージョンにより場所が変わります。Revit2024であれば、C > ProgramData > Autodesk > RVT2024 > Family Templates > Japaneseの中にあります。
なお、ProgramDataフォルダは隠しフォルダのため、表示されない場合があります。その際は、エクスプローラの隠しファイルにチェックを入れてください。
- directory_path
-
作成する基準線ファミリの保存場所です。
- file_name
-
作成する基準線ファミリの名前です。ここで指定した名称に_CL, _G1, _G2をそれぞれ加えた3つのファミリが作成されます(たとえば、file_nameと指定したら、file_name_CL, file_name_G1, file_name_G2ができます)。
データフレームの作成
df = excel.get_df_multi_idx(excel_path, "ベース")
excel.pyに作成したget_df_multi_idx()を使用し、データフレームを作成します。
“ベース”は、Excelのシート名です。今回は、コードに手書きとしていますが、必要によりノードで入力するなどしてください。
基準線ファミリの作成
family.create_center_line_family(
template_path, directory_path, file_name+"_CL", df.loc["CL"]
)
family.create_center_line_family(
template_path, directory_path, file_name+"_G1", df.loc["G1"]
)
family.create_center_line_family(
template_path, directory_path, file_name+"_G2", df.loc["G2"]
)
OUT = "基準線ファミリを作成しました"
family.pyのcreate_center_line
関数を呼び出して、基準線ファミリを作成します。
ファミリの名前は、ここでfile_name+"_CL"
のように”_CL”, “_G1”, “_G2″を付記しています。ファミリの名前を変えたい場合は、ここを修正します。
データフレームは、df.loc["CL"]
等とし、必要な部分だけcreate_center_line
関数に入力しています。”CL”の部分は、Excelの座標値表と一致している必要があります。もし、座標値表で異なる名称を使用する場合は、ここも修正します。
基準線ファミリの配置
最後に、できあがった基準線ファミリの配置方法を解説します。
基準線ファミリは、(0, 0, 0)を基点として作成しています。そのため、プロジェクト基準点に配置すれば良いです。

もし、プロジェクト基準点が表示されていない場合は、表示/グラフィックスの上書きからこれを表示させます。

また、必要により、ビュー範囲を調整してください(表示範囲が狭い場合、線形が表示されないことがあります)。

最後に
コードの解説は難しいです。分かりづらい部分が多々あると思います。
分かりづらい部分は、コメント等いただければできる限り対応いたします。
次回は、ようやくファミリ作成に入ります。まずは、主桁ファミリのウェブを解説する予定です。
コメント(承認後に表示されます。メールアドレスは表示されません)