定義ファイル アクセス

定義ファイルのアクセス

定義ファイルにアクセスするには、アドインのコードで次の手順を実行します。

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

次のリストには、前の図のクラスとメソッドについての詳細情報が記載されています。

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

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

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

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

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

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

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

共有パラメータ ファイルのパスを、次のコードにあるように app.Options.SharedParametersFilename に設定し、Autodesk.Revit.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.Options.SharedParametersFilename = sharedParameterFile;
        // open the file
        return application.OpenSharedParameterFile();
}
注: 共有パラメータのパスを設定するときは、次の点に注意してください。
  • それぞれのインストール時に、Revit の他のバージョンに共有パラメータ ファイルが設定されているかどうかを Revit は検出できません。新しく Revit をインストールする場合は、共有パラメータ ファイルを再度バインドする必要があります。
  • Options.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 (null == myGroup)
                return;
 
        Definitions myDefinitions = myGroup.Definitions;
        ExternalDefinition myExtDef =
                                                        myDefinitions.get_Item("MyParam") as ExternalDefinition;
        if (null == myExtDef)
                return;

        StringBuilder strBuilder = new StringBuilder();
        // iterate every property of the ExternalDefinition
        strBuilder.AppendLine("GUID: " + myExtDef.GUID.ToString())
                .AppendLine("Name: " + myExtDef.Name)
                .AppendLine("OwnerGroup: " + myExtDef.OwnerGroup.Name)
                .AppendLine("Parameter Group" + myExtDef.ParameterGroup.ToString())
                .AppendLine("Parameter Type" + myExtDef.ParameterType.ToString())
                .AppendLine("Is Visible: " + myExtDef.Visible.ToString());

        TaskDialog.Show("Revit", strBuilder.ToString());

        // change the OwnerGroup of the ExternalDefinition
        myExtDef.OwnerGroup = myGroups.get_Item("AnotherGroup");
}