改訂

Revit API には、プロジェクト改定、その設定、関連する改訂雲マークにアクセスするためのいくつかのクラスとメンバーが用意されています。

設定

RevisionSettings クラスを使用すると、改訂と改訂雲マークに影響を与えるプロジェクト全体の設定を、アプリケーションで読み込み、修正することができます。静的 RevisionSettings.GetRevisionSettings()メソッドは、指定したプロジェクト ドキュメントの RevisionSettings オブジェクトを返します。次のプロパティを使用すると、プロジェクト全体の改定の設定にアクセスできます。
  • RevisionAlphabet - アルファベットによる番号付けを使用する改訂に割り当てる文字を指定します。
  • RevisionCloudSpacing - プロジェクトに描画されている改訂雲マークのペーパー空間でのサイズを指定します。
  • RevisionNumbering - プロジェクトの改訂番号をシート単位で定義するか、プロジェクト全体で定義するかを指定します。
改訂雲マークをシートに表示する場合、それぞれの改定の改訂番号を表示する方法として、改定雲マークにタグ付けする方法と、シートのタイトルブロック内の改定表で表示する方法があります。番号の指定には、次の 2 つの方法があります。
  • プロジェクトごと: 改訂番号の値は、改訂に割り当てられている、プロジェクト全体の改訂順番番号に常に対応します。たとえば、順番番号 5、7、8 の改訂の改訂雲マークがシートに配置されている場合、改訂タグとそのシートの集計表には 5、7、8 と表示されます。
  • シートごと: 履歴番号には、シート上に表示されている改訂雲マークに基づいて、連続した番号が割り当てられます。たとえば、プロジェクト全体の改訂順番番号 5、7、8 が割り当てられた改訂の改訂雲マークがシートに配置されている場合、改訂タグとそのシートの集計表には 1、2、3 と表示されます。シート上の順番は改訂順番番号の順序に対応しますので、この例では、シートが 1 の場合は改訂には 5、2 の場合は 7 が表示されます。

改訂

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 に関連付けられた改訂

各 RevisionCloud は 1 つの改訂に関連付けられます。関連付けられた改訂 ID は、Create()を呼び出したときに指定され、RevisionCloud.RevisionId プロパティを使用して取得することができます。既に発行済みの改訂に関連付けられていない場合は、RevisionCloud の RevisionId プロパティを変更できます。また、まだ発行されていない別の改訂の ID にのみ変更できます。RevisionCloud.IsRevisionIssued()は、関連付けられた改訂が発行済みかどうかを返します。

ViewSheets

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 」のトピックを参照してください。