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);
}
}
}
}
}