refactor: move the code that generates physics meshs from prim mesh data into a separate method, in order to make the code more readable.
parent
7791c1fd1e
commit
122e01949d
|
@ -301,28 +301,17 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mesh CreateMeshFromPrimMesher(string primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
/// <summary>
|
||||||
|
/// Generate the co-ords and faces necessary to construct a mesh from the mesh data the accompanies a prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="coords">Coords are added to this list by the method.</param>
|
||||||
|
/// <param name="faces">Faces are added to this list by the method.</param>
|
||||||
|
/// <returns>true if coords and faces were successfully generated, false if not</returns>
|
||||||
|
private bool GenerateCoordsAndFacesFromPrimMeshData(string primName, PrimitiveBaseShape primShape, Vector3 size, List<Coord> coords, List<Face> faces)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[MESH]: Creating physics proxy for {0}, shape {1}",
|
|
||||||
// primName, (OpenMetaverse.SculptType)primShape.SculptType);
|
|
||||||
|
|
||||||
PrimMesh primMesh;
|
|
||||||
PrimMesher.SculptMesh sculptMesh;
|
|
||||||
|
|
||||||
List<Coord> coords = new List<Coord>();
|
|
||||||
List<Face> faces = new List<Face>();
|
|
||||||
|
|
||||||
Image idata = null;
|
|
||||||
string decodedSculptFileName = "";
|
|
||||||
|
|
||||||
if (primShape.SculptEntry)
|
|
||||||
{
|
|
||||||
if (((OpenMetaverse.SculptType)primShape.SculptType) == SculptType.Mesh)
|
|
||||||
{
|
|
||||||
if (!useMeshiesPhysicsMesh)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
|
m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
|
||||||
|
|
||||||
OSD meshOsd = null;
|
OSD meshOsd = null;
|
||||||
|
@ -330,7 +319,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (primShape.SculptData.Length <= 0)
|
if (primShape.SculptData.Length <= 0)
|
||||||
{
|
{
|
||||||
m_log.Error("[MESH]: asset data is zero length");
|
m_log.Error("[MESH]: asset data is zero length");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
long start = 0;
|
long start = 0;
|
||||||
|
@ -344,7 +333,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
|
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -367,14 +356,14 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (physicsParms == null)
|
if (physicsParms == null)
|
||||||
{
|
{
|
||||||
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
|
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
|
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
|
||||||
int physSize = physicsParms["size"].AsInteger();
|
int physSize = physicsParms["size"].AsInteger();
|
||||||
|
|
||||||
if (physOffset < 0 || physSize == 0)
|
if (physOffset < 0 || physSize == 0)
|
||||||
return null; // no mesh data in asset
|
return false; // no mesh data in asset
|
||||||
|
|
||||||
OSD decodedMeshOsd = new OSD();
|
OSD decodedMeshOsd = new OSD();
|
||||||
byte[] meshBytes = new byte[physSize];
|
byte[] meshBytes = new byte[physSize];
|
||||||
|
@ -407,7 +396,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
|
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSDArray decodedMeshOsdArray = null;
|
OSDArray decodedMeshOsdArray = null;
|
||||||
|
@ -425,6 +414,41 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a physics mesh from data that comes with the prim. The actual data used depends on the prim type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="lod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private Mesh CreateMeshFromPrimMesher(string primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[MESH]: Creating physics proxy for {0}, shape {1}",
|
||||||
|
// primName, (OpenMetaverse.SculptType)primShape.SculptType);
|
||||||
|
|
||||||
|
PrimMesh primMesh;
|
||||||
|
PrimMesher.SculptMesh sculptMesh;
|
||||||
|
|
||||||
|
List<Coord> coords = new List<Coord>();
|
||||||
|
List<Face> faces = new List<Face>();
|
||||||
|
|
||||||
|
Image idata = null;
|
||||||
|
string decodedSculptFileName = "";
|
||||||
|
|
||||||
|
if (primShape.SculptEntry)
|
||||||
|
{
|
||||||
|
if (((OpenMetaverse.SculptType)primShape.SculptType) == SculptType.Mesh)
|
||||||
|
{
|
||||||
|
if (!useMeshiesPhysicsMesh)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
GeneratePointsAndFacesFromPrimMeshData(primName, primShape, size, coords, faces);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue