一般的な質問

一般的な質問

Q: Revit ではどのようにして要素を参照するのですか?

A: 各要素は ID を持ちます。モデル内で他と重複しない ID を使用することで、Revit の複数のセッション間で同じ要素を参照していることを確認できます。

Q: モデルが使用できる共有パラメータ ファイルは 1 つだけですか?

A: 共有パラメータ ファイルは、パラメータに関するわずかな情報を保持するために使用します。情報の最も重要な部分が GUID (Globally Unique Identifier)であり、単一ファイル内および複数モデル間でのパラメータの一意性を保証するために使用します。

Revit は複数の共有パラメータ ファイルで作業することができますが、一度に 1 つのファイルからのみパラメータを読み込むことができます。すべてのモデルに同一の共有パラメータ ファイルを使用するか、各モデルに別のファイルを使用するかは開発者が選択できます。

さらに、API アプリケーションがユーザのパラメータ ファイルと干渉が発生しないようにする必要があります。アプリケーションは、開発者が用意したパラメータを含む独自のパラメータ ファイルとともに出荷してください。Revit ファイルにパラメータをロードするには、次の手順を実行します。

Q: 他のプログラムで共有パラメータを使用できるように、モデルと一緒に共有パラメータファイルを配布する必要がありますか?

A: いいえ、ありません。共有パラメータ ファイルは共有パラメータをロードする場合にのみ使用します。ロード後は、モデルはファイルを必要としなくなります。

Q: 対応する要素がコピーされると、共有パラメータ値もコピーされますか?

A: はい、コピーされます。データベース内に要素の一意の ID を保持する共有パラメータがある場合、Revit 要素の一意の ID を付加するか、Revit 要素の一意の ID を使用して別の共有パラメータを追加します。こうすることで、ID をチェックして、コピーではなく元の要素 ID で作業していることを確認できます。

Q: 要素の一意の ID (UID)は普遍的に一意ですか、また変更することはできますか?

A: 要素 UID は普遍的に一意ですが、要素 ID はモデル内でのみ一意です。たとえば、ある Revit プロジェクトから別のプロジェクトに壁をコピーする場合、壁の UID は普遍的に一意でなければならないので必ず変更されますが、壁の ID は変更されません。

Q: アプリケーションがデータをモデルに戻す際に Revit の更新に時間がかかります。速度を速めるためにはどのようにすればいいですか?

A: 必要なときのみ Document.Regenerate()を呼び出すようにしてください。このメソッドでは Revit ドキュメントの要素にすべての変更が反映されていることを確認する必要がありますが、そのためにアプリケーションが遅くなることがあります。トランザクションがコミットされると、ドキュメントの再生成が自動的に呼び出されることにも注意してください。

Q: 共有パラメータをバインドする機能を持たない要素に共有パラメータを追加する場合は、どのようにすればいいですか?たとえば、グリッドやマテリアルなどです。

A: 要素タイプに共有パラメータを追加する機能がない場合は、プロジェクト パラメータを追加する必要があります。要素に関連付けられている共有パラメータにアクセスする際には、要素のパラメータ リストの一部として表示されないため、作業が少し複雑になります。プロジェクトの共有パラメータを文字列にし、共有パラメータに要素 ID を含めるという操作を行えば、文字列を解析してからデータを要素に関連付けることができます。

Q: 保存されたモデルやコンテンツ BMP にはどのようにしてアクセスするのですか?

A: Preview.dll はシェル プラグインであり、IExtractImage インタフェースを実装するオブジェクトです。IExtractImage は Windows のシェル フォルダで使用されるインタフェースであり、既知のファイル タイプのイメージを抽出します。

詳細については、『Revit API 開発者用ガイド』を参照してください。

CRevitPreviewExtractor は次のように標準 API 関数を実装します。

             STDMETHOD(GetLocation)(LPWSTR pszPathBuffer,
                                                DWORD cchMax,
                                                DWORD *pdwPriority,
                                                const SIZE *prgSize,
                                                DWORD dwRecClrDepth,
                                                DWORD *pdwFlags);
                STDMETHOD(Extract)(HBITMAP*);

自身をレジストリに登録します。