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