public async Task <ACADIAHeatMapOutputs> Handler(ACADIAHeatMapInputs args, ILambdaContext context) { if (this.store == null) { // Preload the dependencies (if they exist), // so that they are available during model deserialization. var asmLocation = this.GetType().Assembly.Location; var asmDir = Path.GetDirectoryName(asmLocation); var asmName = Path.GetFileNameWithoutExtension(asmLocation); var depPath = Path.Combine(asmDir, $"{asmName}.Dependencies.dll"); if (File.Exists(depPath)) { Console.WriteLine($"Loading dependencies from assembly: {depPath}..."); Assembly.LoadFrom(depPath); Console.WriteLine("Dependencies assembly loaded."); } this.store = new S3ModelStore <ACADIAHeatMapInputs>(RegionEndpoint.USWest1); } var l = new InvocationWrapper <ACADIAHeatMapInputs, ACADIAHeatMapOutputs>(store, ACADIAHeatMap.Execute); var output = await l.InvokeAsync(args); return(output); }
/// <summary> /// The ACADIAHeatMap function. /// </summary> /// <param name="model">The input model.</param> /// <param name="input">The arguments to the execution.</param> /// <returns>A ACADIAHeatMapOutputs instance containing computed results and the model with any new elements.</returns> public static ACADIAHeatMapOutputs Execute(Dictionary <string, Model> inputModels, ACADIAHeatMapInputs input) { if (!inputModels.TryGetValue("Envelope", out var envelopeModel)) { throw new Exception("womp womp envelope"); } var env = envelopeModel.AllElementsOfType <Envelope>().ToArray()[0]; var profile = env.Profile.Perimeter; if (!inputModels.TryGetValue("BlobData", out var internalPtsModel)) { throw new Exception("womp womp model points"); } var pts = internalPtsModel.AllElementsOfType <ModelPoints>().Where(n => n.Name == "BlobCentroids"); var modelPts = pts.ToArray()[0]; var distances = "fake distances"; var output = new ACADIAHeatMapOutputs(distances); // The analyze function computes the distance // to the attractor. var analyze = new Func <Vector3, double>((v) => { var dist = ClosestPointDist(v, modelPts); distances += dist.ToString(); distances += ","; return(dist); }); // Construct a color scale from a small number // of colors. var colorScale = new ColorScale(new List <Color>() { Colors.Cyan, Colors.Purple, Colors.Orange }, 10); var analysisMesh = new AnalysisMesh(profile, input.CellSize, input.CellSize, colorScale, analyze); var zDelta = analysisMesh.Transform.ZAxis.Z - profile.Centroid().Z; analysisMesh.Analyze(); analysisMesh.Transform.Move(zDelta); output.Model.AddElement(analysisMesh); return(output); }