標高解析では、サーフェスの 2 次元投影を作成して、高度の範囲を表す色の帯を追加します。Surface.Analysis.GetElevationData() を呼び出すと、SurfaceAnalysisElevationData オブジェクトの配列、解析によって作成された各標高リージョンの配列、または解析が存在しない場合は空の配列が返されます。各標高リージョンは、サーフェスの合計標高の一部を表します。コレクションを使用すると、各リージョンの色、最小標高、および最大標高を変更できます。
サーフェスの標高解析が GUI で生成されるたびに、 Autodesk Civil 3D はサーフェスのすべての既存標高リージョンを破棄し、新しいリージョンのコレクションを作成することに注意してください。SurfaceAnalysisElevationData オブジェクトの以前のコレクションに対する変更は破棄されます。
.NET API には、COM API の SurfaceAnalysisElevation.CalculateElevationRegions() メソッドと同等のメソッドはありませんが、同じことを実行するメソッドを実装することができます。次の例は、1 つの実装と、コマンドで使用されている実装されたメソッドを示しています。
/// <summary> /// Calculates elevation regions for a given surface, and returns an array that can be passed /// to Surface.Analysis.SetElevationData() /// </summary> /// <param name="surface">A Civil 3D Surface object</param> /// <param name="steps">The number of elevation steps to calculate</param> /// <param name="startColor">The index of the start color. Each subsequent color index is incremeted by 2.</param> /// <returns>An array of SurfaceAnalysisElevationData objects.</returns> private SurfaceAnalysisElevationData[] CalculateElevationRegions(Autodesk.Civil.Land.DatabaseServices.Surface surface, int steps, short startColor) { // calculate increments based on # of steps: double minEle = surface.GetGeneralProperties().MinimumElevation; double maxEle = surface.GetGeneralProperties().MaximumElevation; double incr = (maxEle - minEle) / steps; SurfaceAnalysisElevationData[] newData = new SurfaceAnalysisElevationData[steps]; for (int i = 0; i < steps; i++) { Color newColor = Color.FromColorIndex(ColorMethod.ByLayer, (short)(100 + (i * 2))); newData[i] = new SurfaceAnalysisElevationData(minEle + (incr * i), minEle + (incr * (i + 1)), newColor); } return newData; } /// <summary> /// Illustrates performing an elevation analysis /// </summary> [CommandMethod("SurfaceAnalysis")] public void SurfaceAnalysis() { using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()) { // Select first TIN Surface ObjectId surfaceId = doc.GetSurfaceIds()[0]; TinSurface oSurface = surfaceId.GetObject(OpenMode.ForWrite) as TinSurface; // get existing analysis, if any: SurfaceAnalysisElevationData[] analysisData = oSurface.Analysis.GetElevationData(); editor.WriteMessage("Existing Analysis length: {0}\n", analysisData.Length); SurfaceAnalysisElevationData[] newData = CalculateElevationRegions(oSurface, 10, 100); oSurface.Analysis.SetElevationData(newData); // commit the transaction ts.Commit(); } }
多くの標高解析フィーチャは、サーフェス スタイルで変更できます。たとえば、多くのプリセット色スキーム(ColorSchemeType 列挙型で定義されている)を使用できます。