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