* Applying Dahlia's patch : 0001429: Patch to fix prism physical mesh and add path start and end to skew z offset of circular path prim meshes (PATCH attached)
* Apparently this fixed a bug in my code that caused PushX to appear to work and pushX didn't appear to work after the patch.. so I fixed that after applying this patch and PushX actually works now.0.6.0-stable
parent
d22a54a195
commit
52c55c8c23
|
@ -24,6 +24,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
//#define SPAM
|
||||||
|
|
||||||
using OpenSim.Region.Physics.Manager;
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
|
||||||
|
@ -246,9 +247,6 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
public Mesh ExtrudeCircularPath(Mesh m)
|
public Mesh ExtrudeCircularPath(Mesh m)
|
||||||
{
|
{
|
||||||
//startParameter = float.MinValue;
|
|
||||||
//stopParameter = float.MaxValue;
|
|
||||||
// Currently only works for iSteps=1;
|
|
||||||
Mesh result = new Mesh();
|
Mesh result = new Mesh();
|
||||||
|
|
||||||
Quaternion tt = new Quaternion();
|
Quaternion tt = new Quaternion();
|
||||||
|
@ -257,7 +255,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
Mesh newLayer;
|
Mesh newLayer;
|
||||||
Mesh lastLayer = null;
|
Mesh lastLayer = null;
|
||||||
|
|
||||||
int start = 0;
|
//int start = 0;
|
||||||
int step;
|
int step;
|
||||||
int steps = 24;
|
int steps = 24;
|
||||||
|
|
||||||
|
@ -268,39 +266,37 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
double percentOfPathMultiplier = 1.0 / steps;
|
double percentOfPathMultiplier = 1.0 / steps;
|
||||||
double angleStepMultiplier = System.Math.PI * 2.0 / steps;
|
double angleStepMultiplier = System.Math.PI * 2.0 / steps;
|
||||||
|
|
||||||
//System.Console.WriteLine("twistTop: " + twistTop.ToString() + " twistbot: " + twistBot.ToString() + " twisttotal: " + twistTotal.ToString());
|
|
||||||
|
|
||||||
float yPathScale = pathScaleY * 0.5f;
|
float yPathScale = pathScaleY * 0.5f;
|
||||||
float skewStart = -skew;
|
float pathLength = pathCutEnd - pathCutBegin;
|
||||||
float skewOffset = 0.0f;
|
float totalSkew = skew * 2.0f * pathLength;
|
||||||
float totalSkew = skew * 2.0f;
|
float skewStart = (-skew) + pathCutBegin * 2.0f * skew;
|
||||||
|
|
||||||
|
|
||||||
float startAngle = (float)(System.Math.PI * 2.0 * pathCutBegin * revolutions);
|
float startAngle = (float)(System.Math.PI * 2.0 * pathCutBegin * revolutions);
|
||||||
float endAngle = (float)(System.Math.PI * 2.0 * pathCutEnd * revolutions);
|
float endAngle = (float)(System.Math.PI * 2.0 * pathCutEnd * revolutions);
|
||||||
float stepSize = (float)0.2617993878; // 2*PI / 24 segments
|
float stepSize = (float)0.2617993878; // 2*PI / 24 segments per revolution
|
||||||
step = (int)(startAngle / stepSize);
|
step = (int)(startAngle / stepSize);
|
||||||
float angle = startAngle;
|
float angle = startAngle;
|
||||||
|
|
||||||
float xProfileScale = 1.0f;
|
float xProfileScale = 1.0f;
|
||||||
float yProfileScale = 1.0f;
|
float yProfileScale = 1.0f;
|
||||||
|
|
||||||
//System.Console.WriteLine("startAngle: " + startAngle.ToString() + " endAngle: " + endAngle.ToString() + " step: " + step.ToString());
|
#if SPAM
|
||||||
|
System.Console.WriteLine("Extruder: twistTop: " + twistTop.ToString() + " twistbot: " + twistBot.ToString() + " twisttotal: " + twistTotal.ToString());
|
||||||
|
System.Console.WriteLine("Extruder: startAngle: " + startAngle.ToString() + " endAngle: " + endAngle.ToString() + " step: " + step.ToString());
|
||||||
|
System.Console.WriteLine("Extruder: taperBotFactorX: " + taperBotFactorX.ToString() + " taperBotFactorY: " + taperBotFactorY.ToString()
|
||||||
|
+ " taperTopFactorX: " + taperTopFactorX.ToString() + " taperTopFactorY: " + taperTopFactorY.ToString());
|
||||||
|
System.Console.WriteLine("Extruder: PathScaleX: " + pathScaleX.ToString() + " pathScaleY: " + pathScaleY.ToString());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
bool done = false;
|
bool done = false;
|
||||||
|
|
||||||
//System.Console.WriteLine(" PathScaleX: " + pathScaleX.ToString() + " pathScaleY: " + pathScaleY.ToString());
|
|
||||||
|
|
||||||
//System.Console.WriteLine("taperBotFactorX: " + taperBotFactorX.ToString() + " taperBotFactorY: " + taperBotFactorY.ToString()
|
|
||||||
// + " taperTopFactorX: " + taperTopFactorX.ToString() + " taperTopFactorY: " + taperTopFactorY.ToString());
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
float percentOfPath = 1.0f;
|
float percentOfPath = 1.0f;
|
||||||
|
|
||||||
percentOfPath = (angle - startAngle) / (endAngle - startAngle); // endAngle should always be larger than startAngle
|
percentOfPath = (angle - startAngle) / (endAngle - startAngle); // endAngle should always be larger than startAngle
|
||||||
|
|
||||||
// System.Console.WriteLine("angle: " + angle.ToString() + " percentOfPath: " + percentOfPath.ToString());
|
|
||||||
|
|
||||||
if (pathTaperX > 0.001f) // can't really compare to 0.0f as the value passed is never exactly zero
|
if (pathTaperX > 0.001f) // can't really compare to 0.0f as the value passed is never exactly zero
|
||||||
xProfileScale = 1.0f - percentOfPath * pathTaperX;
|
xProfileScale = 1.0f - percentOfPath * pathTaperX;
|
||||||
else if (pathTaperX < -0.001f)
|
else if (pathTaperX < -0.001f)
|
||||||
|
@ -323,7 +319,10 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
//radiusScale = 1.0f;
|
//radiusScale = 1.0f;
|
||||||
|
|
||||||
//System.Console.WriteLine("Extruder: radius: " + radius.ToString() + " radiusScale: " + radiusScale.ToString());
|
#if SPAM
|
||||||
|
System.Console.WriteLine("Extruder: angle: " + angle.ToString() + " percentOfPath: " + percentOfPath.ToString()
|
||||||
|
+ " radius: " + radius.ToString() + " radiusScale: " + radiusScale.ToString());
|
||||||
|
#endif
|
||||||
|
|
||||||
float twist = twistBot + (twistTotal * (float)percentOfPath);
|
float twist = twistBot + (twistTotal * (float)percentOfPath);
|
||||||
|
|
||||||
|
@ -397,8 +396,8 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
lastLayer = newLayer;
|
lastLayer = newLayer;
|
||||||
|
|
||||||
// calc next angle
|
|
||||||
|
|
||||||
|
// calc the angle for the next interation of the loop
|
||||||
if (angle >= endAngle)
|
if (angle >= endAngle)
|
||||||
done = true;
|
done = true;
|
||||||
else
|
else
|
||||||
|
@ -407,6 +406,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (angle > endAngle)
|
if (angle > endAngle)
|
||||||
angle = endAngle;
|
angle = endAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (!done);
|
} while (!done);
|
||||||
|
|
||||||
// scale the mesh to the desired size
|
// scale the mesh to the desired size
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
//#define SPAM
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -431,6 +432,9 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
Int16 twistTop = primShape.PathTwistBegin;
|
Int16 twistTop = primShape.PathTwistBegin;
|
||||||
Int16 twistBot = primShape.PathTwist;
|
Int16 twistBot = primShape.PathTwist;
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
reportPrimParams("[BOX] " + primName, primShape);
|
||||||
|
#endif
|
||||||
|
|
||||||
//m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
|
//m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
|
||||||
//m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
|
//m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
|
||||||
|
@ -553,13 +557,13 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{
|
{
|
||||||
if (taperX > 100)
|
if (taperX > 100)
|
||||||
{
|
{
|
||||||
extr.taperTopFactorX = 1.0f - ((float)taperX / 200);
|
extr.taperTopFactorX = 1.0f - ((float)(taperX - 100) / 100);
|
||||||
//m_log.Warn("taperTopFactorX: " + extr.taperTopFactorX.ToString());
|
//System.Console.WriteLine("taperTopFactorX: " + extr.taperTopFactorX.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
|
extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
|
||||||
//m_log.Warn("taperBotFactorX: " + extr.taperBotFactorX.ToString());
|
//System.Console.WriteLine("taperBotFactorX: " + extr.taperBotFactorX.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -568,28 +572,29 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{
|
{
|
||||||
if (taperY > 100)
|
if (taperY > 100)
|
||||||
{
|
{
|
||||||
extr.taperTopFactorY = 1.0f - ((float)taperY / 200);
|
extr.taperTopFactorY = 1.0f - ((float)(taperY - 100) / 100);
|
||||||
//m_log.Warn("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
//System.Console.WriteLine("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extr.taperBotFactorY = 1.0f - ((100 - (float)taperY) / 100);
|
extr.taperBotFactorY = 1.0f - ((100 - (float)taperY) / 100);
|
||||||
//m_log.Warn("taperBotFactorY: " + extr.taperBotFactorY.ToString());
|
//System.Console.WriteLine("taperBotFactorY: " + extr.taperBotFactorY.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pathShearX != 0)
|
if (pathShearX != 0)
|
||||||
{
|
{
|
||||||
|
//System.Console.WriteLine("pushX: " + pathShearX.ToString());
|
||||||
if (pathShearX > 50)
|
if (pathShearX > 50)
|
||||||
{
|
{
|
||||||
// Complimentary byte. Negative values wrap around the byte. Positive values go up to 50
|
// Complimentary byte. Negative values wrap around the byte. Positive values go up to 50
|
||||||
extr.pushX = (((float)(256 - pathShearX) / 100) * -1f);
|
extr.pushX = (((float)(256 - pathShearX) / 100) * -1f);
|
||||||
// m_log.Warn("pushX: " + extr.pushX);
|
//System.Console.WriteLine("pushX: " + extr.pushX);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extr.pushX = (float)pathShearX / 100;
|
extr.pushX = (float)pathShearX / 100;
|
||||||
// m_log.Warn("pushX: " + extr.pushX);
|
//System.Console.WriteLine("pushX: " + extr.pushX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -599,12 +604,12 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{
|
{
|
||||||
// Complimentary byte. Negative values wrap around the byte. Positive values go up to 50
|
// Complimentary byte. Negative values wrap around the byte. Positive values go up to 50
|
||||||
extr.pushY = (((float)(256 - pathShearY) / 100) * -1f);
|
extr.pushY = (((float)(256 - pathShearY) / 100) * -1f);
|
||||||
//m_log.Warn("pushY: " + extr.pushY);
|
//System.Console.WriteLine("pushY: " + extr.pushY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extr.pushY = (float)pathShearY / 100;
|
extr.pushY = (float)pathShearY / 100;
|
||||||
//m_log.Warn("pushY: " + extr.pushY);
|
//System.Console.WriteLine("pushY: " + extr.pushY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,6 +667,10 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
Int16 twistBot = primShape.PathTwist;
|
Int16 twistBot = primShape.PathTwist;
|
||||||
Int16 twistTop = primShape.PathTwistBegin;
|
Int16 twistTop = primShape.PathTwistBegin;
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
reportPrimParams("[CYLINDER] " + primName, primShape);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
|
// Procedure: This is based on the fact that the upper (plus) and lower (minus) Z-surface
|
||||||
// of a block are basically the same
|
// of a block are basically the same
|
||||||
|
@ -903,7 +912,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{
|
{
|
||||||
if (taperY > 100)
|
if (taperY > 100)
|
||||||
{
|
{
|
||||||
extr.taperTopFactorY = 1.0f - ((float)(taperY - 100) / 200);
|
extr.taperTopFactorY = 1.0f - ((float)(taperY - 100) / 100);
|
||||||
// System.Console.WriteLine("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
// System.Console.WriteLine("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -998,6 +1007,11 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
Int16 twistTop = primShape.PathTwistBegin;
|
Int16 twistTop = primShape.PathTwistBegin;
|
||||||
Int16 twistBot = primShape.PathTwist;
|
Int16 twistBot = primShape.PathTwist;
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
reportPrimParams("[PRISM] " + primName, primShape);
|
||||||
|
#endif
|
||||||
|
|
||||||
//m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
|
//m_log.Error("pathShear:" + primShape.PathShearX.ToString() + "," + primShape.PathShearY.ToString());
|
||||||
//m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
|
//m_log.Error("pathTaper:" + primShape.PathTaperX.ToString() + "," + primShape.PathTaperY.ToString());
|
||||||
//m_log.Error("ProfileBegin:" + primShape.ProfileBegin.ToString() + "," + primShape.ProfileBegin.ToString());
|
//m_log.Error("ProfileBegin:" + primShape.ProfileBegin.ToString() + "," + primShape.ProfileBegin.ToString());
|
||||||
|
@ -1116,7 +1130,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{
|
{
|
||||||
if (taperX > 100)
|
if (taperX > 100)
|
||||||
{
|
{
|
||||||
extr.taperTopFactorX = 1.0f - ((float)taperX / 200);
|
extr.taperTopFactorX = 1.0f - ((float)(taperX - 100) / 100);
|
||||||
//System.Console.WriteLine("taperTopFactorX: " + extr.taperTopFactorX.ToString());
|
//System.Console.WriteLine("taperTopFactorX: " + extr.taperTopFactorX.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1124,13 +1138,14 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
|
extr.taperBotFactorX = 1.0f - ((100 - (float)taperX) / 100);
|
||||||
//System.Console.WriteLine("taperBotFactorX: " + extr.taperBotFactorX.ToString());
|
//System.Console.WriteLine("taperBotFactorX: " + extr.taperBotFactorX.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taperY != 100)
|
if (taperY != 100)
|
||||||
{
|
{
|
||||||
if (taperY > 100)
|
if (taperY > 100)
|
||||||
{
|
{
|
||||||
extr.taperTopFactorY = 1.0f - ((float)taperY / 200);
|
extr.taperTopFactorY = 1.0f - ((float)(taperY - 100) / 100);
|
||||||
// System.Console.WriteLine("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
// System.Console.WriteLine("taperTopFactorY: " + extr.taperTopFactorY.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1209,6 +1224,8 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
result.DumpRaw(baseDir, primName, "Z extruded");
|
result.DumpRaw(baseDir, primName, "Z extruded");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static Mesh CreateSphereMesh(String primName, PrimitiveBaseShape primShape, PhysicsVector size)
|
private static Mesh CreateSphereMesh(String primName, PrimitiveBaseShape primShape, PhysicsVector size)
|
||||||
{
|
{
|
||||||
// Builds an icosahedral geodesic sphere
|
// Builds an icosahedral geodesic sphere
|
||||||
|
@ -1230,6 +1247,10 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
UInt16 pathShearY = primShape.PathShearY;
|
UInt16 pathShearY = primShape.PathShearY;
|
||||||
Mesh m = new Mesh();
|
Mesh m = new Mesh();
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
reportPrimParams("[SPHERE] " + primName, primShape);
|
||||||
|
#endif
|
||||||
|
|
||||||
float LOD = 0.2f;
|
float LOD = 0.2f;
|
||||||
float diameter = 0.5f;// Our object will result in -0.5 to 0.5
|
float diameter = 0.5f;// Our object will result in -0.5 to 0.5
|
||||||
float sq5 = (float) Math.Sqrt(5.0);
|
float sq5 = (float) Math.Sqrt(5.0);
|
||||||
|
@ -1298,6 +1319,11 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
private SculptMesh CreateSculptMesh(string primName, PrimitiveBaseShape primShape, PhysicsVector size, float lod)
|
private SculptMesh CreateSculptMesh(string primName, PrimitiveBaseShape primShape, PhysicsVector size, float lod)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
reportPrimParams("[SCULPT] " + primName, primShape);
|
||||||
|
#endif
|
||||||
|
|
||||||
SculptMesh sm = new SculptMesh(primShape.SculptData, lod);
|
SculptMesh sm = new SculptMesh(primShape.SculptData, lod);
|
||||||
// Scale the mesh based on our prim scale
|
// Scale the mesh based on our prim scale
|
||||||
foreach (Vertex v in sm.vertices)
|
foreach (Vertex v in sm.vertices)
|
||||||
|
@ -1320,7 +1346,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Mesh CreateCircularProfileMesh(String primName, PrimitiveBaseShape primShape, PhysicsVector size)
|
private static Mesh CreateCircularPathMesh(String primName, PrimitiveBaseShape primShape, PhysicsVector size)
|
||||||
{
|
{
|
||||||
|
|
||||||
UInt16 hollowFactor = primShape.ProfileHollow;
|
UInt16 hollowFactor = primShape.ProfileHollow;
|
||||||
|
@ -1334,18 +1360,23 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
Int16 twistTop = primShape.PathTwistBegin;
|
Int16 twistTop = primShape.PathTwistBegin;
|
||||||
HollowShape hollowShape = primShape.HollowShape;
|
HollowShape hollowShape = primShape.HollowShape;
|
||||||
|
|
||||||
//Console.WriteLine("pathTwist: " + primShape.PathTwist.ToString() + " pathTwistBegin: " + primShape.PathTwistBegin.ToString());
|
#if SPAM
|
||||||
|
reportPrimParams("[CIRCULAR PATH PRIM] " + primName, primShape);
|
||||||
|
Console.WriteLine("pathTwist: " + primShape.PathTwist.ToString() + " pathTwistBegin: " + primShape.PathTwistBegin.ToString());
|
||||||
|
Console.WriteLine("primShape.ProfileCurve & 0x07: " + Convert.ToString(primShape.ProfileCurve & 0x07));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
SimpleHull outerHull = new SimpleHull();
|
SimpleHull outerHull = new SimpleHull();
|
||||||
|
|
||||||
//Console.WriteLine("primShape.ProfileCurve & 0x07: " + Convert.ToString(primShape.ProfileCurve & 0x07));
|
|
||||||
|
|
||||||
if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
|
if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
|
||||||
|
|
||||||
//if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle
|
//if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle
|
||||||
// || (primShape.ProfileCurve & 0x07) == (byte) ProfileShape.Square)
|
// || (primShape.ProfileCurve & 0x07) == (byte) ProfileShape.Square)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Meshmerizer thinks " + primName + " is a TORUS");
|
#if SPAM
|
||||||
|
Console.WriteLine("Meshmerizer thinks " + primName + " is a TORUS");
|
||||||
|
#endif
|
||||||
if (hollowShape == HollowShape.Same)
|
if (hollowShape == HollowShape.Same)
|
||||||
hollowShape = HollowShape.Circle;
|
hollowShape = HollowShape.Circle;
|
||||||
|
|
||||||
|
@ -1380,7 +1411,9 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square) // a ring
|
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square) // a ring
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Meshmerizer thinks " + primName + " is a TUBE");
|
#if SPAM
|
||||||
|
Console.WriteLine("Meshmerizer thinks " + primName + " is a TUBE");
|
||||||
|
#endif
|
||||||
if (hollowShape == HollowShape.Same)
|
if (hollowShape == HollowShape.Same)
|
||||||
hollowShape = HollowShape.Square;
|
hollowShape = HollowShape.Square;
|
||||||
|
|
||||||
|
@ -1392,7 +1425,9 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
|
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Meshmerizer thinks " + primName + " is a RING");
|
#if SPAM
|
||||||
|
Console.WriteLine("Meshmerizer thinks " + primName + " is a RING");
|
||||||
|
#endif
|
||||||
if (hollowShape == HollowShape.Same)
|
if (hollowShape == HollowShape.Same)
|
||||||
hollowShape = HollowShape.Triangle;
|
hollowShape = HollowShape.Triangle;
|
||||||
|
|
||||||
|
@ -1404,7 +1439,9 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
|
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Meshmerizer thinks " + primName + " is a SPHERE");
|
#if SPAM
|
||||||
|
Console.WriteLine("Meshmerizer thinks " + primName + " is a SPHERE");
|
||||||
|
#endif
|
||||||
if (hollowShape == HollowShape.Same)
|
if (hollowShape == HollowShape.Same)
|
||||||
hollowShape = HollowShape.Circle;
|
hollowShape = HollowShape.Circle;
|
||||||
|
|
||||||
|
@ -1544,15 +1581,20 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
Vertex vTemp = new Vertex(0.0f, 0.0f, 0.0f);
|
Vertex vTemp = new Vertex(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
//Console.WriteLine("primShape.PathScaleX: " + primShape.PathScaleX.ToString() + " primShape.PathScaleY: " + primShape.PathScaleY.ToString());
|
|
||||||
//Console.WriteLine("primShape.PathSkew: " + primShape.PathSkew.ToString() + " primShape.PathRadiusOffset: " + primShape.PathRadiusOffset.ToString() + " primShape.pathRevolutions: " + primShape.PathRevolutions.ToString());
|
|
||||||
|
|
||||||
float skew = primShape.PathSkew * 0.01f;
|
float skew = primShape.PathSkew * 0.01f;
|
||||||
float pathScaleX = (float)(200 - primShape.PathScaleX) * 0.01f;
|
float pathScaleX = (float)(200 - primShape.PathScaleX) * 0.01f;
|
||||||
float pathScaleY = (float)(200 - primShape.PathScaleY) * 0.01f;
|
float pathScaleY = (float)(200 - primShape.PathScaleY) * 0.01f;
|
||||||
//Console.WriteLine("PathScaleX: " + pathScaleX.ToString() + " pathScaleY: " + pathScaleY.ToString());
|
|
||||||
|
|
||||||
float profileXComp = pathScaleX * (1.0f - Math.Abs(skew));
|
float profileXComp = pathScaleX * (1.0f - Math.Abs(skew));
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
//Console.WriteLine("primShape.PathScaleX: " + primShape.PathScaleX.ToString() + " primShape.PathScaleY: " + primShape.PathScaleY.ToString());
|
||||||
|
//Console.WriteLine("primShape.PathSkew: " + primShape.PathSkew.ToString() + " primShape.PathRadiusOffset: " + primShape.PathRadiusOffset.ToString() + " primShape.pathRevolutions: " + primShape.PathRevolutions.ToString());
|
||||||
|
Console.WriteLine("PathScaleX: " + pathScaleX.ToString() + " pathScaleY: " + pathScaleY.ToString());
|
||||||
|
Console.WriteLine("skew: " + skew.ToString() + " profileXComp: " + profileXComp.ToString());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
foreach (Vertex v in m.vertices)
|
foreach (Vertex v in m.vertices)
|
||||||
if (v != null)
|
if (v != null)
|
||||||
{
|
{
|
||||||
|
@ -1572,20 +1614,22 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
extr.pathEnd = primShape.PathEnd;
|
extr.pathEnd = primShape.PathEnd;
|
||||||
extr.skew = skew;
|
extr.skew = skew;
|
||||||
extr.revolutions = 1.0f + (float)primShape.PathRevolutions * 3.0f / 200.0f;
|
extr.revolutions = 1.0f + (float)primShape.PathRevolutions * 3.0f / 200.0f;
|
||||||
|
|
||||||
//System.Console.WriteLine("primShape.PathBegin: " + primShape.PathBegin.ToString() + " primShape.PathEnd: " + primShape.PathEnd.ToString());
|
|
||||||
//System.Console.WriteLine("extr.pathCutBegin: " + extr.pathCutBegin.ToString() + " extr.pathCutEnd: " + extr.pathCutEnd.ToString());
|
|
||||||
//System.Console.WriteLine("extr.revolutions: " + extr.revolutions.ToString());
|
|
||||||
|
|
||||||
//System.Console.WriteLine("primShape.PathTaperX: " + primShape.PathTaperX.ToString());
|
|
||||||
//System.Console.WriteLine("primShape.PathTaperY: " + primShape.PathTaperY.ToString());
|
|
||||||
|
|
||||||
extr.pathTaperX = 0.01f * (float)primShape.PathTaperX;
|
extr.pathTaperX = 0.01f * (float)primShape.PathTaperX;
|
||||||
extr.pathTaperY = 0.01f * (float)primShape.PathTaperY;
|
extr.pathTaperY = 0.01f * (float)primShape.PathTaperY;
|
||||||
|
|
||||||
extr.radius = 0.01f * (float)primShape.PathRadiusOffset;
|
extr.radius = 0.01f * (float)primShape.PathRadiusOffset;
|
||||||
//System.Console.WriteLine("primShape.PathRadiusOffset: " + primShape.PathRadiusOffset.ToString());
|
|
||||||
|
|
||||||
|
#if SPAM
|
||||||
|
//System.Console.WriteLine("primShape.PathBegin: " + primShape.PathBegin.ToString() + " primShape.PathEnd: " + primShape.PathEnd.ToString());
|
||||||
|
System.Console.WriteLine("extr.pathCutBegin: " + extr.pathCutBegin.ToString() + " extr.pathCutEnd: " + extr.pathCutEnd.ToString());
|
||||||
|
System.Console.WriteLine("extr.revolutions: " + extr.revolutions.ToString());
|
||||||
|
|
||||||
|
//System.Console.WriteLine("primShape.PathTaperX: " + primShape.PathTaperX.ToString());
|
||||||
|
//System.Console.WriteLine("primShape.PathTaperY: " + primShape.PathTaperY.ToString());
|
||||||
|
|
||||||
|
|
||||||
|
//System.Console.WriteLine("primShape.PathRadiusOffset: " + primShape.PathRadiusOffset.ToString());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1744,7 +1788,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
mesh = (Mesh)smesh;
|
mesh = (Mesh)smesh;
|
||||||
CalcNormals(mesh);
|
CalcNormals(mesh);
|
||||||
}
|
}
|
||||||
else if ((primShape.ProfileCurve & (byte)ProfileShape.Square) == (byte)ProfileShape.Square)
|
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
|
||||||
{
|
{
|
||||||
if (primShape.PathCurve == (byte)LLObject.PathCurve.Line)
|
if (primShape.PathCurve == (byte)LLObject.PathCurve.Line)
|
||||||
{ // its a box
|
{ // its a box
|
||||||
|
@ -1755,7 +1799,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
{ // tube
|
{ // tube
|
||||||
// do a cylinder for now
|
// do a cylinder for now
|
||||||
//mesh = CreateCylinderMesh(primName, primShape, size);
|
//mesh = CreateCylinderMesh(primName, primShape, size);
|
||||||
mesh = CreateCircularProfileMesh(primName, primShape, size);
|
mesh = CreateCircularPathMesh(primName, primShape, size);
|
||||||
CalcNormals(mesh);
|
CalcNormals(mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1771,7 +1815,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
// ProfileCurve seems to combine hole shape and profile curve so we need to only compare against the lower 3 bits
|
// ProfileCurve seems to combine hole shape and profile curve so we need to only compare against the lower 3 bits
|
||||||
else if (primShape.PathCurve == (byte) Extrusion.Curve1 && LLObject.UnpackPathScale(primShape.PathScaleY) <= 0.75f)
|
else if (primShape.PathCurve == (byte) Extrusion.Curve1 && LLObject.UnpackPathScale(primShape.PathScaleY) <= 0.75f)
|
||||||
{ // dahlia's favorite, a torus :)
|
{ // dahlia's favorite, a torus :)
|
||||||
mesh = CreateCircularProfileMesh(primName, primShape, size);
|
mesh = CreateCircularPathMesh(primName, primShape, size);
|
||||||
CalcNormals(mesh);
|
CalcNormals(mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1793,7 +1837,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
else if (primShape.PathCurve == (byte) Extrusion.Curve1)
|
else if (primShape.PathCurve == (byte) Extrusion.Curve1)
|
||||||
{ // a ring - do a cylinder for now
|
{ // a ring - do a cylinder for now
|
||||||
//mesh = CreateCylinderMesh(primName, primShape, size);
|
//mesh = CreateCylinderMesh(primName, primShape, size);
|
||||||
mesh = CreateCircularProfileMesh(primName, primShape, size);
|
mesh = CreateCircularPathMesh(primName, primShape, size);
|
||||||
CalcNormals(mesh);
|
CalcNormals(mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1853,6 +1897,34 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void reportPrimParams(string name, PrimitiveBaseShape primShape)
|
||||||
|
{
|
||||||
|
#if SPAM
|
||||||
|
|
||||||
|
Console.WriteLine("********************* PrimitiveBaseShape Parameters *******************\n"
|
||||||
|
+ "Name.............: " + name.ToString() + "\n"
|
||||||
|
+ "HollowShape......: " + primShape.HollowShape.ToString() + "\n"
|
||||||
|
+ "PathBegin........: " + primShape.PathBegin.ToString() + "\n"
|
||||||
|
+ "PathCurve........: " + primShape.PathCurve.ToString() + "\n"
|
||||||
|
+ "PathEnd..........: " + primShape.PathEnd.ToString() + "\n"
|
||||||
|
+ "PathRadiusOffset.: " + primShape.PathRadiusOffset.ToString() + "\n"
|
||||||
|
+ "PathRevolutions..: " + primShape.PathRevolutions.ToString() + "\n"
|
||||||
|
+ "PathScaleX.......: " + primShape.PathScaleX.ToString() + "\n"
|
||||||
|
+ "PathScaleY.......: " + primShape.PathScaleY.ToString() + "\n"
|
||||||
|
+ "PathShearX.......: " + primShape.PathShearX.ToString() + "\n"
|
||||||
|
+ "PathShearY.......: " + primShape.PathShearY.ToString() + "\n"
|
||||||
|
+ "PathSkew.........: " + primShape.PathSkew.ToString() + "\n"
|
||||||
|
+ "PathTaperX.......: " + primShape.PathTaperX.ToString() + "\n"
|
||||||
|
+ "PathTaperY.......: " + primShape.PathTaperY.ToString() + "\n"
|
||||||
|
+ "PathTwist........: " + primShape.PathTwist.ToString() + "\n"
|
||||||
|
+ "PathTwistBegin...: " + primShape.PathTwistBegin.ToString() + "\n"
|
||||||
|
+ "ProfileBegin.....: " + primShape.ProfileBegin.ToString() + "\n"
|
||||||
|
+ "ProfileCurve.....: " + primShape.ProfileCurve.ToString() + "\n"
|
||||||
|
+ "ProfileEnd.......: " + primShape.ProfileEnd.ToString() + "\n"
|
||||||
|
+ "ProfileHollow....: " + primShape.ProfileHollow.ToString() + "\n"
|
||||||
|
+ "ProfileShape.....: " + primShape.ProfileShape.ToString() + "\n"
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue