Revit API には、プロジェクト改定、その設定、関連する改訂雲マークにアクセスするためのいくつかのクラスとメンバーが用意されています。
Revision クラスを使用すると、アプリケーションでプロジェクト内の既存の改訂を読み込んで修正したり、新しい改訂を作成したりできます。Revision オブジェクトは、プロジェクト内の単一の改訂に関連するデータを表します。IssuedBy、IssuedTo、RevisionNumber、SequenceNumber、RevisionDate といったプロパティがあります。改訂雲マークとタグを特定の Revision オブジェクトに関連付けると、シートにそのプロパティを表示できます。
プロジェクトの改訂は、改訂順番と呼ばれる、特定の順序で格納されます。改訂順番は、改訂が発行された概念的な順番を表します。静的メソッド Revision.GetAllRevisionIds()は、すべての改訂の ID をこの順番で返します。静的メソッド Revision.ReorderRevisionSequence()を使用すると、プロジェクトの改定の順番を変更できます。新しく指定した順番には、プロジェクトのすべての改訂は 1 回だけを含める必要があり、改訂の順番を変更することで、発行済みの改訂の SequenceNumber と RevisionNumber を変更することができます。
静的 Create()メソッドは、指定したドキュメントに新しい改訂を作成します。以下の例では、複数の改訂を追加し、そのプロパティを設定します。
| コード領域: 新しい改訂を作成 |
|---|
public IList<Revision> AddRevisions(Document document)
{
IList<Revision> newRevisions = new List<Revision>();
using (Transaction createRevision = new Transaction(document, "createRevision"))
{
createRevision.Start();
newRevisions.Add(AddNewRevision(document, "Include door tags", "manager1", "employee1", 1, DateTime.Now));
newRevisions.Add(AddNewRevision(document, "Add a section view", "manager1", "employee1", 2, DateTime.Now));
newRevisions.Add(AddNewRevision(document, "Make callout view larger", "manager1", "employee1", 3, DateTime.Now));
createRevision.Commit();
}
return newRevisions;
}
private Revision AddNewRevision(Document document, string description, string issuedBy, string issuedTo, int sequenceNumber, DateTime date)
{
Revision newRevision = Revision.Create(document);
newRevision.Description = description;
newRevision.IssuedBy = issuedBy;
newRevision.IssuedTo = issuedTo;
newRevision.NumberType = RevisionNumberType.Alphabetic;
newRevision.RevisionDate = date.ToShortDateString();
return newRevision;
}
|
CombineWithNext()と CombineWithPrevious()の 2 つのメソッドを使用すると、指定した改訂を、モデル内の前後の改訂と結合することができます。改訂を結合すると、指定した改訂に関連付けられている RevisionClouds と改訂タグが、次の改訂に関連付けられ、指定した改訂がモデルから削除されます。このメソッドは、関連付けを変更した RevisionClouds の ID を返します。ただし、これらの操作は、改訂が発行されていない場合にのみ実装可能です。
次の例は、CombineWithNext()メソッドの使用方法を表しています。さらに、CombineWithNext()メソッドが成功するように、GetAllRevisionIds()メソッドを使用して次の改訂を検索します。
| コード領域: 改訂を結合 |
|---|
private bool CombineRevision(Document document, Revision revision)
{
bool combined = false;
// Can only combine two revisions if neither have been issued
if (revision.Issued == false)
{
ElementId revisionId = revision.Id;
Revision nextRevsion = GetNextRevision(document, revisionId);
if (nextRevsion != null && nextRevsion.Issued == false)
{
ISet<ElementId> revisionCloudIds = Revision.CombineWithNext(document, revisionId);
combined = true;
int movedClouds = revisionCloudIds.Count;
if (movedClouds > 0)
{
RevisionCloud cloud = document.GetElement(revisionCloudIds.ElementAt(0)) as RevisionCloud;
if (cloud != null)
{
string msg = string.Format("Revision {0} deleted and {1} revision clouds were added to Revsion {2}",
revisionId.ToString(), movedClouds, cloud.RevisionId.ToString());
TaskDialog.Show("Revision Combined", msg);
}
}
}
}
return combined;
}
private Revision GetNextRevision(Document document, ElementId currentRevisionId)
{
Revision nextRevision = null;
IList<ElementId> revisionIds = Revision.GetAllRevisionIds(document);
int currentRevisionIndex = -1;
for (int n = 0; n < revisionIds.Count; n++)
{
if (revisionIds[n] == currentRevisionId)
{
currentRevisionIndex = n;
break;
}
}
// if the current revision id was found and is not the last index
if (currentRevisionIndex >= 0 && currentRevisionIndex < revisionIds.Count - 1)
{
ElementId nextRevisionId = revisionIds[currentRevisionIndex + 1];
nextRevision = document.GetElement(nextRevisionId) as Revision;
}
return nextRevision;
}
|
RevisionCloud は、モデル内で改訂が発生した場所を示すために、ビューまたはシート上に表示するグラフィカルな「雲」です。RevisionCloud クラスを使用すると、モデル内に表示されている改訂雲マークに関する情報にアプリケーションからアクセスしたり、新しい改訂雲を作成することができます。
RevisionClouds はビュー固有であり、3D を除く、ほとんどのグラフィカル ビューで作成することができます。
RevisionCloud を ViewLegend で作成すると、モデルに対する実際の変更を示すのではなく、RevisionCloud の外観を表す凡例表現として扱われます。その結果、ViewLegends の RevisionClouds は改訂表の内容に影響を与えません。
静的 Create()メソッドを使用すると、一連の線分と曲線に基づいて、指定したビューに新しい RevisionCloud を作成することができます。関連付けられた改訂がまだ発行されていない場合にのみ、RevisionClouds を作成することができます。
3D ビューと柱リスト図を除き、ほとんどのグラフィカル ビューで RevisionClouds を作成できます。その他の大部分の要素とは異なり、RevisionClouds は ViewSheet 上に直接作成することができます。
RevisionClouds は、スケッチした一連のカーブに基づいて作成されます。曲線が閉じたループである必要はなく、自己交差も許可されています。曲線は、ビューの該当する面に自動的に投影されます。曲線のリストは空にすることはできず、ビューの面に対して線分を垂直にすることはできません。ビューがモデル ビューの場合、曲線に指定した座標はモデル空間内で解釈されます。ビューが非モデル ビュー(ViewSheet など)の場合は、座標はビューの空間内で解釈されます。
各曲線に沿って一連の「雲の凹凸」が描画され、雲の形状を形作ります。各曲線が時計回りに向いていると仮定して、雲のグラフィックスが曲線にアタッチされます。線分の場合、雲の外側は、ビューの面内にある線分の法線ベクトルの方向に向くことになります。したがって、閉じたループは時計回り方向に設定され、一般的な雲の形状を形成します。
| コード領域: 改訂雲マークを作成 |
|---|
private void CreateRevisionCloudInActiveView(Document document, Revision revision, IList<Curve> curves)
{
using (Transaction newRevisionCloud = new Transaction(document, "Create Revision Cloud"))
{
newRevisionCloud.Start();
// Can only create revision cloud for revision that is not issued
if (revision.Issued == false)
{
RevisionCloud.Create(document, document.ActiveView, revision.Id, curves);
newRevisionCloud.Commit();
}
else
{
newRevisionCloud.RollBack();
}
}
}
|
RevisionCloud は Element クラスから派生したものです。改訂雲マークの Element.Geometry プロパティは、雲を構成する実際の曲線を返します。一方、RevisionCloud.GetSketchCurves()メソッドは、雲の外観を作成するために Revit がこれらの曲線にアタッチした円弧ではなく、雲の基本的なアウトラインを定義するスケッチされた曲線を返します。
各 RevisionCloud は 1 つの改訂に関連付けられます。関連付けられた改訂 ID は、Create()を呼び出したときに指定され、RevisionCloud.RevisionId プロパティを使用して取得することができます。既に発行済みの改訂に関連付けられていない場合は、RevisionCloud の RevisionId プロパティを変更できます。また、まだ発行されていない別の改訂の ID にのみ変更できます。RevisionCloud.IsRevisionIssued()は、関連付けられた改訂が発行済みかどうかを返します。
RevisionCloud が ViewSheet に表示されている場合(ViewSheet に直接配置されたか、ViewSheet に配置されたビューに表示される場合)、ViewSheet に表示されているすべての改訂表は RevisionCloud に関連付けられている改訂に自動的に含まれます。
RevisionCloud.GetSheetIds()メソッドは、RevisionCloud が表示され、シートの改訂表に用いられる可能性がある ViewSheets の ID を返します。ViewSheet 上に直接描画したり、オーナ ビューを ViewSheet に配置したりすることから、RevisionCloud を ViewSheet に表示することができます。RevisionCloud を従属ビューが所有している場合や、関連付けられた従属ビューがある場合、関連する従属ビューやメイン ビューが配置されたシートに RevisionCloud を表示させることもできます。
この RevisionCloud は、このメソッドで報告する一部の ViewSheets では表示されない場合があります。ビューの表示設定や注釈のトリミング、関連付けられた改訂の表示設定などの、その他の要因により、RevisionCloud が特定の ViewSheet に表示されないこともあります。
この RevisionCloud を ViewLegend が所有している場合は、RevisionCloud は改訂表に含まれませんので、シートは返されません。
ViewSheet クラスには、シート上の改訂と RevisionClouds を扱うためのメソッドが用意されています。詳細については、「ViewSheet 」のトピックを参照してください。