定義ファイルで作業する

定義ファイルで作業する

定義ファイルを使用すると、共有パラメータにアクセスできます。定義ファイルにアクセスし、そのパラメータを取得するには、次の手順を実行します。

  1. 既存または新しいテキスト ファイルを使用して Application.SharedParametersFilename プロパティを指定します。
  2. Application.OpenSharedParameterFile()メソッドを使用して、共有パラメータ ファイルを開きます。
  3. DefinitionFile.Groups プロパティを使用して、既存のグループを開くか、新しいグループを作成します。
  4. DefinitionGroup.Definitions プロパティを使用して、既存の外部パラメータ定義を開くか、新しい定義を作成します。

Autodesk.Revit.DB 名前空間の次のクラスとメソッドを使用すると、Revit API を使用して共有パラメータにアクセスできます。

共有パラメータ ファイルを作成する

定義ファイルはテキスト ファイルであるため、手動で作成したり、コードを使用して作成することができます。

コード領域 22-3: 共有パラメータ ファイルを作成

private void CreateExternalSharedParamFile(string sharedParameterFile)
{
        System.IO.FileStream fileStream = System.IO.File.Create(sharedParameterFile);
        fileStream.Close();
}

既存の共有パラメータ ファイルにアクセスする

Revit では多くの共有パラメータ ファイルを作成できるため、アクセスしたいファイルや外部パラメータを明確に識別する必要があります。次の 2 つの手順は、既存の共有パラメータ ファイルへのアクセス方法を示しています。

外部パラメータ ファイルから DefinitionFile を取得する

共有パラメータ ファイルのパスを次のコードにあるように設定し、Application.OpenSharedParameterFile()メソッドを呼び出します。

コード領域 22-4: 外部パラメータ ファイルから定義ファイルを取得

private DefinitionFile SetAndOpenExternalSharedParamFile(Autodesk.Revit.ApplicationServices.Application application, string sharedParameterFile)
{
    // set the path of shared parameter file to current Revit
    application.SharedParametersFilename = sharedParameterFile;
    // open the file
    return application.OpenSharedParameterFile();
}
注: 共有パラメータのパスを設定するときは、次の点に注意してください。
  • それぞれのインストール時に、Revit の他のバージョンに共有パラメータ ファイルが設定されているかどうかを Revit は検出できません。新しく Revit をインストールする場合は、共有パラメータ ファイルを再度バインドする必要があります。
  • Application.SharedParametersFilename が間違ったパスに設定されている場合、OpenSharedParameterFile()を呼び出したときにのみ例外が発生します。
  • Revit は複数の共有パラメータ ファイルを処理できます。パラメータのロード時に 1 つのパラメータ ファイルだけが使用されている場合でも、現在のファイルを自由に変更できます。

すべてのパラメータ エントリを移動する

次の例は、パラメータ エントリを移動し、その結果をメッセージ ボックスで表示する方法を示しています。

コード領域 22-5: パラメータ エントリを移動

private void ShowDefinitionFileInfo(DefinitionFile myDefinitionFile)
{
    StringBuilder fileInformation = new StringBuilder(500);

    // get the file name 
    fileInformation.AppendLine("File Name: " + myDefinitionFile.Filename);

    // iterate the Definition groups of this file
    foreach (DefinitionGroup myGroup in myDefinitionFile.Groups)
    {
        // get the group name
        fileInformation.AppendLine("Group Name: " + myGroup.Name);

        // iterate the difinitions
        foreach (Definition definition in myGroup.Definitions)
        {
            // get definition name
            fileInformation.AppendLine("Definition Name: " + definition.Name);
        }
    }
    TaskDialog.Show("Revit",fileInformation.ToString());
}

パラメータ定義の所有者グループを変更する

次の例は、パラメータ定義グループの所有者を変更する方法を示します。

コード領域 22-6: パラメータ定義グループの所有者を変更

private void ReadEditExternalParam(DefinitionFile file)
{
    // get ExternalDefinition from shared parameter file
    DefinitionGroups myGroups = file.Groups;
    DefinitionGroup myGroup = myGroups.get_Item("MyGroup");
    if (myGroup != null)
    {
        ExternalDefinition myExtDef = myGroup.Definitions.get_Item("MyParam") as ExternalDefinition;
        if (myExtDef != null)
        {
            DefinitionGroup newGroup = myGroups.get_Item("AnotherGroup");
            if (newGroup != null)
            {
                // change the OwnerGroup of the ExternalDefinition
                myExtDef.OwnerGroup = newGroup;
            }
        }
    }
}