// Use this for initialization
    void Start()
    {
        string        bilFilePath    = @"C:\n49_e019_1arc_v3.bil";
        HeightmapFile heightmapFile  = new HeightmapFile();
        const int     filePixelWidth = 3601;

        heightmapFile.loadFile(bilFilePath, 3601);
        //heightmapFile.MirrorReflectHeightDataInXAxis();

        MyTotalHeightmap totalHeightmap = new MyTotalHeightmap();

        const int         subTerrainCount = 14;
        int               minSubmapWidth  = (int)Math.Floor((double)filePixelWidth / subTerrainCount);
        List <SubmapInfo> submapInfos     = new List <SubmapInfo>
        {
            //        newSubmapDimension(2,2,2,2,minSubmapWidth, 4),


            newSubmapDimension(0, 0, 4, 4, minSubmapWidth, 6),
            newSubmapDimension(0, 4, 4, 6, minSubmapWidth, 7),
            newSubmapDimension(4, 0, 6, 4, minSubmapWidth, 5), //todo delete
            newSubmapDimension(0, 10, 4, 4, minSubmapWidth, 4),
            newSubmapDimension(4, 4, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(4, 6, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(4, 8, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(6, 4, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(6, 8, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(6, 8, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(8, 4, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(8, 6, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(8, 8, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(6, 6, 2, 2, minSubmapWidth, 2 + 4),
            newSubmapDimension(10, 4, 4, 6, minSubmapWidth, 3 + 2),
            newSubmapDimension(10, 10, 4, 4, minSubmapWidth, 4 + 1),
            newSubmapDimension(4, 10, 6, 4, minSubmapWidth, 3 + 4),
            newSubmapDimension(10, 0, 4, 4, minSubmapWidth, 3 + 4),


            //newSubmapDimension(0,0,1,1,minSubmapWidth, 1),
            //newSubmapDimension(0,1,1,1,minSubmapWidth, 1),
            //newSubmapDimension(0,2,1,1,minSubmapWidth, 1),
            //newSubmapDimension(1,0,1,1,minSubmapWidth, 1),
            //newSubmapDimension(1,1,1,1,minSubmapWidth, 1),
            //newSubmapDimension(1,2,1,1,minSubmapWidth, 1),
            //newSubmapDimension(2,0,1,1,minSubmapWidth, 1),
            //newSubmapDimension(2,1,1,1,minSubmapWidth, 1),
            //newSubmapDimension(2,2,1,1,minSubmapWidth, 1),
        };

        //SubmapPlane.CreatePlaneObject(heightFloats);
        totalHeightmap.LoadHeightmap(heightmapFile, submapInfos, minSubmapWidth, subTerrainCount);
    }
Example #2
0
        public void LoadMeta(HeightmapFile heightmap)
        {
            var fn = ((heightmap?.RpfFileEntry?.Name) ?? "") + ".xml";

            Xml      = HmapXml.GetXml(heightmap);
            FileName = fn;
            RawPropertyGrid.SelectedObject = heightmap;
            rpfFileEntry = heightmap?.RpfFileEntry;
            modified     = false;
            metaFormat   = MetaFormat.XML;
            if (heightmap?.RpfFileEntry != null)
            {
                metaFormat = MetaFormat.Heightmap;
            }
        }
Example #3
0
        public void Start231()
        {
            string        bilFilePath    = @"C:\inz\cont\n49_e019_1arc_v3.bil";
            HeightmapFile heightmapFile  = new HeightmapFile();
            const int     filePixelWidth = 3601;

            heightmapFile.LoadFile(bilFilePath, 3601);
            heightmapFile.MirrorReflectHeightDataInXAxis();
            var heightArray = heightmapFile.GlobalHeightArray;

            var smallArray = HeightmapUtils.CutSubArray(heightArray, new IntArea(100, 100, 240, 240));

            SavingFileManager.SaveTextureToPngFile(@"C:\inz\cont\smallCut.png",
                                                   HeightmapUtils.CreateTextureFromHeightmap(smallArray));
        }
Example #4
0
        public void TestSaveMethod()
        {
            HeightmapFile heightmapFile = new HeightmapFile();

            heightmapFile.Load(TEST_FILE);

            MemoryStream savedStream = new MemoryStream();

            heightmapFile.Save(savedStream);
            heightmapFile.Load(TEST_FILE);

            savedStream.Seek(0, SeekOrigin.Begin);

            HeightmapFile savedHeightmapFile = new HeightmapFile();

            savedHeightmapFile.Load(savedStream);

            savedStream.Close();

            for (int x = 0; x < heightmapFile.Height; x++)
            {
                for (int y = 0; y < heightmapFile.Width; y++)
                {
                    Assert.AreEqual(heightmapFile[x, y], savedHeightmapFile[x, y], "Height values do not match");
                }
            }

            for (int x = 0; x < heightmapFile.Patches.GetLength(0); x++)
            {
                for (int y = 0; y < heightmapFile.Patches.GetLength(1); y++)
                {
                    Assert.AreEqual(heightmapFile.Patches[x, y].Minimum, savedHeightmapFile.Patches[x, y].Minimum, "Minimum patch values do not match");
                    Assert.AreEqual(heightmapFile.Patches[x, y].Maximum, savedHeightmapFile.Patches[x, y].Maximum, "Maximum patch values do not match");
                }
            }

            for (int i = 0; i < heightmapFile.QuadPatches.Length; i++)
            {
                Assert.AreEqual(heightmapFile.QuadPatches[i].Minimum, savedHeightmapFile.QuadPatches[i].Minimum, "Minimum quad patch values do not match");
                Assert.AreEqual(heightmapFile.QuadPatches[i].Maximum, savedHeightmapFile.QuadPatches[i].Maximum, "Maximum quad patch values do not match");
            }
        }
Example #5
0
        public void TestLoadMethod()
        {
            const int HEIGHT = 65;
            const int WIDTH  = 65;

            Stream stream = File.OpenRead(TEST_FILE);

            stream.Seek(0, SeekOrigin.End);
            long fileSize = stream.Position;

            stream.Seek(0, SeekOrigin.Begin);

            HeightmapFile heightmapFile = new HeightmapFile();

            heightmapFile.Load(stream);

            long streamPosition = stream.Position;

            stream.Close();

            Assert.AreEqual(fileSize, streamPosition, "Not all of the file was read");
            Assert.AreEqual(WIDTH, heightmapFile.Width, "Incorrect width");
            Assert.AreEqual(HEIGHT, heightmapFile.Height, "Incorrect height");
        }
Example #6
0
        private void BuildHeightmapVertices(HeightmapFile hmf, List <EditorVertex> vl, List <Vector4> nl)
        {
            var v1 = new EditorVertex();
            var v2 = new EditorVertex();
            var v3 = new EditorVertex();
            var v4 = new EditorVertex();

            uint cgrn = (uint)new Color(0, 128, 0, 60).ToRgba();
            uint cyel = (uint)new Color(128, 128, 0, 200).ToRgba();

            var w    = hmf.Width;
            var h    = hmf.Height;
            var hmin = hmf.MinHeights;
            var hmax = hmf.MaxHeights;
            var min  = hmf.BBMin;
            var max  = hmf.BBMax;
            var siz  = max - min;
            var step = siz / new Vector3(w - 1, h - 1, 255);

            v1.Colour = v2.Colour = v3.Colour = v4.Colour = cyel;
            for (int yi = 1; yi < h; yi++)
            {
                var yo = yi - 1;
                for (int xi = 1; xi < w; xi++)
                {
                    var xo = xi - 1;
                    var o1 = yo * w + xo;
                    var o2 = yo * w + xi;
                    var o3 = yi * w + xo;
                    var o4 = yi * w + xi;
                    v1.Position = min + step * new Vector3(xo, yo, hmin[o1]);
                    v2.Position = min + step * new Vector3(xi, yo, hmin[o2]);
                    v3.Position = min + step * new Vector3(xo, yi, hmin[o3]);
                    v4.Position = min + step * new Vector3(xi, yi, hmin[o4]);
                    vl.Add(v1); vl.Add(v2); vl.Add(v3);
                    vl.Add(v3); vl.Add(v2); vl.Add(v4);
                }
            }
            v1.Colour = v2.Colour = v3.Colour = v4.Colour = cgrn;
            for (int yi = 1; yi < h; yi++)
            {
                var yo = yi - 1;
                for (int xi = 1; xi < w; xi++)
                {
                    var xo = xi - 1;
                    var o1 = yo * w + xo;
                    var o2 = yo * w + xi;
                    var o3 = yi * w + xo;
                    var o4 = yi * w + xi;
                    v1.Position = min + step * new Vector3(xo, yo, hmax[o1]);
                    v2.Position = min + step * new Vector3(xi, yo, hmax[o2]);
                    v3.Position = min + step * new Vector3(xo, yi, hmax[o3]);
                    v4.Position = min + step * new Vector3(xi, yi, hmax[o4]);
                    vl.Add(v1); vl.Add(v2); vl.Add(v3);
                    vl.Add(v3); vl.Add(v2); vl.Add(v4);
                }
            }

            for (int y = 0; y < h; y++)
            {
                for (int x = 0; x < w; x++)
                {
                    var o = y * w + x;
                    nl.Add(new Vector4(min + step * new Vector3(x, y, hmin[o]), 10));
                    nl.Add(new Vector4(min + step * new Vector3(x, y, hmax[o]), 10));
                }
            }
        }