Ejemplo n.º 1
0
        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);
        }