ViewSection

ViewSection

ViewSection クラスを使用して、断面図ビュー、詳細ビュー、吹き出しビュー、参照吹き出しと参照断面を作成できます。これは立面図ビューも表します。

断面図ビューと参照断面

断面図ビューはモデルを切断して内部構造を表示します。ViewSection.CreateSection()メソッドは、断面図ビューを作成します。

コード領域: ViewSection.CreateSection()

public ViewSection ViewSection.CreateSection(Document document, ElementId viewFamilyTypeId, BoundingBoxXYZ sectionBox);

viewFamilyTypeId パラメータは、新しい ViewSection によって使用される ViewFamilyType の ID です。このタイプは、断面 ViewFamily である必要があります。sectionBox パラメータは、断面図ビューのトリミング ボックスです。断面図ビューで必要な方向と範囲が表示されます。通常、他のビューのトリミング ボックスがパラメータとして使用されます。また、方向と範囲を示すためにカスタム BoundingBoxXYZ インスタンスを構築することもできます。

次のコードでは、断面図ビューを作成する方法を示しています。断面図ビューの境界ボックスは、壁の中心に作成されます。結果として得られた断面図ビューは、プロジェクト ブラウザの断面図(建築断面)ノードに配置されます。

コード領域: 断面図ビューを作成

// Find a section view type
IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new FilteredElementCollector(document).OfClass(typeof(ViewFamilyType))
                                                let type = elem as ViewFamilyType
                                                where type.ViewFamily == ViewFamily.Section
                                                select type;
            
// Create a BoundingBoxXYZ instance centered on wall
LocationCurve lc = wall.Location as LocationCurve;
Transform curveTransform = lc.Curve.ComputeDerivatives(0.5, true);
// using 0.5 and "true" (to specify that the parameter is normalized) 
// places the transform's origin at the center of the location curve)
            
XYZ origin = curveTransform.Origin; // mid-point of location curve
XYZ viewDirection = curveTransform.BasisX.Normalize(); // tangent vector along the location curve
XYZ normal = viewDirection.CrossProduct(XYZ.BasisZ).Normalize(); // location curve normal @ mid-point
            
Transform transform = Transform.Identity;
transform.Origin = origin;
transform.BasisX = normal;
transform.BasisY = XYZ.BasisZ;
            
// can use this simplification because wall's "up" is vertical.
// For a non-vertical situation (such as section through a sloped floor the surface normal would be needed)
transform.BasisZ = normal.CrossProduct(XYZ.BasisZ);
            
BoundingBoxXYZ sectionBox = new BoundingBoxXYZ();
sectionBox.Transform = transform;
sectionBox.Min = new XYZ(-10,0,0);
sectionBox.Max = new XYZ(10,12,5);
// Min & Max X values (-10 & 10) define the section line length on each side of the wall
// Max Y (12) is the height of the section box// Max Z (5) is the far clip offset

// Create a new view section.
ViewSection viewSection = ViewSection.CreateSection(document, viewFamilyTypes.First().Id, sectionBox);

参照断面とは、既存のビューを参照する断面のことです。新しい参照断面を作成する場合、Revit は新しいビューを追加しません。

コード領域: ViewSection.CreateReferenceSection()

public ViewSection ViewSection.CreateReferenceSection(Document document, 
                                                      ElementId parentViewId,
                                                      ElementId viewIdToReference, 
                                                      XYZ headPoint, 
                                                      XYZ tailPoint);
parentViewId パラメータは、新しい参照断面マーカーが表示されるビューの ID です。参照断面は、平面図ビュー、天井伏図ビュー、構造伏図ビュー、断面図ビュー、立面図ビュー、製図ビュー、詳細ビューで作成できます。viewIdToReference は、詳細ビュー、製図ビュー、または断面図ビューの ID の場合があります。参照されるビューの ViewFamilyType は、新しい参照断面によって使用されます。2 つの XYZ 点は、親ビューの断面図マーカーのヘッドの位置を決定します。

詳細ビュー

詳細ビューは、その他のビューで吹き出しまたは断面図として表示されるモデルのビューです。このビューのタイプは、通常は親ビューよりも詳細な尺度でモデルを表示します。これは、モデルの特定の部分に情報を追加するために使用されます。静的 ViewSection.CreateDetail()メソッドを使用して、新しい詳細 ViewSection を作成します。

コード領域: ViewSection.CreateDetail()

public ViewSection ViewSection.CreateDetail(Document document, ElementId viewFamilyTypeId, BoundingBoxXYZ sectionBox);

viewFamilyTypeId パラメータは、新しい ViewSection によって使用される ViewFamilyType の ID です。このタイプは、詳細 ViewFamily である必要があります。標準の断面図ビューのように、sectionBox パラメータは、断面図ビューのトリミング ボックスです。断面図ビューで必要な方向と範囲が表示されます。

新しい詳細 ViewSection が追加されると、プロジェクト ブラウザの詳細ビュー(詳細)ノードで表示されます。

立面図ビュー

