public async Task CanRebuildABox()
        {
            await CreatePartDoc(async (modelDoc, yielder) =>
            {
                var box    = Modeler.CreateBox(Vector3.Zero, Vector3.UnitZ, 0.5, 0.5, 0.5);
                var faces  = box.GetFaces().CastArray <IFace2>();
                var sheets = faces
                             .Select
                                 (face =>
                {
                    var faceParams = BSplineFace.Create(face)
                                     .TransformSurfaceControlPoints
                                         (ctrlPts => ctrlPts.Select(v => new Vector4(v.X + 2, v.Y, v.Z, v.W)));

                    return(faceParams.ToSheetBody().__Value__());
                })
                             .ToArray();

                using (box.DisplayUndoable(modelDoc)) {
                    await PauseTestExecution();
                };

                //foreach (var sheet in sheets)
                //{
                //    yielder(sheet.DisplayUndoable(modelDoc));
                //}


                var error = (int)swSheetSewingError_e.swSewingOk;
                var body  = Modeler
                            .CreateBodiesFromSheets2(sheets, (int)swSheetSewingOption_e.swSewToSolid, 1e-5, ref error)
                            .CastArray <IBody2>();

                body.Should().NotBeEmpty();

                yielder(body.DisplayUndoable(modelDoc));

                await PauseTestExecution();
            });
        }
        public void CanRoundTripAFace()
        {
            CreatePartDoc((modelDoc, yielder) =>
            {
                var box   = Modeler.CreateBox(Vector3.Zero, Vector3.UnitZ, 0.5, 0.6, 0.7);
                var faces = box.GetFaces().CastArray <IFace2>();
                var face  = faces[0];

                var surface1      = ((Surface)face.GetSurface());
                var surfaceParams = surface1
                                    .GetBSplineSurfaceParams(1e-5)
                                    .WithCtrlPts(ctrlPts => ctrlPts.Select(v => new Vector4(v.X, v.Y, v.Z, v.W)));

                var surface2 = surfaceParams.ToSurface();
                var curves   = GetCurvesForTrimming(face, c => c);

                var trimmedSheet = (IBody2)surface2.CreateTrimmedSheet4(curves, true);

                trimmedSheet.Should().NotBe(null);

                yielder(box.DisplayUndoable(modelDoc));
                yielder(trimmedSheet.DisplayUndoable(modelDoc, Color.Blue));
            });
        }