aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs126
1 files changed, 61 insertions, 65 deletions
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 98fa763..5412359 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -115,6 +115,11 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
115 "export-map [<path>]", 115 "export-map [<path>]",
116 "Save an image of the world map", HandleExportWorldMapConsoleCommand); 116 "Save an image of the world map", HandleExportWorldMapConsoleCommand);
117 117
118 m_scene.AddCommand(
119 "Regions", this, "generate map",
120 "generate map",
121 "Generates and stores a new maptile.", HandleGenerateMapConsoleCommand);
122
118 AddHandlers(); 123 AddHandlers();
119 } 124 }
120 } 125 }
@@ -1324,6 +1329,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1324 m_scene.RegionInfo.RegionName, exportPath); 1329 m_scene.RegionInfo.RegionName, exportPath);
1325 } 1330 }
1326 1331
1332 public void HandleGenerateMapConsoleCommand(string module, string[] cmdparams)
1333 {
1334 Scene consoleScene = m_scene.ConsoleScene();
1335
1336 if (consoleScene != null && consoleScene != m_scene)
1337 return;
1338
1339 GenerateMaptile();
1340 }
1341
1327 public OSD HandleRemoteMapItemRequest(string path, OSD request, string endpoint) 1342 public OSD HandleRemoteMapItemRequest(string path, OSD request, string endpoint)
1328 { 1343 {
1329 uint xstart = 0; 1344 uint xstart = 0;
@@ -1561,88 +1576,69 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1561 1576
1562 private Byte[] GenerateOverlay() 1577 private Byte[] GenerateOverlay()
1563 { 1578 {
1564 Bitmap overlay = new Bitmap(256, 256); 1579 using (Bitmap overlay = new Bitmap(256, 256))
1565
1566 bool[,] saleBitmap = new bool[64, 64];
1567 for (int x = 0 ; x < 64 ; x++)
1568 { 1580 {
1569 for (int y = 0 ; y < 64 ; y++) 1581 bool[,] saleBitmap = new bool[64, 64];
1570 saleBitmap[x, y] = false; 1582 for (int x = 0 ; x < 64 ; x++)
1571 } 1583 {
1572 1584 for (int y = 0 ; y < 64 ; y++)
1573 bool landForSale = false; 1585 saleBitmap[x, y] = false;
1586 }
1574 1587
1575 List<ILandObject> parcels = m_scene.LandChannel.AllParcels(); 1588 bool landForSale = false;
1576 1589
1577 Color background = Color.FromArgb(0, 0, 0, 0); 1590 List<ILandObject> parcels = m_scene.LandChannel.AllParcels();
1578 SolidBrush transparent = new SolidBrush(background);
1579 Graphics g = Graphics.FromImage(overlay);
1580 g.FillRectangle(transparent, 0, 0, 255, 255);
1581 1591
1582 SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9)); 1592 Color background = Color.FromArgb(0, 0, 0, 0);
1583 Pen grey = new Pen(Color.FromArgb(255, 92, 92, 92));
1584 1593
1585 foreach (ILandObject land in parcels) 1594 using (Graphics g = Graphics.FromImage(overlay))
1586 {
1587 // m_log.DebugFormat("[WORLD MAP]: Parcel {0} flags {1}", land.LandData.Name, land.LandData.Flags);
1588 if ((land.LandData.Flags & (uint)ParcelFlags.ForSale) != 0)
1589 { 1595 {
1590 landForSale = true; 1596 using (SolidBrush transparent = new SolidBrush(background))
1591 1597 g.FillRectangle(transparent, 0, 0, 256, 256);
1592 bool[,] landBitmap = land.GetLandBitmap(); 1598
1599
1600 foreach (ILandObject land in parcels)
1601 {
1602 // m_log.DebugFormat("[WORLD MAP]: Parcel {0} flags {1}", land.LandData.Name, land.LandData.Flags);
1603 if ((land.LandData.Flags & (uint)ParcelFlags.ForSale) != 0)
1604 {
1605 landForSale = true;
1606
1607 saleBitmap = land.MergeLandBitmaps(saleBitmap, land.GetLandBitmap());
1608 }
1609 }
1610
1611 if (!landForSale)
1612 {
1613 m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not generating overlay", m_scene.RegionInfo.RegionName);
1614 return null;
1615 }
1616
1617 m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, generating overlay", m_scene.RegionInfo.RegionName);
1593 1618
1594 for (int x = 0 ; x < 64 ; x++) 1619 using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9)))
1595 { 1620 {
1596 for (int y = 0 ; y < 64 ; y++) 1621 for (int x = 0 ; x < 64 ; x++)
1597 { 1622 {
1598 if (landBitmap[x, y]) 1623 for (int y = 0 ; y < 64 ; y++)
1599 { 1624 {
1600 g.FillRectangle(yellow, x * 4, 252 - (y * 4), 4, 4); 1625 if (saleBitmap[x, y])
1601 1626 g.FillRectangle(yellow, x * 4, 252 - (y * 4), 4, 4);
1602 if (x > 0)
1603 {
1604 if ((saleBitmap[x - 1, y] || landBitmap[x - 1, y]) == false)
1605 g.DrawLine(grey, x * 4, 252 - (y * 4), x * 4, 255 - (y * 4));
1606 }
1607 if (y > 0)
1608 {
1609 if ((saleBitmap[x, y-1] || landBitmap[x, y-1]) == false)
1610 g.DrawLine(grey, x * 4, 255 - (y * 4), x * 4 + 3, 255 - (y * 4));
1611 }
1612 if (x < 63)
1613 {
1614 if ((saleBitmap[x + 1, y] || landBitmap[x + 1, y]) == false)
1615 g.DrawLine(grey, x * 4 + 3, 252 - (y * 4), x * 4 + 3, 255 - (y * 4));
1616 }
1617 if (y < 63)
1618 {
1619 if ((saleBitmap[x, y + 1] || landBitmap[x, y + 1]) == false)
1620 g.DrawLine(grey, x * 4, 252 - (y * 4), x * 4 + 3, 252 - (y * 4));
1621 }
1622 } 1627 }
1623 } 1628 }
1624 } 1629 }
1625
1626 saleBitmap = land.MergeLandBitmaps(saleBitmap, landBitmap);
1627 } 1630 }
1628 }
1629 1631
1630 if (!landForSale) 1632 try
1631 { 1633 {
1632 m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not generating overlay", m_scene.RegionInfo.RegionName); 1634 return OpenJPEG.EncodeFromImage(overlay, true);
1633 return null; 1635 }
1636 catch (Exception e)
1637 {
1638 m_log.DebugFormat("[WORLD MAP]: Error creating parcel overlay: " + e.ToString());
1639 }
1634 } 1640 }
1635 1641
1636 m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, generating overlay", m_scene.RegionInfo.RegionName);
1637
1638 try
1639 {
1640 return OpenJPEG.EncodeFromImage(overlay, true);
1641 }
1642 catch (Exception e)
1643 {
1644 m_log.DebugFormat("[WORLD MAP]: Error creating parcel overlay: " + e.ToString());
1645 }
1646 return null; 1642 return null;
1647 } 1643 }
1648 } 1644 }