From ad012d4b46413bcd550f6bc5d300db3ae3cb7a2e Mon Sep 17 00:00:00 2001 From: Dahlia Trimble Date: Thu, 26 Mar 2009 18:12:10 +0000 Subject: [PATCH] add x-axis mirror capability to sculpted prim mesh - addresses Mantis #3342 --- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 7 +++++-- OpenSim/Region/Physics/Meshing/SculptMesh.cs | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index 306eab441a..8c9836e48b 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -202,7 +202,6 @@ namespace OpenSim.Region.Physics.Meshing return null; } - PrimMesher.SculptMesh.SculptType sculptType; switch ((OpenMetaverse.SculptType)primShape.SculptType) { @@ -220,7 +219,11 @@ namespace OpenSim.Region.Physics.Meshing sculptType = PrimMesher.SculptMesh.SculptType.sphere; break; } - sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false); + + bool mirror = ((primShape.SculptType & 128) != 0); + bool invert = ((primShape.SculptType & 64) != 0); + + sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false, mirror, invert); idata.Dispose(); diff --git a/OpenSim/Region/Physics/Meshing/SculptMesh.cs b/OpenSim/Region/Physics/Meshing/SculptMesh.cs index 534dd4dbb2..0e39d73eb0 100644 --- a/OpenSim/Region/Physics/Meshing/SculptMesh.cs +++ b/OpenSim/Region/Physics/Meshing/SculptMesh.cs @@ -215,6 +215,16 @@ namespace PrimMesher } public SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode) + { + _SculptMesh(sculptBitmap, sculptType, lod, viewerMode, false, false); + } + + public SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert) + { + _SculptMesh(sculptBitmap, sculptType, lod, viewerMode, mirror, invert); + } + + void _SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert) { coords = new List(); faces = new List(); @@ -310,6 +320,7 @@ namespace PrimMesher color = bitmap.GetPixel(imageX == width ? 0 : imageX, imageY == height ? height - 1 : imageY); x = (color.R - 128) * pixScale; + if (mirror) x = -x; y = (color.G - 128) * pixScale; z = (color.B - 128) * pixScale;