横断は、GetSectionSources() が返す可能な SectionSources のコレクションを取得することによって、SampleLineGroup に作成されます。これは、SectionSource の ObjectIds のコレクションです。既定では、このコレクションには、すべての有効なサーフェスおよびコリドー シェイプの SectionSource が含まれます。SectionSource が関連付けられているオブジェクトのタイプは、その SourceType プロパティに保持されています。特定のサーフェスまたはコリドー シェイプを抽出するには、対応する SectionSource.IsSampled プロパティを True に設定します。
次の例では、線形を選択するように求めるプロンプトがユーザに表示されます。新しい SampleLineGroup が作成され、次に SampleLineGroup の SectionSourceCollection が反復されます。 TIN サーフェスの SectionSource が抽出されます。
// prompt user to select an alignment, and then create a new SampleLineGroup for the Alignment:
ObjectId alignmentId = promptForEntity("Select an Alignment to add sample lines to:", typeof(Alignment));
Alignment alignment = ts.GetObject(alignmentId, OpenMode.ForWrite) as Alignment;
ObjectId sampleLineGroupId = SampleLineGroup.Create("New Group", alignmentId);
SampleLineGroup sampleLineGroup = ts.GetObject(sampleLineGroupId, OpenMode.ForWrite) as SampleLineGroup;
// Create a sample line.
ObjectId sampleLineId = SampleLine.Create("sample line 1", sampleLineGroupId, alignment.StartingStation);
// Get the available section sources for the SampleLineGroup
// SampleLineGroup must be OpenMode.ForWrite for this to work:
SectionSourceCollection sectionSources = sampleLineGroup.GetSectionSources();
_editor.WriteMessage("Number of section sources: {0}\n", sectionSources.Count);
ObjectId surfaceId = ObjectId.Null;
foreach (SectionSource sectionSource in sectionSources)
{
_editor.WriteMessage("Section source is sampled: {0} update mode: {1} type: {2}\n", sectionSource.IsSampled, sectionSource.UpdateMode, sectionSource.SourceType);
// if it's a TinSurface, let's sample it:
if (sectionSource.SourceType == SectionSourceType.TinSurface)
{
// save for later:
surfaceId = sectionSource.SourceId;
// we can also get more info about the source type from its objectId
TinSurface sourceSurface = ts.GetObject(sectionSource.SourceId, OpenMode.ForRead) as TinSurface;
_editor.WriteMessage("Adding TIN surface {0} to Section Sources for SampleLineGroup\n", sourceSurface.Name);
sectionSource.IsSampled = true;
}
}
サーフェスおよびコリドー シェイプは、数量テーブルの土量計算にも使用されます。これらのサーフェスとシェイプは、MaterialSectionSource で表されます。SectionSource オブジェクトとは異なり、isSampled プロパティは読み込み専用で、ソースの抽出には使用されません。サーフェスまたはシェイプを抽出するには、QTOMaterial.Add() メソッドを使用して QTOMaterial に追加します。
QTOMaterial にサーフェスまたはシェイプを追加するには、複数の手順があります。まず、SampleLineGroup.MaterialLists.Add () メソッドを使用して、QTOMaterialList を SampleLineGroup に追加します。 次に、 QTOMaterial を QTOMaterialListに追加します。 最後に、サーフェスまたはシェイプを QTOMaterial に追加します。
下のコードは、この手順を示しています。上の例からの続きです(SectionSource として使用される保存された surfaceID を使用)。
// Material Sources are grouped in QTOMaterialLists, so we create a QTOMaterialList first:
QTOMaterialList qtoMaterialList = sampleLineGroup.MaterialLists.Add("New Material List");
// Add the material:
QTOMaterial qtoMaterial = qtoMaterialList.Add("New Material");
// Add the material item to either a surface or a corridor shape code.
// Here we use the TIN surface ID for EG sampled above:
qtoMaterial.Add(surfaceId);
// This is how you access all the Material Section Sources:
// Get the material sources
MaterialSectionSourceCollection materialSectionSources = sampleLineGroup.GetMaterialSectionSources();
_editor.WriteMessage("Number of material section sources: {0}\n", materialSectionSources.Count);
// Note that unlike SectionSource, isSampled is read-only
foreach (MaterialSectionSource materialSectionSource in materialSectionSources)
{
_editor.WriteMessage("Material source is sampled: {0} update mode: {1} type: {2} material: {3}\n", materialSectionSource.IsSampled,
materialSectionSource.UpdateMode, materialSectionSource.SourceType, materialSectionSource.Material);
}