public async Task <NYCZoningDistrictsOutputs> Handler(NYCZoningDistrictsInputs 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 <NYCZoningDistrictsInputs>(RegionEndpoint.USWest1);
            }

            var l      = new InvocationWrapper <NYCZoningDistrictsInputs, NYCZoningDistrictsOutputs>(store, NYCZoningDistricts.Execute);
            var output = await l.InvokeAsync(args);

            return(output);
        }
Beispiel #2
0
        /// <summary>
        /// The NYCZoningDistricts function.
        /// </summary>
        /// <param name="model">The input model.</param>
        /// <param name="input">The arguments to the execution.</param>
        /// <returns>A NYCZoningDistrictsOutputs instance containing computed results and the model with any new elements.</returns>
        public static NYCZoningDistrictsOutputs Execute(Dictionary<string, Model> inputModels, NYCZoningDistrictsInputs input)
        {
            inputModels.TryGetValue("location", out Model originModel);
            if (originModel == null)
            {
                throw new Exception("No location model present.");
            }
            var origin = originModel.AllElementsOfType<Origin>().FirstOrDefault();
            if (origin == null)
            {
                var allKnownTypes = originModel.Elements.Values.Select(e => e.GetType().ToString()).Distinct();
                var joined = String.Join(", ", allKnownTypes);
                throw new Exception($"Unable to locate the site origin. Keys are {String.Join(", ", inputModels.Keys)}. " +
                $"There are {originModel.Elements.Count} elements. The only types found in the location were: {joined}");
            }


            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith("ZoningDistricts.json"));

            string json = "";
            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
            using (StreamReader reader = new StreamReader(stream))
            {
                json = reader.ReadToEnd();
            }

            //var json = File.ReadAllText("ZoningDistricts.json");
            var zoningInfo = JsonConvert.DeserializeObject<ZoningInfo>(json);
            var originAsPoint = new Vector3(origin.Position.Longitude * 1000.0, origin.Position.Latitude * 1000.0);
            Console.WriteLine(originAsPoint);
            var model = new Model();
            int i = 0;
            foreach (var boundarySet in zoningInfo)
            {
                foreach (var boundary in boundarySet.Boundaries)
                {
                    var crv = boundary.Boundary;
                    if (crv == null) continue;
                    if (crv.Contains(originAsPoint))
                    {
                        var worldCrv = boundary.GetWorldSpaceBoundary(origin);
                        var regionLamina = new Lamina(worldCrv, false);
                        var rep = new Representation(new SolidOperation[] { regionLamina });
                        var mat = new Material("Zoning Region", Guid.NewGuid());
                        var zoneFirstChar = boundarySet.ZoningDist.First().ToString();
                        mat.Color = ZoningInfo.ZoneColorCodes.ContainsKey(zoneFirstChar) ? ZoningInfo.ZoneColorCodes[zoneFirstChar] : new Color(0.7, 0.2, 1.0, 0.3);
                        Console.WriteLine(boundarySet.ZoningDist);
                        model.AddElement(new ModelCurve(worldCrv));
                        model.AddElement(new ZoningDistrict(boundarySet.ZoningDist, worldCrv, origin.Position.Latitude, origin.Position.Longitude, new Transform(0, 0, 5), mat, rep, false, Guid.NewGuid(), ""));
                    }

                }
                i++;
            }
            var outputs = new NYCZoningDistrictsOutputs();
            outputs.model = model;
            return outputs;
        }