コリドー サーフェスからサーフェスを作成する

CorridorSurface を作成すると、同じ名前のリンクした Surface がドキュメントのサーフェスのコレクションに作成されます。しかし、この Surface はコリドー モデルの出力であるため、CorridorSurface に動的にリンクされており、CorridorSurface を削除すると、対応する Surface も同様に削除されます。TinSurface.CreateFromCorridorSurface() メソッドを使用して、CorridorSurface にリンクされていない独立した Surface オブジェクトを作成することができます。これは、[コリドーからサーフェスを作成]コマンドを使用して UI でサーフェスを書き出すのと同じです。このスタティック メソッドには、新しい独立したサーフェスに割り当てる名前と、新しいサーフェスの作成元になる CorridorSurface オブジェクトへの参照を指定します。

下の例では、CorridorSurface から新しいサーフェスを作成し、作成元の CorridorSurface を削除しています。しかし、ドキュメント内のサーフェスの数は、削除の前後で変化せず、独立していることを示しています。 サーフェス は削除されません。

string corridorSurfaceName = "Corridor - (1) Top";
string corridorName = "Corridor - (1)";

// get the CorridorSurface by name:
ObjectId corridorId = _civilDoc.CorridorCollection[corridorName];
Corridor corridor = ts.GetObject(corridorId, OpenMode.ForWrite) as Corridor;
CorridorSurface corridorSurface = corridor.CorridorSurfaces[corridorSurfaceName];

// Count the number of surfaces:
_editor.WriteMessage("# of existing surfaces: {0}\n", _civilDoc.GetSurfaceIds().Count);
ObjectId surfaceId = TinSurface.CreateFromCorridorSurface("New Surface", corridorSurface);

corridor.CorridorSurfaces.Remove(corridorSurface);

// Even though the CorridorSurface is removed, surface count remains the same:
_editor.WriteMessage("# of existing surfaces after CorridorSurface removal: {0}\n", _civilDoc.GetSurfaceIds().Count);