CivilDocument.Styles.PartsListSet には、ドキュメント内の使用可能なすべてのパーツ タイプ リストの読み込み専用コレクションも含まれています。各リストは、PartsList ObjectId の読み込み専用コレクションである PartList 型のオブジェクトです。パーツ ファミリはパーツの幅広いカテゴリで、GUID (Globally Unique Identification)値によって識別されます。パーツ ファミリは、パイプまたは構造物のいずれかのパーツだけで構成できます。パーツ ファミリには、パーツの特定のサイズであるパーツ フィルタの読み込み専用コレクション(PartSizeFilter)が含まれます。パーツ ファミリは、パーツのさまざまな側面を定義するフィールドのコレクションである PartSizeFilter.PartDataRecord プロパティによって定義されます。
次の例では、ドキュメント内のすべてのパーツのリストを出力します。
[CommandMethod("PrintParts")] public void PrintParts() { CivilDocument doc = CivilApplication.ActiveDocument; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction ts = Application.DocumentManager.MdiActiveDocument. Database.TransactionManager.StartTransaction()) { // SettingsPipeNetwork oSettingsPipeNetwork = doc.Settings.GetSettings<SettingsPipeNetwork>() as SettingsPipeNetwork; PartsListCollection oPartListCollection = doc.Styles.PartsListSet; ed.WriteMessage("Number of parts lists in document: {0}\n", oPartListCollection.Count); foreach (ObjectId objId in oPartListCollection) { PartsList oPartsList = ts.GetObject(objId, OpenMode.ForWrite) as PartsList; ed.WriteMessage("PARTS LIST: {0}\n----------------\n", oPartsList.Name); // From the part list, looking at only those part families // that are pipes, print all the individual parts, plus // some information about each part. ObjectIdCollection pipeFamilyCollection = oPartsList.GetPartFamilyIdsByDomain(DomainType.Pipe); ed.WriteMessage(" Pipes\n =====\n"); foreach (ObjectId objIdPfa in pipeFamilyCollection) { PartFamily oPartFamily = ts.GetObject(objIdPfa, OpenMode.ForWrite) as PartFamily; if (oPartFamily.Domain == DomainType.Pipe) { ed.WriteMessage(" Family: {0}\n", oPartFamily.Name); SizeFilterRecord oSizeFilterRecord = oPartFamily.PartSizeFilter; SizeFilterField SweptShape = oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.SweptShape, 0); SizeFilterField MinCurveRadius = oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.MinCurveRadius, 0); //SizeFilterField StructPipeWallThickness; SizeFilterField FlowAnalysisManning = oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.FlowAnalysisManning, 0); SizeFilterField m_Material = oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.Material, 0); // SizeFilterField PipeInnerDiameter = oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.PipeInnerDiameter, 0); ed.WriteMessage(" {0}: {1}, {2}: {3}, {4}: {5} {6}: {7}\n", SweptShape.Description, SweptShape.Value, MinCurveRadius.Description, MinCurveRadius.Value, FlowAnalysisManning.Description, FlowAnalysisManning.Value, m_Material.Description, m_Material.Value ); } } // From the part list, looking at only those part families // that are structures, print all the individual parts. ed.WriteMessage(" Structures\n =====\n"); foreach (ObjectId objIdPfa in pipeFamilyCollection) { PartFamily oPartFamily = ts.GetObject(objIdPfa, OpenMode.ForWrite) as PartFamily; if (oPartFamily.Domain == DomainType.Structure) { ed.WriteMessage(" Family: {0}\n", oPartFamily.Name); } } } } }