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())))); }
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; }
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; }
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; }
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); }