aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/Terrain
diff options
context:
space:
mode:
authorAdam Frisby2008-04-06 14:04:59 +0000
committerAdam Frisby2008-04-06 14:04:59 +0000
commit0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774 (patch)
tree133d385f049e0541c99485f30423966edaf1be92 /OpenSim/Region/Environment/Modules/Terrain
parent* Various terrain engine fixes (diff)
downloadopensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.zip
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.gz
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.bz2
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.xz
* Whoops, forgot to include all the new terrain file loaders and things.
* Added MapImageModule for handling world-map * Added new DefaultTerrainGenerator.cs * Added BMP loader * Added GIF loader * Added PNG loader * Added TIFF loader
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Terrain')
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs125
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs59
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs47
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs47
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs127
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs47
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs47
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs94
8 files changed, 593 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs
new file mode 100644
index 0000000..29a9003
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs
@@ -0,0 +1,125 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.Region.Environment.Modules.Terrain;
31using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Framework;
33
34namespace OpenSim.Region.Environment.Modules.Terrain.Effects
35{
36 class CookieCutter : ITerrainEffect
37 {
38 #region ITerrainEffect Members
39
40 public void RunEffect(ITerrainChannel map)
41 {
42 FloodBrushes.SmoothArea smooth = new FloodBrushes.SmoothArea();
43 ITerrainPaintableEffect eroder = new PaintBrushes.WeatherSphere();
44
45 bool[,] cliffMask = new bool[map.Width, map.Height];
46 bool[,] channelMask = new bool[map.Width, map.Height];
47 bool[,] smoothMask = new bool[map.Width, map.Height];
48
49 Console.WriteLine("S1");
50
51 // Step one, generate rough mask
52 int x, y;
53 for (x = 0; x < map.Width; x++)
54 {
55 for (y = 0; y < map.Height; y++)
56 {
57 Console.Write(".");
58 smoothMask[x, y] = true;
59
60 // Start underwater
61 map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 5;
62 // Add a little height. (terrain should now be above water, mostly.)
63 map[x, y] += 20;
64
65 int channelsX = 4;
66 int channelWidth = (map.Width / channelsX / 4);
67 int channelsY = 4;
68 int channelHeight = (map.Height / channelsY / 4);
69
70 SetLowerChannel(map, cliffMask, channelMask, x, y, channelsX, channelWidth, map.Width, x);
71 SetLowerChannel(map, cliffMask, channelMask, x, y, channelsY, channelHeight, map.Height, y);
72 }
73 }
74
75 Console.WriteLine("S2");
76 //smooth.FloodEffect(map, smoothMask, 4.0);
77
78 Console.WriteLine("S3");
79 for (x = 0; x < map.Width; x++)
80 {
81 for (y = 0; y < map.Height; y++)
82 {
83 if (cliffMask[x, y] == true)
84 eroder.PaintEffect(map, x, y, 4, 0.1);
85 }
86 }
87
88 for (x = 0; x < map.Width; x += 2)
89 {
90 for (y = 0; y < map.Height; y += 2)
91 {
92 if (map[x, y] < 0.1)
93 map[x, y] = 0.1;
94 if (map[x, y] > 256)
95 map[x, y] = 256;
96 }
97 }
98 //smooth.FloodEffect(map, smoothMask, 4.0);
99 }
100
101 private static void SetLowerChannel(ITerrainChannel map, bool[,] cliffMask, bool[,] channelMask, int x, int y, int numChannels, int channelWidth, int mapSize, int rp)
102 {
103 for (int i = 0; i < numChannels; i++)
104 {
105 double distanceToLine = Math.Abs(rp - ((mapSize / numChannels) * i));
106
107 if (distanceToLine < channelWidth)
108 {
109 if (channelMask[x, y])
110 return;
111
112 // Remove channels
113 map[x, y] -= 10;
114 channelMask[x, y] = true;
115 }
116 if (distanceToLine < 1)
117 {
118 cliffMask[x, y] = true;
119 }
120 }
121 }
122
123 #endregion
124 }
125}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs
new file mode 100644
index 0000000..429fa19
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs
@@ -0,0 +1,59 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.Region.Environment.Modules.Terrain;
31using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Framework;
33
34namespace OpenSim.Region.Environment.Modules.Terrain.Effects
35{
36 class DefaultTerrainGenerator : ITerrainEffect
37 {
38 #region ITerrainEffect Members
39
40 public void RunEffect(ITerrainChannel map)
41 {
42 int x, y;
43 for (x = 0; x < map.Width; x++)
44 {
45 for (y = 0; y < map.Height; y++)
46 {
47 map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10;
48 double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01;
49 if (map[x, y] < spherFac)
50 {
51 map[x, y] = spherFac;
52 }
53 }
54 }
55 }
56
57 #endregion
58 }
59}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs
new file mode 100644
index 0000000..3ee707e
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs
@@ -0,0 +1,47 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Drawing;
29using OpenSim.Region.Environment.Interfaces;
30
31namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders
32{
33 class BMP : GenericSystemDrawing
34 {
35 public override void SaveFile(string filename, ITerrainChannel map)
36 {
37 Bitmap colours = CreateGrayscaleBitmapFromMap(map);
38
39 colours.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);
40 }
41
42 public override string ToString()
43 {
44 return "BMP";
45 }
46 }
47}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs
new file mode 100644
index 0000000..377bc53
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs
@@ -0,0 +1,47 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Drawing;
29using OpenSim.Region.Environment.Interfaces;
30
31namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders
32{
33 class GIF : GenericSystemDrawing
34 {
35 public override void SaveFile(string filename, ITerrainChannel map)
36 {
37 Bitmap colours = CreateGrayscaleBitmapFromMap(map);
38
39 colours.Save(filename, System.Drawing.Imaging.ImageFormat.Gif);
40 }
41
42 public override string ToString()
43 {
44 return "GIF";
45 }
46 }
47}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs
new file mode 100644
index 0000000..1b607c7
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs
@@ -0,0 +1,127 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Drawing;
30using OpenSim.Region.Environment.Interfaces;
31
32namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders
33{
34 public class GenericSystemDrawing : ITerrainLoader
35 {
36 #region ITerrainLoader Members
37
38 public virtual ITerrainChannel LoadFile(string filename)
39 {
40 Bitmap file = new Bitmap(filename);
41
42 ITerrainChannel retval = new TerrainChannel(file.Width, file.Height);
43
44 int x, y;
45 for (x = 0; x < file.Width; x++)
46 {
47 for (y = 0; y < file.Height; y++)
48 {
49 retval[x, y] = file.GetPixel(x, y).GetBrightness() * 128;
50 }
51 }
52
53 return retval;
54 }
55
56 public ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h)
57 {
58 throw new NotImplementedException();
59 }
60
61 public override string ToString()
62 {
63 return "SYS.DRAWING";
64 }
65
66 protected Bitmap CreateGrayscaleBitmapFromMap(ITerrainChannel map)
67 {
68 Bitmap bmp = new Bitmap(map.Width, map.Height);
69
70 int pallete = 256;
71
72 Color[] grays = new Color[pallete];
73 for (int i = 0; i < grays.Length; i++)
74 {
75 grays[i] = Color.FromArgb(i, i, i);
76 }
77
78 for (int y = 0; y < map.Height; y++)
79 {
80 for (int x = 0; x < map.Width; x++)
81 {
82 // 512 is the largest possible height before colours clamp
83 int colorindex = (int)(Math.Max(Math.Min(1.0, map[x, y] / 128.0), 0.0) * (pallete - 1));
84
85 bmp.SetPixel(x, map.Height - y - 1, grays[colorindex]);
86 }
87 }
88 return bmp;
89 }
90
91
92 protected Bitmap CreateBitmapFromMap(ITerrainChannel map)
93 {
94 Bitmap gradientmapLd = new Bitmap("defaultstripe.png");
95
96 int pallete = gradientmapLd.Height;
97
98 Bitmap bmp = new Bitmap(map.Width, map.Height);
99 Color[] colours = new Color[pallete];
100
101 for (int i = 0; i < pallete; i++)
102 {
103 colours[i] = gradientmapLd.GetPixel(0, i);
104 }
105
106 for (int y = 0; y < map.Height; y++)
107 {
108 for (int x = 0; x < map.Width; x++)
109 {
110 // 512 is the largest possible height before colours clamp
111 int colorindex = (int)(Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1));
112 bmp.SetPixel(x, map.Height - y - 1, colours[colorindex]);
113 }
114 }
115 return bmp;
116 }
117
118 public virtual void SaveFile(string filename, ITerrainChannel map)
119 {
120 Bitmap colours = CreateGrayscaleBitmapFromMap(map);
121
122 colours.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
123 }
124
125 #endregion
126 }
127}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs
new file mode 100644
index 0000000..7106e6f
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs
@@ -0,0 +1,47 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Drawing;
29using OpenSim.Region.Environment.Interfaces;
30
31namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders
32{
33 class PNG : GenericSystemDrawing
34 {
35 public override void SaveFile(string filename, ITerrainChannel map)
36 {
37 Bitmap colours = CreateGrayscaleBitmapFromMap(map);
38
39 colours.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
40 }
41
42 public override string ToString()
43 {
44 return "PNG";
45 }
46 }
47}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs
new file mode 100644
index 0000000..9ca6e2a
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs
@@ -0,0 +1,47 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Drawing;
29using OpenSim.Region.Environment.Interfaces;
30
31namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders
32{
33 class TIFF : GenericSystemDrawing
34 {
35 public override void SaveFile(string filename, ITerrainChannel map)
36 {
37 Bitmap colours = CreateGrayscaleBitmapFromMap(map);
38
39 colours.Save(filename, System.Drawing.Imaging.ImageFormat.Tiff);
40 }
41
42 public override string ToString()
43 {
44 return "TIFF";
45 }
46 }
47}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs b/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs
new file mode 100644
index 0000000..01695de
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs
@@ -0,0 +1,94 @@
1using System;
2using System.Collections.Generic;
3using System.Drawing;
4using libsecondlife;
5using Nini.Config;
6using OpenSim.Framework;
7using OpenSim.Region.Environment.Interfaces;
8using OpenSim.Region.Environment.Scenes;
9using OpenSim.Region.Environment.Modules.ModuleFramework;
10
11namespace OpenSim.Region.Environment.Modules.Terrain
12{
13 class MapImageModule : ITerrainTemp, IRegionModule
14 {
15 private Scene m_scene;
16 #region IRegionModule Members
17
18 public void Initialise(Scene scene, IConfigSource source)
19 {
20 m_scene = scene;
21 m_scene.RegisterModuleInterface<ITerrainTemp>(this);
22 }
23
24 public void PostInitialise()
25 {
26 }
27
28 public void Close()
29 {
30 }
31
32 public string Name
33 {
34 get { return "MapImageModule"; }
35 }
36
37 public bool IsSharedModule
38 {
39 get { return false; }
40 }
41
42
43 public byte[] WriteJpegImage(string gradientmap)
44 {
45 byte[] imageData = null;
46 try
47 {
48 Bitmap bmp = TerrainToBitmap(gradientmap);
49
50 imageData = OpenJPEGNet.OpenJPEG.EncodeFromImage(bmp, true);
51
52 }
53 catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke
54 {
55 Console.WriteLine("Failed generating terrain map: " + e.ToString());
56 }
57
58 return imageData;
59 }
60
61 private Bitmap TerrainToBitmap(string gradientmap)
62 {
63 Bitmap gradientmapLd = new Bitmap(gradientmap);
64
65 int pallete = gradientmapLd.Height;
66
67 Bitmap bmp = new Bitmap(m_scene.Heightmap.Width, m_scene.Heightmap.Height);
68 Color[] colours = new Color[pallete];
69
70 for (int i = 0; i < pallete; i++)
71 {
72 colours[i] = gradientmapLd.GetPixel(0, i);
73 }
74
75 lock (m_scene.Heightmap)
76 {
77 ITerrainChannel copy = m_scene.Heightmap;
78 for (int y = 0; y < copy.Height; y++)
79 {
80 for (int x = 0; x < copy.Width; x++)
81 {
82 // 512 is the largest possible height before colours clamp
83 int colorindex = (int)(Math.Max(Math.Min(1.0, copy[x, y] / 512.0), 0.0) * (pallete - 1));
84 bmp.SetPixel(x, copy.Height - y - 1, colours[colorindex]);
85 }
86 }
87 }
88 return bmp;
89 }
90
91
92 #endregion
93 }
94}