ブレークラインは、TIN サーフェスの三角形を作成するために使用します。各 TIN サーフェスは、TinSurface.BreaklinesDefinition プロパティに含まれるブレークラインのコレクション(SurfaceDefinitionBreaklines オブジェクト)を備えています。ブレークラインには複数の種類があり、それぞれ若干異なる方法で作成します。
SurfaceDefinitionBreaklines クラスを使用すると、標準ブレークライン、地形作成ブレークライン、近接ブレークラインを同じ方法で追加することができます。各ブレークライン タイプには、独自の Add*() メソッド(たとえば、標準ブレークラインの場合は AddStandardBreaklines)があり、各メソッドには、ブレークラインの作成元のオブジェクトのタイプに応じて、3 つのバージョンがあります。ブレークラインは、1 つまたは複数の 3D 線分、グレーディング計画線、スプライン、または 3D ポリラインを含む Point2dCollection、Point3dCollection、または ObjectIdCollection から追加することができます。ブレークラインの各タイプでは、曲線の分割方法を決定する指定のパラメータが必要です。
標準ブレークラインは、3D 線分または 3D ポリラインの配列で構成されます。各線分終点はサーフェス内のポイントとなり、ブレークラインの周囲にサーフェス三角形が再作成されます。AddStandardBreaklines() メソッドでは、中央縦距に加えて、最大距離、間引き距離、間引き角度を指定する必要があります。maximumDistance パラメータは Autodesk Civil 3D GUI の[補間距離]に相当し、weedingDistance と weedingAngle は、それぞれ間引き距離と間引き角度に相当します。
近接ブレークラインは、サーフェスに新しいポイントを追加しません。代わりに、各ブレークライン終点に最も近いサーフェス ポイントが使用されます。サーフェスを構成する三角形が再計算されて、これらのポイントが接続されます。
地形作成ブレークラインは、三角形の辺を削除しません。このブレークラインは三角形の辺との交点に新しいポイントを配置し、新しい三角形が計算されます。
次の例は、標準ブレークライン、地形作成ブレークライン、近接ブレークラインを追加する方法を示しています。
[CommandMethod("SurfaceBreaklines")]
public void SurfaceBreaklines()
{
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
// Prompt the user to select a TIN surface and a polyline, and create a breakline from the polyline
ObjectId surfaceId = promptForEntity("Select a TIN surface to add a breakline to", typeof(TinSurface));
ObjectId lineId = promptForEntity("Select a 3D polyline to use as the breakline", typeof(Polyline3d));
TinSurface oSurface = surfaceId.GetObject(OpenMode.ForWrite) as TinSurface;
ObjectId[] lines = { lineId };
PromptKeywordOptions pKeyOpts = new PromptKeywordOptions("");
pKeyOpts.Message = "\nEnter the type of breakline to create: ";
pKeyOpts.Keywords.Add("Standard");
pKeyOpts.Keywords.Add("Non-Destructive");
pKeyOpts.Keywords.Add("Proximity");
pKeyOpts.Keywords.Default = "Standard";
pKeyOpts.AllowNone = true;
PromptResult pKeyRes = editor.GetKeywords(pKeyOpts);
try
{
switch (pKeyRes.StringResult)
{
case "Non-Destructive":
oSurface.BreaklinesDefinition.AddNonDestructiveBreaklines(new ObjectIdCollection(lines), 1);
break;
case "Proximity":
oSurface.BreaklinesDefinition.AddProximityBreaklines(new ObjectIdCollection(lines), 1);
break;
case "Standard":
default:
oSurface.BreaklinesDefinition.AddStandardBreaklines(new ObjectIdCollection(lines), 10, 5, 5, 0);
break;
}
}
catch (System.Exception e)
{
editor.WriteMessage("Operation failed: {0}", e.Message);
}
// commit the transaction
ts.Commit();
}
}