static void CreateAndRunSimulation(BufferPool bufferPool) { //TODO: As more features get added, you'll probably want to revisit this and lengthen the per-execution duration. var simulation = Simulation.Create(bufferPool, new TestCallbacks()); var sphere = new Sphere(0.5f); var shapeIndex = simulation.Shapes.Add(sphere); var bodyBuilder = new RegularGridWithKinematicBaseBuilder(new Vector3(1), new Vector3(), 1, shapeIndex); var constraintBuilder = new BallSocketConstraintBuilder(); const int width = 3; const int height = 3; const int length = 3; SimulationSetup.BuildLattice(bodyBuilder, constraintBuilder, width, height, length, simulation, out var bodyHandles, out var constraintHandles); simulation.PoseIntegrator.Gravity = new Vector3(0, -10, 0); simulation.Bodies.ActiveSet.Velocities[width].Linear = new Vector3(0.1f, 0, 0.1f); for (int i = 0; i < 16; ++i) { simulation.Timestep(1 / 60f); } simulation.Dispose(); }
public static void Test() { var memoryStream = new MemoryStream(); var writer = new StreamWriter(memoryStream); var initializationThreadPool = new SimpleThreadDispatcher(Environment.ProcessorCount); var bodyBuilder = new RegularGridWithKinematicBaseBuilder(new Vector3(1), new Vector3()); var constraintBuilder = new ContactManifoldConstraintBuilder(); //Subtest<RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, ContactManifold4Constraint>(bodyBuilder, constraintBuilder, 32, 32, 32, 8, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, ContactManifold4Constraint>(bodyBuilder, constraintBuilder, 26, 26, 26, 12, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, ContactManifold4Constraint>(bodyBuilder, constraintBuilder, 20, 20, 20, 20, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, ContactManifold4Constraint>(bodyBuilder, constraintBuilder, 16, 16, 16, 30, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, ContactManifold4Constraint>(bodyBuilder, constraintBuilder, 13, 13, 13, 45, initializationThreadPool, writer); Subtest <RegularGridWithKinematicBaseBuilder, ContactManifoldConstraintBuilder, Contact4>(bodyBuilder, constraintBuilder, 10, 10, 10, 700, initializationThreadPool, writer); //var bodyBuilder = new RegularGridWithKinematicBaseBuilder(new Vector3(1), new Vector3()); //var constraintBuilder = new BallSocketConstraintBuilder(); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 32, 32, 32, 8, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 26, 26, 26, 12, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 20, 20, 20, 20, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 16, 16, 16, 30, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 13, 13, 13, 45, initializationThreadPool, writer); //Subtest<RegularGridWithKinematicBaseBuilder, BallSocketConstraintBuilder, BallSocket>(bodyBuilder, constraintBuilder, 10, 10, 10, 70, initializationThreadPool, writer); initializationThreadPool.Dispose(); writer.Flush(); var path = "log.txt"; using (var stream = File.OpenWrite(path)) { Console.WriteLine($"Writing results to path: {Path.GetFullPath(path)}"); var bytes = memoryStream.ToArray(); stream.Write(bytes, 0, bytes.Length); } Console.ReadKey(); }