public async Task GetTrimCurves2ForAHalfDiscShouldReturnTwoNonPeriodicOpenTrimCurve() { await CreatePartDoc(async (modelDoc, yielder) => { var disc0 = Modeler.CreateSemiCirclularSheet (center: Vector3.Zero , vNormal: Vector3.UnitZ , vRef: Vector3.UnitX , radius: 2 ); // Display the original sheet. Visually verify it is ok. // Press "Continue Test Execution" button within solidworks // to continue the test after visual inspection of the sheet using (disc0.DisplayUndoable(modelDoc)) await PauseTestExecution(pause: false); // The sheet should only have one face. Extract it var faces = disc0.GetFaces().CastArray <IFace2>(); faces.Length.Should().Be(1); var face = faces[0]; // Convert the solidworks face to a bspline face var bsplineFace = BSplineFace.Create(face); bsplineFace.TrimLoops.Count.Should().Be(1); var trimLoop = bsplineFace.TrimLoops[0]; trimLoop.Count.Should().Be(2); { // The curve is a clamped open curve. ( A half circle ) It is not "Solidworks periodic" trimLoop[0].Order.Should().Be(3); trimLoop[0].KnotVectorU.Take(3).ShouldBeEquivalentTo(new[] { 0, 0, 0 }); trimLoop[0].KnotVectorU.TakeLast(3).ShouldBeEquivalentTo(new[] { 1, 1, 1 }); var controlPoints00 = trimLoop[0].ControlPoints; controlPoints00.First() .Should().NotBe(controlPoints00.Last()); // This is not solidworks periodic so this property should be false trimLoop[0].IsClosed.Should().BeFalse(); } { // The curve is a clamped closed curve. ( A line ) It is not "Solidworks periodic" trimLoop[1].Order.Should().Be(2); trimLoop[1].KnotVectorU.Take(2).ShouldBeEquivalentTo(new[] { 0, 0 }); trimLoop[1].KnotVectorU.TakeLast(2).ShouldBeEquivalentTo(new[] { 1, 1 }); var controlPoints00 = trimLoop[0].ControlPoints; controlPoints00.First() .Should().NotBe(controlPoints00.Last()); // This is not solidworks periodic so this property should be false trimLoop[1].IsClosed.Should().BeFalse(); } }); }
private static IBody2[] RoundTrip(IBody2 cutBody) { var faces = cutBody.GetFaces().CastArray <IFace2>(); var sheets = faces.Select(face => BSplineFace.Create(face).ToSheetBody()).ToArray(); //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>(); return(body); }
public async Task CanRebuildASquareSheet() { await CreatePartDoc(async (modelDoc, yielder) => { var box = Modeler.CreateSheet(Vector3.Zero, Vector3.UnitZ, 2); 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()); }) .AssertAllSome() .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 async Task CanRebuildComplexFeature() { await CreatePartDoc(async (modelDoc, yielder) => { var m = SwAddinBase.Active.Modeler; var cone = m.CreateCone(0.8, 0.2, 5); var box = m.CreateBox(1, 2, 3); var solid = box.Cut(cone); var cutBody = solid.Bodies[0]; var faces = cutBody.GetFaces().CastArray <IFace2>(); var sheets = faces .Select (face => { var faceParams = BSplineFace.Create(face) .TransformSurfaceControlPoints (ctrlPts => ctrlPts.Select(v => new Vector4(v.X + 1, v.Y, v.Z, v.W))); return(faceParams.ToSheetBody()); }) .ToArray(); //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 async Task CanRebuildACirclularSheet() { await CreatePartDoc(async (modelDoc, yielder) => { var disc0 = Modeler.CreateCirclularSheet (center: Vector3.Zero , vNormal: Vector3.UnitZ , vRef: Vector3.UnitX , radius: 2 ); // Display the original sheet. Visually verify it is ok. // Press "Continue Test Execution" button within solidworks // to continue the test after visual inspection of the sheet using (disc0.DisplayUndoable(modelDoc)) await PauseTestExecution(); // The sheet should only have one face. Extract it var faces = disc0.GetFaces().CastArray <IFace2>(); faces.Length.Should().Be(1); var face = faces[0]; // Convert the solidworks face to a bspline face var bsplineFace = BSplineFace.Create(face); // Convert the bspline face back to a sheet body var disc1 = bsplineFace.ToSheetBody().__Value__(); // Display the recovered sheet. Visually verify it is ok // Press "Continue Test Execution" button within solidworks // to continue the test after visual inspection of the sheet using (disc1.DisplayUndoable(modelDoc)) await PauseTestExecution(); await PauseTestExecution(); }); }