public override void Evaluate(FSharpList <Value> args, Dictionary <PortData, Value> outPuts) { object arg0 = ((Value.Container)args[0]).Item; Autodesk.Revit.DB.Face f = null; if (arg0 is Reference) { Reference faceRef = arg0 as Reference; f = dynRevitSettings.Doc.Document.GetElement(faceRef.ElementId).GetGeometryObjectFromReference(faceRef) as Autodesk.Revit.DB.Face; } double d = ((Value.Number)args[1]).Item; //dampening double s = ((Value.Number)args[2]).Item; //spring constant double r = ((Value.Number)args[3]).Item; //rest length double m = ((Value.Number)args[4]).Item; //nodal mass int numX = (int)((Value.Number)args[5]).Item; //number of particles in X int numY = (int)((Value.Number)args[6]).Item; //number of particles in Y double g = ((Value.Number)args[7]).Item; //gravity z component ParticleSystem.setIsFaceConstrained(true); ParticleSystem.setConstraintFace(f); ParticleSystem.Clear(); setupParticleSystem(f, numX, numY, d, r, s, m); ParticleSystem.setGravity(g); outPuts[OutPortData[0]] = Value.NewContainer(ParticleSystem); }