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