Пример #1
0
        public static void ProcessDynamics(IDynamic dyn, List <GH_Point> points, List <GH_Vector> vectors, GH_Surface surface)
        {
            dyn.Process(points, vectors, surface);

            if (dyn.Accelerated)
            {
                // account for acceleration, if necessary
                var output = new List <GH_Vector>();
                for (int i = 0; i < vectors.Count; i++)
                {
                    output.Add(new GH_Vector());
                }

                if (dyn.Param.Contains("accelerationVectors"))
                {
                    var v0 = dyn.Param["accelerationVectors"] as List <GH_Vector>;

                    double drag = 1.0d;
                    if (dyn.Param.Contains("Dg"))
                    {
                        drag = (dyn.Param["Dg"] as GH_Number).Value;
                    }

                    // if vectors have been added (say via new particles) we need to
                    // add the difference in new vectors (unset)
                    if (v0.Count < vectors.Count)
                    {
                        for (int i = vectors.Count - v0.Count; i >= 0; i--)
                        {
                            v0.Add(new GH_Vector(Vector3d.Unset));
                        }
                    }

                    for (int i = 0; i < vectors.Count; i++)
                    {
                        // if v0 is unset its because we want to reset this accel vector externally
                        if (v0[i].Value == Vector3d.Unset)
                        {
                            output[i] = new GH_Vector();
                        }
                        else
                        {
                            output[i]        = new GH_Vector(v0[i].Value + (vectors[i].Value * drag));
                            vectors[i].Value = v0[i].Value + ((vectors[i].Value * drag) / 2);
                        }
                    }
                }

                dyn.Param["accelerationVectors"] = output;
            }
        }