From 3741edd1c791e87a38805a62530755cbf0c55cab Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 31 Aug 2015 09:21:05 -0700 Subject: [PATCH] Refactored Meshing modules: - Moved ZeroMesher from OpenSim.Region.PhysicsModules.SharedBase to OpenSim.Region.PhysicsModules.Meshing - Created subfolder for all Meshmerizer files, also in the same Meshing dll - Made them both region modules, with ZeroMesher being the default one This compiles but doesn't run yet. --- .../Meshing/{ => Meshmerizer}/HelperTypes.cs | 2 +- .../Meshing/{ => Meshmerizer}/Mesh.cs | 2 +- .../Meshing/{ => Meshmerizer}/Meshmerizer.cs | 115 ++++++++++++------ .../Meshing/{ => Meshmerizer}/PrimMesher.cs | 0 .../Meshing/{ => Meshmerizer}/SculptMap.cs | 0 .../Meshing/{ => Meshmerizer}/SculptMesh.cs | 0 .../Meshing/Properties/AssemblyInfo.cs | 5 +- .../{SharedBase => Meshing}/ZeroMesher.cs | 71 +++++++++-- .../PhysicsModules/Ode/Tests/ODETestClass.cs | 2 - .../SharedBase/PhysicsPluginManager.cs | 7 -- prebuild.xml | 4 +- 11 files changed, 146 insertions(+), 62 deletions(-) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/HelperTypes.cs (99%) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/Mesh.cs (99%) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/Meshmerizer.cs (94%) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/PrimMesher.cs (100%) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/SculptMap.cs (100%) rename OpenSim/Region/PhysicsModules/Meshing/{ => Meshmerizer}/SculptMesh.cs (100%) rename OpenSim/Region/PhysicsModules/{SharedBase => Meshing}/ZeroMesher.cs (64%) diff --git a/OpenSim/Region/PhysicsModules/Meshing/HelperTypes.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/HelperTypes.cs similarity index 99% rename from OpenSim/Region/PhysicsModules/Meshing/HelperTypes.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/HelperTypes.cs index a0e3b7f107..34a925d746 100644 --- a/OpenSim/Region/PhysicsModules/Meshing/HelperTypes.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/HelperTypes.cs @@ -31,7 +31,7 @@ using System.Diagnostics; using System.Globalization; using OpenMetaverse; using OpenSim.Region.PhysicsModules.SharedBase; -using OpenSim.Region.PhysicsModule.Meshing; +using OpenSim.Region.PhysicsModules.Meshing; public class Vertex : IComparable { diff --git a/OpenSim/Region/PhysicsModules/Meshing/Mesh.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Mesh.cs similarity index 99% rename from OpenSim/Region/PhysicsModules/Meshing/Mesh.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Mesh.cs index 2ccb976bb2..bf397eee1e 100644 --- a/OpenSim/Region/PhysicsModules/Meshing/Mesh.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Mesh.cs @@ -33,7 +33,7 @@ using OpenSim.Region.PhysicsModules.SharedBase; using PrimMesher; using OpenMetaverse; -namespace OpenSim.Region.PhysicsModule.Meshing +namespace OpenSim.Region.PhysicsModules.Meshing { public class Mesh : IMesh { diff --git a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs similarity index 94% rename from OpenSim/Region/PhysicsModules/Meshing/Meshmerizer.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs index 77fdebf225..4d25bf3916 100644 --- a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs @@ -28,7 +28,11 @@ using System; using System.Collections.Generic; +using System.Reflection; +using System.IO; using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.PhysicsModules.SharedBase; using OpenMetaverse; using OpenMetaverse.StructuredData; @@ -38,29 +42,12 @@ using System.IO.Compression; using PrimMesher; using log4net; using Nini.Config; -using System.Reflection; -using System.IO; +using Mono.Addins; -namespace OpenSim.Region.PhysicsModule.Meshing +namespace OpenSim.Region.PhysicsModules.Meshing { - public class MeshmerizerPlugin : IMeshingPlugin - { - public MeshmerizerPlugin() - { - } - - public string GetName() - { - return "Meshmerizer"; - } - - public IMesher GetMesher(IConfigSource config) - { - return new Meshmerizer(config); - } - } - - public class Meshmerizer : IMesher + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "Meshmerizer")] + public class Meshmerizer : IMesher, INonSharedRegionModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static string LogHeader = "[MESH]"; @@ -72,6 +59,8 @@ namespace OpenSim.Region.PhysicsModule.Meshing #else private const string baseDir = null; //"rawFiles"; #endif + private bool m_Enabled = false; + // If 'true', lots of DEBUG logging of asset parsing details private bool debugDetail = false; @@ -87,30 +76,79 @@ namespace OpenSim.Region.PhysicsModule.Meshing // Mesh cache. Static so it can be shared across instances of this class private static Dictionary m_uniqueMeshes = new Dictionary(); - public Meshmerizer(IConfigSource config) + #region INonSharedRegionModule + public string Name { - IConfig start_config = config.Configs["Startup"]; - IConfig mesh_config = config.Configs["Mesh"]; + get { return "Meshmerizer"; } + } - decodedSculptMapPath = start_config.GetString("DecodedSculptMapPath","j2kDecodeCache"); - cacheSculptMaps = start_config.GetBoolean("CacheSculptMaps", cacheSculptMaps); - if (mesh_config != null) - { - useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh); - debugDetail = mesh_config.GetBoolean("LogMeshDetails", debugDetail); - } + public Type ReplaceableInterface + { + get { return null; } + } - try + public void Initialise(IConfigSource source) + { + IConfig config = source.Configs["Startup"]; + if (config != null) { - if (!Directory.Exists(decodedSculptMapPath)) - Directory.CreateDirectory(decodedSculptMapPath); - } - catch (Exception e) - { - m_log.WarnFormat("[SCULPT]: Unable to create {0} directory: ", decodedSculptMapPath, e.Message); + string mesher = config.GetString("meshing", string.Empty); + if (mesher == Name) + { + m_Enabled = true; + + IConfig mesh_config = source.Configs["Mesh"]; + + decodedSculptMapPath = config.GetString("DecodedSculptMapPath", "j2kDecodeCache"); + cacheSculptMaps = config.GetBoolean("CacheSculptMaps", cacheSculptMaps); + if (mesh_config != null) + { + useMeshiesPhysicsMesh = mesh_config.GetBoolean("UseMeshiesPhysicsMesh", useMeshiesPhysicsMesh); + debugDetail = mesh_config.GetBoolean("LogMeshDetails", debugDetail); + } + + try + { + if (!Directory.Exists(decodedSculptMapPath)) + Directory.CreateDirectory(decodedSculptMapPath); + } + catch (Exception e) + { + m_log.WarnFormat("[SCULPT]: Unable to create {0} directory: ", decodedSculptMapPath, e.Message); + } + + } } } + public void Close() + { + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.RegisterModuleInterface(this); + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.UnregisterModuleInterface(this); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + } + #endregion + + /// /// creates a simple box mesh of the specified size. This mesh is of very low vertex count and may /// be useful as a backup proxy when level of detail is not needed or when more complex meshes fail @@ -967,5 +1005,6 @@ namespace OpenSim.Region.PhysicsModule.Meshing return mesh; } + } } diff --git a/OpenSim/Region/PhysicsModules/Meshing/PrimMesher.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/PrimMesher.cs similarity index 100% rename from OpenSim/Region/PhysicsModules/Meshing/PrimMesher.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/PrimMesher.cs diff --git a/OpenSim/Region/PhysicsModules/Meshing/SculptMap.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/SculptMap.cs similarity index 100% rename from OpenSim/Region/PhysicsModules/Meshing/SculptMap.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/SculptMap.cs diff --git a/OpenSim/Region/PhysicsModules/Meshing/SculptMesh.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/SculptMesh.cs similarity index 100% rename from OpenSim/Region/PhysicsModules/Meshing/SculptMesh.cs rename to OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/SculptMesh.cs diff --git a/OpenSim/Region/PhysicsModules/Meshing/Properties/AssemblyInfo.cs b/OpenSim/Region/PhysicsModules/Meshing/Properties/AssemblyInfo.cs index ec968c0b65..d6ac8b2260 100644 --- a/OpenSim/Region/PhysicsModules/Meshing/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/Properties/AssemblyInfo.cs @@ -1,11 +1,12 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using Mono.Addins; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("OpenSim.Region.Physics.Meshing")] +[assembly: AssemblyTitle("OpenSim.Region.PhysicsModules.Meshing")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("http://opensimulator.org")] @@ -31,3 +32,5 @@ using System.Runtime.InteropServices; // [assembly: AssemblyVersion("0.8.2.*")] +[assembly: Addin("OpenSim.Region.PhysicsModules.Meshing", OpenSim.VersionInfo.VersionNumber)] +[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)] diff --git a/OpenSim/Region/PhysicsModules/SharedBase/ZeroMesher.cs b/OpenSim/Region/PhysicsModules/Meshing/ZeroMesher.cs similarity index 64% rename from OpenSim/Region/PhysicsModules/SharedBase/ZeroMesher.cs rename to OpenSim/Region/PhysicsModules/Meshing/ZeroMesher.cs index fe8796289c..0a3b3a4e80 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/ZeroMesher.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/ZeroMesher.cs @@ -26,9 +26,15 @@ */ using System; +using System.Reflection; using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.PhysicsModules.SharedBase; using OpenMetaverse; using Nini.Config; +using Mono.Addins; +using log4net; /* * This is the zero mesher. @@ -41,27 +47,67 @@ using Nini.Config; * it's always availabe and thus the default in case of configuration errors */ -namespace OpenSim.Region.PhysicsModules.SharedBase +namespace OpenSim.Region.PhysicsModules.Meshing { - public class ZeroMesherPlugin : IMeshingPlugin + + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "ZeroMesher")] + public class ZeroMesher : IMesher, INonSharedRegionModule { - public ZeroMesherPlugin() + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private bool m_Enabled = false; + + #region INonSharedRegionModule + public string Name + { + get { return "ZeroMesher"; } + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public void Initialise(IConfigSource source) + { + // TODO: Move this out of Startup + IConfig config = source.Configs["Startup"]; + if (config != null) + { + // This is the default Mesher + string mesher = config.GetString("meshing", Name); + if (mesher == Name) + m_Enabled = true; + } + } + + public void Close() { } - public string GetName() + public void AddRegion(Scene scene) { - return "ZeroMesher"; + if (!m_Enabled) + return; + + scene.RegisterModuleInterface(this); } - public IMesher GetMesher(IConfigSource config) + public void RemoveRegion(Scene scene) { - return new ZeroMesher(); - } - } + if (!m_Enabled) + return; - public class ZeroMesher : IMesher - { + scene.UnregisterModuleInterface(this); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + } + #endregion + + #region IMesher public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) { return CreateMesh(primName, primShape, size, lod, false, false); @@ -79,5 +125,8 @@ namespace OpenSim.Region.PhysicsModules.SharedBase return null; } + #endregion + + } } diff --git a/OpenSim/Region/PhysicsModules/Ode/Tests/ODETestClass.cs b/OpenSim/Region/PhysicsModules/Ode/Tests/ODETestClass.cs index 181665627c..bbf64d5a8d 100644 --- a/OpenSim/Region/PhysicsModules/Ode/Tests/ODETestClass.cs +++ b/OpenSim/Region/PhysicsModules/Ode/Tests/ODETestClass.cs @@ -56,8 +56,6 @@ namespace OpenSim.Region.PhysicsModule.ODE.Tests // Loading ODEPlugin cbt = new OdePlugin(); - // Loading Zero Mesher - imp = new ZeroMesherPlugin(); // Getting Physics Scene ps = cbt.GetScene("test"); // Initializing Physics Scene. diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsPluginManager.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsPluginManager.cs index f7992d5f73..6316463ed5 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsPluginManager.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsPluginManager.cs @@ -51,13 +51,6 @@ namespace OpenSim.Region.PhysicsModules.SharedBase /// public PhysicsPluginManager() { - // Load "plugins", that are hard coded and not existing in form of an external lib, and hence always - // available - IMeshingPlugin plugHard; - plugHard = new ZeroMesherPlugin(); - _MeshPlugins.Add(plugHard.GetName(), plugHard); - - m_log.Info("[PHYSICS]: Added meshing engine: " + plugHard.GetName()); } /// diff --git a/prebuild.xml b/prebuild.xml index 92d5caf4ab..e08ff29a83 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -514,7 +514,7 @@ - + ../../../../bin/Physics/ @@ -537,7 +537,9 @@ + +