ArchicadのPLNファイル形式
PLNに保存される内容と、当ビューアーのリーダーによる読み取りを説明します。技術的な記述は、Archicadのサンプルファイルを実測したリバースエンジニアリングと、解析したレコードや形状の検証に基づきます。
無料のローカル表示。インストール、アップロード、アカウントは不要です。
PLNプロジェクトに含まれる内容
Archicadはプロジェクトに.pln、プロジェクトアーカイブに.plaを使います。PLNはモデルと生成された表示に加え、設定、属性、ライブラリ参照を保存します。アーカイブには参照リソースもまとめられます。Graphisoftのプロジェクトファイルの種類に関する公式ドキュメントで各形式の役割が説明されています。
リーダーの出発点は保存されたデータベースです。有効なオブジェクトが保存時点の状態を示し、関係によって建物要素と補助レコードが結び付けられます。壁の読み取りには、平面形状、配置、階との関係、開口などの複数レコードが必要になることがあります。
ROFコンテナーと有効なディレクトリー
実測したファイルは、末尾の空白を含む8バイトのASCII署名ROF FDB で始まります。ROFはRandom Object File、BLはBLockを意味します。実測した配置ではヘッダーが32バイトを占め、最初のBL割り当てはバイト位置32から始まります。割り当ての範囲は16バイト単位です。
| フィールド | サイズ | リーダーでの用途 |
|---|---|---|
| タグ | 2バイト | ディレクトリーエントリーの枠組みを識別します。 |
| 割り当てポインター | 8バイト | データベースの基準位置に対する割り当て位置を、割り当て単位で示します。 |
| 割り当てサイズ | 4バイト | 割り当て範囲を単位数で示します。 |
| オブジェクトGUID | 16バイト | 割り当てに対応する有効なオブジェクトを識別します。 |
保存ファイルには、過去のディレクトリーのスナップショットや古い割り当ても含まれます。リーダーは有効なエントリーをたどり、参照先の識別情報と範囲を検証します。これにより、解析したオブジェクトを現在の保存状態に対応付けます。
QuickLZ圧縮の2つの保存層
物理層ではBL割り当てと圧縮グループが交互に現れます。実測したグループには、展開後のバイト数、チャンク数、長さ付きのQuickLZチャンク、配置調整用の末尾領域があります。外側のチャンクは最大1 MiBに展開され、独立した辞書を使用します。展開すると論理BLヒープが得られます。
個々の割り当て内容には、生のバイト列、ゼロバイトのマスク、別のQuickLZチャンク列という3種類の符号化が観察されています。マスクは保存されるバイトとゼロに展開するバイトを示します。内側のチャンクは最大256 KiBに展開され、その境界が画像やオブジェクトレコードの途中に来ることがあります。
QuickLZヘッダーには3バイトと9バイトの形式があります。Archicad 29で作成したプロジェクトの短いヘッダーチャンクから、両方への対応が必要と確認しました。レコードを解釈する前に、消費した圧縮バイト数と宣言された展開長を検証します。長さ情報の隣にあるメタデータワードの意味は未解明で、リーダーは検証済みの構造チェックに基づいて処理します。
ODBレコードが要素とデータを結び付ける仕組み
Object Database、略してODBは、オブジェクトの識別とクラスの識別を分けています。オブジェクトGUIDは保存された1個のオブジェクトを、クラスGUIDはレコードの種類を示します。調査対象で検証した記述子は、クラスGUIDをWall、Beam、Column、スラブのCeil、モルフのVBElem::FreeShapeなどに対応付けます。記述子にはシリアル化されたバージョン情報もあります。
オブジェクトは関連付けによって接続されます。実測した単一参照のエントリーには、操作コード、関連付けGUID、参照先オブジェクトGUIDがあります。ほかの形式には件数と複数の参照先GUIDがあります。関連付けの宣言は端点の役割を示すことがあり、各オブジェクトの末尾領域が実際の接続先を示します。
一部の旧形式の壁レコードには、利用できる平面形状が直接格納されています。Archicad 29で作成した検証用プロジェクトの壁では、接続先のVBD::WallVRDDataに平面形状があります。検証した関係をたどってポリゴンを取得し、配置、鉛直方向の範囲、対応する開口との関係を確認してから壁面を生成します。
埋め込みプレビューは独立したプロジェクトレコード
実測したコンテナーにはプレビュー専用レコードがあります。画像が保存されていれば、展開した内容からPNGを抽出できます。レコードがあっても画像フィールドが空の場合があり、利用できるかは保存されたプロジェクトによります。
プレビューは保存済みの視覚的な参照です。3Dシーンはモデルレコードから組み立てられ、異なる視点から確認できます。パビリオンのPLNデモで、解析した建物の屋根、壁の開口、地形を探索してください。
ブラウザーのリーダーが描画できる範囲
対応する形状は、ドアや窓の開口部を壁の厚さ方向にくり抜いた壁、スラブ、勾配屋根、ゾーン、梁、柱、モルフ、メッシュ、地形です。ドアと窓への対応は、配置先の壁に設けられた開口の切り抜きを指します。保存されている場合は、埋め込みのプロジェクトプレビューも抽出します。表示範囲は、要素のレコードと保存された形状表現によって異なります。
Archicad 25、27、29のファイルを解析し、動作を確認しています。各要素に保存された表現によって、表示できる形状が決まります。レビューに必要な要素が表示されているか確認してください。
リーダーは必要なバイト範囲にアクセスし、対応する形状に必要なレコードを解凍します。解析はブラウザー内で行い、シーンの単位はメートル、上方向はY軸です。形状チェックと明示的な解析制限が受け入れる範囲を定めます。未解明のクラス構造とフィールドの意味は引き続き調査対象です。
実測に基づく実装範囲から、ファイル識別、解凍、有効オブジェクトの選択、形状の再構築という各段階を説明できます。実際の操作はPLNファイルをオンラインで開くをご覧ください。書き出しには、正常に解析できた形状が使われます。
このガイドは、サンプルファイルで実測し、当ビューアーのリーダーが利用しているバイナリ構造と、対応する形状の読み取り経路を説明しています。確認済みのファイルはArchicad 25、27、29です。一部のクラス構造、フィールドの意味、形状表現は未解明で、対応範囲はプロジェクトごとに異なります。記述は、この調査済みの実装範囲に基づくものです。
よくある質問
▶PLNファイルとは何ですか。
.plnはArchicadのプロジェクトで、モデルデータ、表示、設定、属性、ライブラリ参照を保存します。Innersceneは対応する建物形状と埋め込みプレビューを読み取ります。
▶PLNとPLAはどう違いますか。
PLNはプロジェクト形式です。PLAはアーカイブ形式で、参照先のリソースをプロジェクトと一緒に格納できます。共通のROFコンテナーを通じて、両方の対応形状を読み取ります。
▶ROF FDB署名は何を意味しますか。
実測したコンテナーは、末尾の空白を含む8バイトのASCII署名ROF FDB で始まります。ROFはGraphisoftの保存用語Random Object Fileの略です。リーダーはこの署名と構造チェックを組み合わせて、データベースコンテナーを識別します。
▶PLNはどのように圧縮されていますか。
実測したコンテナーは外側のQuickLZグループと、複数のレコード内容の符号化を使用します。内容には生のバイト列、ゼロバイトのマスク、別のQuickLZチャンク列があります。これらを展開してからレコードを解釈します。
▶プレビューにモデルが含まれますか。
プレビューは、専用のプロジェクトレコードに任意で保存される画像です。操作可能なシーンは、別のモデルレコードとその関係から解析した形状で構成されます。どちらも保存されたプロジェクトの確認に役立ちます。
▶このガイドの技術的な記述はどの範囲を扱いますか。
このガイドは、サンプルファイルで実測し、当ビューアーのリーダーが利用しているバイナリ構造と、対応する形状の読み取り経路を説明しています。確認済みのファイルはArchicad 25、27、29です。一部のクラス構造、フィールドの意味、形状表現は未解明で、対応範囲はプロジェクトごとに異なります。記述は、この調査済みの実装範囲に基づくものです。
実際のArchicad建物を探索
パビリオンのデモでは、PLNのモデルを描画して表示します。壁の開口、勾配屋根、テラスの梁と柱、地形を確認できます。
パビリオンのデモを開くArchicadはGraphisoftの商標です。Innersceneは独立したビューアーを提供しています。