Revit プラットフォーム API では、コレクションとイテレタは汎用性がありタイプセーフです。たとえば、ElementSet は常に要素を含み、次のように使用できます。
コード領域 9-1: ElementSet を使用 |
UIDocument uidoc = new UIDocument(document); ElementSet elems = uidoc.Selection.Elements; string info = "Selected elements:\n"; foreach (Autodesk.Revit.DB.Element elem in elems) { info += elem.Name + "\n"; } TaskDialog.Show("Revit",info); info = "Levels in document:\n"; FilteredElementCollector collector = new FilteredElementCollector(document); ICollection<Element> collection = collector.OfClass(typeof(BoundaryConditions)).ToElements(); foreach (Element elem in collection) { // you need not check null for elem info += elem.Name + "\n"; } TaskDialog.Show("Revit",info); |
すべてのコレクションが IEnumerable インタフェースを実装し、関連するすべてのイテレタが IEnumerator インタフェースを実装します。結果として、すべてのメソッドとプロパティが Revit プラットフォーム API に実装され、関連するコレクションで役割を果たします。
すべてのコレクションの実装は同様の方法で行われます。次の例では ElementSet と ModelCurveArray を使用して、メイン コレクション プロパティの使用方法を説明します。
コード領域 9-2: コレクションを使用 |
UIDocument uidoc = new UIDocument(document); SelElementSet selection = uidoc.Selection.Elements; // Store the ModelLine references ModelCurveArray lineArray = new ModelCurveArray(); // … Store operation Autodesk.Revit.DB.ElementId id = new Autodesk.Revit.DB.ElementId(131943); //assume 131943 is a model line element id lineArray.Append(document.GetElement(id) as ModelLine); // use Size property of Array TaskDialog.Show("Revit","Before Insert: " + lineArray.Size + " in lineArray."); // use IsEmpty property of Array if (!lineArray.IsEmpty) { // use Item(int) property of Array ModelCurve modelCurve = lineArray.get_Item(0) as ModelCurve; // erase the specific element from the set of elements selection.Erase(modelCurve); // create a new model line and insert to array of model line SketchPlane sketchPlane = modelCurve.SketchPlane; XYZ startPoint = new XYZ(0, 0, 0); // the start point of the line XYZ endPoint = new XYZ(10, 10, 0); // the end point of the line // create geometry line Line geometryLine = Line.CreateBound(startPoint, endPoint); // create the ModelLine ModelLine line = document.Create.NewModelCurve(geometryLine, sketchPlane) as ModelLine; lineArray.Insert(line, lineArray.Size - 1); } TaskDialog.Show("Revit","After Insert: " + lineArray.Size + " in lineArray."); // use the Clear() method to remove all elements in lineArray lineArray.Clear(); TaskDialog.Show("Revit","After Clear: " + lineArray.Size + " in lineArray."); |