protected override void SolveInstance(IGH_DataAccess DA) { Vector3d iGravity = Vector3d.Unset; double iTimestep = double.NaN; int iSteps = 10; bool iReset = false; bool iRun = false; DA.GetData("Gravity", ref iGravity); DA.GetData("Timestep", ref iTimestep); DA.GetData("Steps", ref iSteps); DA.GetData("Reset", ref iReset); DA.GetData("Run", ref iRun); if (iReset || system == null) { system = new GhPxSystem(); List <PxGhRigidBody> iRigidBodies = new List <PxGhRigidBody>(); foreach (GH_ObjectWrapper flatten in Params.Input[0].VolatileData.AllData(true)) { iRigidBodies.Add((PxGhRigidBody)flatten.Value); } foreach (PxGhRigidBody o in iRigidBodies) { if (o is PxGhRigidDynamic) { PxGhRigidDynamic d = o as PxGhRigidDynamic; system.AddRigidDynamic(d); d.Reset(); } else if (o is PxGhRigidStatic) { PxGhRigidStatic s = o as PxGhRigidStatic; system.AddRigidStatic(s); } } staticGhMeshes = system.GetRigidStaticDisplayGhMeshes(); } if (iRun) { ExpireSolution(true); } stopwatch.Restart(); system.Gravity = iGravity; system.Update((float)iTimestep, iSteps); stopwatch.Stop(); string info = ""; foreach (var o in system.ghPxRigidDynamics) { info += "\n" + o.actor.IsSleeping; } DA.SetData("Info", decimal.Round((decimal)stopwatch.Elapsed.TotalMilliseconds, 2) + "ms" + info); DA.SetDataList("Statics", staticGhMeshes); DA.SetDataList("Dynamics", system.GetRigidDynamicDisplayGhMeshes()); }
protected override void SolveInstance(IGH_DataAccess DA) { Vector3d iGravity = Vector3d.Unset; double iTimestep = double.NaN; int iSteps = 10; int iMouseManipulationMode = 0; double iMouseManipulationStrength = double.NaN; bool iReset = false; bool iRun = false; DA.GetData(1, ref iGravity); DA.GetData(2, ref iTimestep); DA.GetData(3, ref iSteps); DA.GetData(4, ref iMouseManipulationMode); DA.GetData(5, ref iMouseManipulationStrength); DA.GetData(6, ref iReset); DA.GetData(7, ref iRun); if (iReset || system == null) { system = new GhPxSystem(); List <PxGhRigidBody> iRigidBodies = new List <PxGhRigidBody>(); foreach (var ghGoo in Params.Input[0].VolatileData.AllData(true)) { iRigidBodies.Add((PxGhRigidBody)(((GH_ObjectWrapper)ghGoo).Value)); } foreach (PxGhRigidBody o in iRigidBodies) { switch (o) { case PxGhRigidDynamic rigidDynamic: { system.AddRigidDynamic(rigidDynamic); rigidDynamic.Reset(); break; } case PxGhRigidStatic rigidStatic: system.AddRigidStatic(rigidStatic); break; } } staticGhMeshes = system.GetRigidStaticDisplayedGhMeshes(); } info = ""; if (iRun) { ExpireSolution(true); stopwatch.Restart(); system.Gravity = iGravity; system.MouseManipulationStrength = iMouseManipulationStrength; system.MouseManipulationMode = (MouseManipulationMode)iMouseManipulationMode; system.Iterate((float)iTimestep, iSteps); stopwatch.Stop(); } DA.SetData(0, decimal.Round((decimal)stopwatch.Elapsed.TotalMilliseconds, 2) + "ms" + info); DA.SetDataList(1, system.GetRigidDynamicDisplayedGhMeshes()); if (outputDynamicFrames) { DA.SetDataList(2, system.GetDynamicFramesAsGhPlanes()); } DA.SetDataList(3, staticGhMeshes); }