예제 #1
0
        /// <summary>
        /// Export all splines
        /// </summary>
        public static void ExportSplines(string path)
        {
            xoff = CourseBase.Info.geoX;
            zoff = CourseBase.Info.geoY;

            File export = new File();

            export.type                = "FeatureCollection";
            export.crs.type            = "name";
            export.crs.properties.name = "+proj=utm +zone=" + CourseBase.Info.utmZone + " +ellps=GRS80 +datum=NAD83 +units=m +no_defs";

            List <SplineBase> splines = CourseBase.Curves;

            for (int i = 0; i < splines.Count; ++i)
            {
                File.Feature feature = new File.Feature();
                feature.type                 = "Feature";
                feature.id                   = "id" + i.ToString();
                feature.geometry.type        = "Polygon";
                feature.geometry.coordinates = new List <List <float[]> >();
                feature.properties.Layer     = splines[i].Layer.name;

                List <List <float[]> > coordinates = (List <List <float[]> >)feature.geometry.coordinates;
                coordinates.Add(new List <float[]>());

                Vector3[] lines = splines[i].Lines.Lines;
                for (int j = 0; j < lines.Length; ++j)
                {
                    float[] xy = new float[2];
                    xy[0] = xoff + lines[j].x;
                    xy[1] = zoff + lines[j].z;
                    coordinates[0].Add(xy);
                }

                export.features.Add(feature);
            }

            PlatformBase.IO.WriteText(path, Utility.JsonWrite(export));
        }
예제 #2
0
        /// <summary>
        /// Import splines from file
        /// </summary>
        /// <param name="path"></param>
        public static void ImportSplines(string path)
        {
            try
            {
                File file = Utility.JsonRead <File>(PlatformBase.IO.ReadText(path));
                for (int i = 0; i < file.features.Count; ++i)
                {
                    File.Feature feature = file.features[i];
                    if (feature.geometry.type == "Polygon" && feature.geometry.coordinates.GetType() == typeof(Double[][][]))
                    {
                        Double[][][] coordinates = (Double[][][])feature.geometry.coordinates;

                        for (int p = 0; p < coordinates.Length; ++p)
                        {
                            List <Vector3> poly = new List <Vector3>();
                            for (int t = 0; t < coordinates[p].Length; ++t)
                            {
                                poly.Add(new Vector3((float)coordinates[p][t][0] - CourseBase.Info.geoX, 0, (float)coordinates[p][t][1] - CourseBase.Info.geoY));
                            }

                            for (int t = 0; t < poly.Count; ++t)
                            {
                                poly[t] = new Vector3(poly[t].x, CourseBase.TerrainHeight(poly[t].x, poly[t].z), poly[t].z);
                            }

                            if (CourseBase.IsHazard(file.features[i].properties.Layer))
                            {
                                CourseBase.CreateHazard(poly.ToArray(), CourseBase.GetLayer(file.features[i].properties.Layer, CourseBase.HazardLayers), 0, true);
                            }
                            else
                            {
                                CourseBase.CreateSpline(poly.ToArray(), CourseBase.GetLayer(file.features[i].properties.Layer, CourseBase.SplineLayers), 0, true);
                            }
                        }
                    }
                    else if (feature.geometry.type == "Polygon" && feature.geometry.coordinates.GetType() == typeof(object[][]))
                    {
                        object[][] coordinates = (object[][])feature.geometry.coordinates;

                        for (int p = 0; p < coordinates.Length; ++p)
                        {
                            List <Vector3> poly = new List <Vector3>();
                            for (int t = 0; t < coordinates[p].Length; ++t)
                            {
                                float x = 0;
                                float y = 0;
                                if (coordinates[p][t].GetType() == typeof(object[]))
                                {
                                    object[] xy = (object[])coordinates[p][t];
                                    x = System.Convert.ToSingle(xy[0]);
                                    y = System.Convert.ToSingle(xy[1]);
                                }
                                if (coordinates[p][t].GetType() == typeof(double[]))
                                {
                                    double[] xy = (double[])coordinates[p][t];
                                    x = System.Convert.ToSingle(xy[0]);
                                    y = System.Convert.ToSingle(xy[1]);
                                }
                                if (coordinates[p][t].GetType() == typeof(int[]))
                                {
                                    int[] xy = (int[])coordinates[p][t];
                                    x = System.Convert.ToSingle(xy[0]);
                                    y = System.Convert.ToSingle(xy[1]);
                                }
                                poly.Add(new Vector3(x - CourseBase.Info.geoX, 0, y - CourseBase.Info.geoY));
                            }

                            for (int t = 0; t < poly.Count; ++t)
                            {
                                poly[t] = new Vector3(poly[t].x, CourseBase.TerrainHeight(poly[t].x, poly[t].z), poly[t].z);
                            }

                            if (CourseBase.IsHazard(file.features[i].properties.Layer))
                            {
                                CourseBase.CreateHazard(poly.ToArray(), CourseBase.GetLayer(file.features[i].properties.Layer, CourseBase.HazardLayers), 0, true);
                            }
                            else
                            {
                                CourseBase.CreateSpline(poly.ToArray(), CourseBase.GetLayer(file.features[i].properties.Layer, CourseBase.SplineLayers), 0, true);
                            }
                        }
                    }
                    else
                    {
                        Debug.LogError("Feature " + feature.id + "(" + feature.geometry.coordinates.GetType() + ") is not a Polygon");
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
        }