立面図ビューは、レベル ラインが表示されるモデルの断面です。立面図ビューは ViewSection クラスによって表されます。他のタイプの断面図ビューとは異なり、ViewSection クラスの静的メソッドを使用して立面図ビューを作成できません。立面図ビューを作成するには、まず立面図マーカーを作成し、そのマーカーを使用して立面図ビューを作成します。新しく作成された立面図ビューは、プロジェクト ブラウザの断面図(建物の立面図)ノードに表示されます。これには一意の名前が割り当てられます。

次の例では、梁の位置に基づいて立面図ビューを作成しています。

コード領域: 立面図ビューを作成

ViewSection CreateElevationView(Document document, FamilyInstance beam)
{
    // Find an elevation view type
    IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new FilteredElementCollector(document).OfClass(typeof(ViewFamilyType))
                                                    let type = elem as ViewFamilyType
                                                    where type.ViewFamily == ViewFamily.Elevation
                                                    select type;

    LocationCurve lc = beam.Location as LocationCurve;
    XYZ xyz = lc.Curve.GetEndPoint(0);
    ElevationMarker marker = ElevationMarker.CreateElevationMarker(document, viewFamilyTypes.First().Id, xyz, 1);
    ViewSection elevationView = marker.CreateElevation(document, document.ActiveView.Id, 1);

    return elevationView;
}

ElevationMarker.CreateElevation()メソッドは、パラメータとして ViewPlan の ID を取得します。これは ElevationMarker が表示されている ViewPlan です。新しい立面図 ViewSection は、範囲を作成し、ViewPlan から設定を継承します。最後のパラメータは、新しい立面図ビューが配置される ElevationMarker のインデックスです。ElevationMarker のインデックスは有効で未使用である必要があります。ビューの方向はインデックスによって決定されます。

吹き出しと参照吹き出し

吹き出しには、別のビューの一部が拡大されて表示されます。吹き出しビューは、静的メソッド ViewSection.CreateCallout()を使用して作成できます。吹き出しは、平面図ビュー、天井伏図ビュー、構造伏図ビュー、断面図ビュー、立面図ビュー、製図ビュー、詳細ビューで作成できます。結果として得られるビューは、使用された ViewFamilyType に応じて ViewSection、ViewPlan、ViewDetail のいずれかになり、プロジェクト ブラウザの対応するノードに表示されます。

コード領域: ViewSection.CreateCallout()

public ViewSection ViewSection.CreateCallout(Document document, 
                                            ElementId parentViewId, 
                                            ElementId viewFamilyTypeId,
                                            XYZ point1,
                                            XYZ point2);
親ビューの ID パラメータは、吹き出しを作成できる任意のビュー タイプの ID になる場合があります。point パラメータは、親ビューの吹き出し記号の範囲を決定します。

参照吹き出しは、既存のビューを参照する吹き出しです。参照吹き出しを追加すると、Revit はプロジェクトにビューを作成しません。その代わりに、指定した既存のビューへのポインタが作成されます。複数の参照吹き出しが同じビューを示すことができます。

コード領域: ViewSection.CreateReferenceCallout()

public ViewSection ViewSection.CreateReferenceCallout(Document document, 
                                                      ElementId parentViewId, 
                                                      ElementId viewIdToReference,
                                                      XYZ point1,
                                                      XYZ point2);

参照吹き出しの作成は、吹き出しの作成に似ています。ただし、吹き出しの ViewFamilyType の ID をパラメータとして持つのではなく、CreateReferenceCallout()メソッドは参照するビューの ID を取得します。参照されるビューの ViewFamilyType は、新しい参照吹き出しによって使用されます。

参照されたビューが製図ビューでない限り、トリミングされたビューのみを参照できます。製図ビューは、親ビューのタイプに関係なく、常に参照することができます。立面図ビューは、親の立面図ビューおよび製図ビューから参照することができます。断面図ビューは、親の断面図ビューおよび製図ビューから参照することができます。詳細ビューは、水平方向の詳細ビューしか参照できない平面図ビュー、天井伏図ビュー、構造伏図ビューの親ビュー以外のすべての親ビューから参照できます。平面図ビュー、天井伏図ビュー、構造伏図ビューは、平面図ビュー、天井伏図ビュー、構造伏図ビューの親ビューから参照できます。

次の例では、詳細 ViewFamilyType を使用して新しい吹き出しを作成し、新しい吹き出しビューを使用して参照吹き出しを作成します。

コード領域: 吹き出しと参照用吹き出しを作成

public void CreateCalloutView(Document document, View parentView)
{
    // Find a detail view type
    IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new FilteredElementCollector(document).OfClass(typeof(ViewFamilyType))
                                                    let type = elem as ViewFamilyType
                                                    where type.ViewFamily == ViewFamily.Detail
                                                    select type;

    ElementId viewFamilyTypeId = viewFamilyTypes.First().Id;  
    XYZ point1 = new XYZ(2, 2, 2);
    XYZ point2 = new XYZ(30, 30, 30);
    ElementId parentViewId = parentView.Id;  // a ViewPlan
    View view = ViewSection.CreateCallout(document, parentViewId, viewFamilyTypeId, point1, point2);
            
    ViewSection.CreateReferenceCallout(document, parentViewId, view.Id, point1, point2);
}