protected BagBuildingSettings createBuildingSettings(BagFunctionType type, int min, int max, string material)
        {
            const int EXAGERATION_FACTOR = 1;
            var       bs = new BagBuildingSettings();

            bs.Type     = type;
            bs.Material = (Material)Resources.Load(material, typeof(Material));
            bs.MinimumBuildingHeight = EXAGERATION_FACTOR * min;
            bs.MaximumBuildingHeight = EXAGERATION_FACTOR * max;
            bs.IsVolumetric          = true;
            return(bs);
        }
        private static void SetProperties(JSONObject geo, Building building, BagBuildingSettings typeSettings)
        {
            building.name = "building " + geo["properties"]["id"].ToString();
            if (geo["properties"].HasField("name"))
            {
                building.Name = geo["properties"]["name"].str;
            }

            building.Id      = geo["properties"]["id"].ToString();
            building.Type    = geo["type"].str;
            building.SortKey = (int)geo["properties"]["sort_key"].f;
            building.Kind    = typeSettings.Type.ToString();
            // building.Type = typeSettings.Type.ToString();
            building.GetComponent <MeshRenderer>().material = typeSettings.Material;
        }
        private void CreateMesh(List <Vector3> corners, float min_height, float height, BagBuildingSettings typeSettings, MeshData data, Vector2 min, Vector2 size)
        {
            var vertsStartCount = _useTriangulationNet
                    ? CreateRoofTriangulation(corners, height, data)
                    : CreateRoofClass(corners, height, data);

            foreach (var c in corners)
            {
                data.UV.Add(new Vector2((c.x - min.x), (c.z - min.y)));
            }

            if (typeSettings.IsVolumetric)
            {
                float   d = 0f;
                Vector3 v1;
                Vector3 v2;
                int     ind = 0;
                //for (int i = corners.Count - 1; i < 1; i--)
                for (int i = 1; i < corners.Count; i++)
                {
                    v1  = data.Vertices[vertsStartCount + i - 1];
                    v2  = data.Vertices[vertsStartCount + i];
                    ind = data.Vertices.Count;
                    data.Vertices.Add(v1);
                    data.Vertices.Add(v2);
                    data.Vertices.Add(new Vector3(v1.x, min_height, v1.z));
                    data.Vertices.Add(new Vector3(v2.x, min_height, v2.z));

                    d = (v2 - v1).magnitude;

                    data.UV.Add(new Vector2(0, 0));
                    data.UV.Add(new Vector2(d, 0));
                    data.UV.Add(new Vector2(0, height));
                    data.UV.Add(new Vector2(d, height));

                    data.Indices.Add(ind);
                    data.Indices.Add(ind + 2);
                    data.Indices.Add(ind + 1);

                    data.Indices.Add(ind + 1);
                    data.Indices.Add(ind + 2);
                    data.Indices.Add(ind + 3);
                }

                v1  = data.Vertices[vertsStartCount];
                v2  = data.Vertices[vertsStartCount + corners.Count - 1];
                ind = data.Vertices.Count;
                data.Vertices.Add(v1);
                data.Vertices.Add(v2);
                data.Vertices.Add(new Vector3(v1.x, min_height, v1.z));
                data.Vertices.Add(new Vector3(v2.x, min_height, v2.z));

                d = (v2 - v1).magnitude;

                data.UV.Add(new Vector2(0, 0));
                data.UV.Add(new Vector2(d, 0));
                data.UV.Add(new Vector2(0, height));
                data.UV.Add(new Vector2(d, height));

                data.Indices.Add(ind);
                data.Indices.Add(ind + 1);
                data.Indices.Add(ind + 2);

                data.Indices.Add(ind + 1);
                data.Indices.Add(ind + 3);
                data.Indices.Add(ind + 2);
            }
        }