プロジェクトの配置

プロジェクトの配置

プロジェクトの配置は地理オフセットと回転を表すオブジェクトです。これは通常 ProjectLocation オブジェクトによって使用され、地理情報を取得、設定します。次の図では、ProjectLocation の地理的回転および同じ点の座標を変更後に結果を表示しています。ただし、ProjectLocation の地理オフセットの変更結果は直接確認できません。

図 125: 点の座標

注: [西]は、位置が反時計回りに回転することを示し、[東]は位置が時計回りに回転することを示します。角度値が 180 ~ 360 度である場合は、Revit はこれを自動的に変換します。たとえば、[東]を選択して角度に 200 度を入力した場合、Revit はこれを 西 160 度に変換します。

図 126: 地理オフセットおよび回転スケッチ マップ

次のサンプル コードは、ProjectLocation オブジェクトを取得する方法を示しています。

コード領域 21-1: ProjectLocation オブジェクトを取得

public void ShowActiveProjectLocationUsage(Autodesk.Revit.DB.Document document)
{
        // Get the project location handle 
        ProjectLocation projectLocation = document.ActiveProjectLocation;

        // Show the information of current project location
        XYZ origin = new XYZ(0, 0, 0);
        ProjectPosition position = projectLocation.get_ProjectPosition(origin);
        if (null == position)
        {
                throw new Exception("No project position in origin point.");
        }

        // Format the prompt string to show the message.
        String prompt = "Current project location information:\n";
        prompt += "\n\t" + "Origin point position:";
        prompt += "\n\t\t" + "Angle: " + position.Angle;
        prompt += "\n\t\t" + "East to West offset: " + position.EastWest;
        prompt += "\n\t\t" + "Elevation: " + position.Elevation;
        prompt += "\n\t\t" + "North to South offset: " + position.NorthSouth;

        // Angles are in radians when coming from Revit API, so we 
        // convert to degrees for display
        const double angleRatio = Math.PI / 180;        // angle conversion factor

        SiteLocation site = projectLocation.SiteLocation;
        prompt += "\n\t" + "Site location:";
        prompt += "\n\t\t" + "Latitude: " + site.Latitude / angleRatio + "¡ã";
        prompt += "\n\t\t" + "Longitude: " + site.Longitude / angleRatio + "¡ã";
        prompt += "\n\t\t" + "TimeZone: " + site.TimeZone;

        // Give the user some information
        TaskDialog.Show("Revit", prompt);
}
注: アクティブなプロジェクトの位置は一度に 1 つのみです。ProjectLocation 地理オフセットおよび回転を変更した後の結果を確認するには、平面図の[プロパティ]ペインで[方向]プロパティを[プロジェクトの北]から[真北の角度]に変更します。

図形 128: プロジェクトが[プロジェクトの北]から[真北の角度]に 30 度回転

図 129: プロジェクトの位置情報

プロジェクトの位置を作成、削除する

Duplicate()メソッドを使用して、既存のプロジェクトの位置を複製して新しいプロジェクトを作成します。次のコード サンプルでは、Duplicate()メソッドを使用して、新しいプロジェクトの位置を作成する方法を示します。

コード領域 21-2: プロジェクトの位置を作成

public ProjectLocation DuplicateLocation(Autodesk.Revit.DB.Document document, string newName)
{
        ProjectLocation currentLocation = document.ActiveProjectLocation;
        ProjectLocationSet locations = document.ProjectLocations;
        foreach (ProjectLocation projectLocation in locations)
        {
                if (projectLocation.Name == newName)
                {
                        throw new Exception("The name is same as a project location's name, please change one.");
                }
        }
        return currentLocation.Duplicate(newName);
}

次のコード サンプルでは、現在のプロジェクトから既存のプロジェクトの位置を削除する方法を示します。

コード領域 21-3: プロジェクトの位置を削除

public void DeleteLocation(Autodesk.Revit.DB.Document document)
{
    ProjectLocation currentLocation = document.ActiveProjectLocation;
    //There must be at least one project location in the project.
    ProjectLocationSet locations = document.ProjectLocations;
    if (1 == locations.Size)
    {
        return;
    }

    string name = "location";
    if (name != currentLocation.Name)
    {
        foreach (ProjectLocation projectLocation in locations)
        {
            if (projectLocation.Name == name)
            {
                ICollection<Autodesk.Revit.DB.ElementId> elemSet = document.Delete(projectLocation.Id);
                if (elemSet.Count > 0)
                {
                    TaskDialog.Show("Revit","Project Location Deleted!");
                }
            }
        }
    }
}
注: 次のルールは、プロジェクトの位置の削除に適用します。
  • アクティブなプロジェクトの位置は、プロジェクトに少なくとも 1 つのプロジェクトの位置が必要なため、削除できません。
  • ProjectLocationSet クラス インスタンスが読み取り専用である場合は、プロジェクトの位置を削除できません。