Пример #1
0
        public override void Evaluate(FSharpList <Value> args, Dictionary <PortData, Value> outPuts)
        {
            _points    = ((Value.List)args[0]).Item;                      //point list
            _curves    = ((Value.List)args[1]).Item;                      //spring list
            _d         = ((Value.Number)args[2]).Item;                    //dampening
            _s         = ((Value.Number)args[3]).Item;                    //spring constant
            _r         = ((Value.Number)args[4]).Item;                    //rest length
            _useRl     = Convert.ToBoolean(((Value.Number)args[5]).Item); //use rest length
            _rlf       = ((Value.Number)args[6]).Item;                    //rest length factor
            _m         = ((Value.Number)args[7]).Item;                    //nodal mass
            _g         = ((Value.Number)args[8]).Item;                    //gravity z component
            _threshold = ((Value.Number)args[9]).Item;                    //convergence threshold

            //if we are in the evaluate, this has been
            //marked dirty and we should set it to unconverged
            //in case one of the inputs has changed.
            ParticleSystem.setConverged(false);
            ParticleSystem.setGravity(_g);
            ParticleSystem.setThreshold(_threshold);

            //if the particle system has a different layout, then
            //clear it instead of updating
            if (ParticleSystem.numberOfParticles() == 0 ||
                _fixPtCount != _points.Count() ||
                _curves.Count() != ParticleSystem.numberOfSprings() ||
                _reset)
            {
                ResetSystem(_points, _curves);
            }
            else
            {
                UpdateSystem();
            }

            outPuts[_psPort]     = Value.NewContainer(ParticleSystem);
            outPuts[_forcesPort] = Value.NewList(Utils.SequenceToFSharpList(
                                                     ParticleSystem.Springs.Select(s => Value.NewNumber(s.getResidualForce()))));
        }
Пример #2
0
        private void ResetSystem(FSharpList <Value> points, FSharpList <Value> curves)
        {
            if (points == null || curves == null)
            {
                return;
            }

            //particleSystem.Clear();
            particleSystem = null;
            particleSystem = new ParticleSystem();

            _fixPtCount = points.Count();

            particleSystem.setConverged(false);
            particleSystem.setGravity(_g);
            particleSystem.setThreshold(_threshold);

            CreateSpringsFromCurves(curves, points);

            DispatchOnUIThread(new Action(dynSettings.Controller.RequestClearDrawables));

            _reset = false;
        }
Пример #3
0
        private void ResetSystem(IEnumerable <XYZ> points, IEnumerable <Curve> curves)
        {
            if (points == null || curves == null)
            {
                return;
            }

            //particleSystem.Clear();
            ParticleSystem = null;
            ParticleSystem = new ParticleSystem();

            fixPtCount = points.Count();

            ParticleSystem.setConverged(false);
            ParticleSystem.setGravity(g);
            ParticleSystem.setThreshold(threshold);

            CreateSpringsFromCurves(curves, points);

            DispatchOnUIThread(dynSettings.Controller.RequestClearDrawables);

            reset = false;
        }
Пример #4
0
        private void ResetSystem(FSharpList<Value> points, FSharpList<Value> curves)
        {
            if (points == null || curves == null)
                return;

            //particleSystem.Clear();
            particleSystem = null;
            particleSystem = new ParticleSystem();

            _fixPtCount = points.Count();

            particleSystem.setConverged(false);
            particleSystem.setGravity(_g);
            particleSystem.setThreshold(_threshold);

            CreateSpringsFromCurves(curves, points);

            DispatchOnUIThread(new Action(dynSettings.Controller.RequestClearDrawables));

            _reset = false;
        }
Пример #5
0
        private void ResetSystem(IEnumerable<XYZ> points, IEnumerable<Curve> curves)
        {
            if (points == null || curves == null)
                return;

            //particleSystem.Clear();
            ParticleSystem = null;
            ParticleSystem = new ParticleSystem();

            fixPtCount = points.Count();

            ParticleSystem.setConverged(false);
            ParticleSystem.setGravity(g);
            ParticleSystem.setThreshold(threshold);

            CreateSpringsFromCurves(curves, points);

            DispatchOnUIThread(dynSettings.Controller.RequestClearDrawables);
        }