From 0e7bac07f65dc88057c33e366aa573471283476b Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 1 Sep 2008 23:35:52 +0000 Subject: [PATCH] Thank you, Ewe Loon, for a patch that fixes various aspects of llSetPrimitiveParams and llSetLinkPrimitiveParams --- .../Shared/Api/Implementation/LSL_Api.cs | 96 +++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index a8c74acb56..574760aa2f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -5177,7 +5177,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return Util.Md5Hash(src + ":" + nonce.ToString()); } - private ObjectShapePacket.ObjectDataBlock SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist) + private ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist) { ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); @@ -5220,38 +5220,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api hollow = 0.95f; } shapeBlock.ProfileHollow = (ushort)(50000 * hollow); - if (twist.x < -0.5f) + if (twist.x < -1.0f) { - twist.x = -0.5f; + twist.x = -1.0f; } - if (twist.x > 0.5f) + if (twist.x > 1.0f) { - twist.x = 0.5f; + twist.x = 1.0f; } - if (twist.y < -0.5f) + if (twist.y < -1.0f) { - twist.y = -0.5f; + twist.y = -1.0f; } - if (twist.y > 0.5f) + if (twist.y > 1.0f) { - twist.y = 0.5f; + twist.y = 1.0f; } - shapeBlock.PathTwistBegin = (sbyte)(200 * twist.x); - shapeBlock.PathTwist = (sbyte)(200 * twist.y); + shapeBlock.PathTwistBegin = (sbyte)(100 * twist.x); + shapeBlock.PathTwist = (sbyte)(100 * twist.y); - shapeBlock.ObjectLocalID = m_host.LocalId; + shapeBlock.ObjectLocalID = part.LocalId; // retain pathcurve - shapeBlock.PathCurve = m_host.Shape.PathCurve; + shapeBlock.PathCurve = part.Shape.PathCurve; return shapeBlock; } - private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 taper_b, LSL_Types.Vector3 topshear, byte fudge) + private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 taper_b, LSL_Types.Vector3 topshear, byte fudge) { ObjectShapePacket.ObjectDataBlock shapeBlock; - shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); shapeBlock.ProfileCurve += fudge; @@ -5271,8 +5271,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { taper_b.y = 2f; } - shapeBlock.PathScaleX = (byte)(100 * taper_b.x); - shapeBlock.PathScaleY = (byte)(100 * taper_b.y); + shapeBlock.PathScaleX = (byte)(100 * (2.0 - taper_b.x)); + shapeBlock.PathScaleY = (byte)(100 * (2.0 - taper_b.y)); if (topshear.x < -0.5f) { topshear.x = -0.5f; @@ -5292,14 +5292,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api shapeBlock.PathShearX = (byte)(100 * topshear.x); shapeBlock.PathShearY = (byte)(100 * topshear.y); - m_host.UpdateShape(shapeBlock); + part.UpdateShape(shapeBlock); } - private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 dimple, byte fudge) + private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 dimple, byte fudge) { ObjectShapePacket.ObjectDataBlock shapeBlock; - shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); // profile/path swapped for a sphere shapeBlock.PathBegin = shapeBlock.ProfileBegin; @@ -5333,14 +5333,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); - m_host.UpdateShape(shapeBlock); + part.UpdateShape(shapeBlock); } - private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 holesize, LSL_Types.Vector3 topshear, LSL_Types.Vector3 profilecut, LSL_Types.Vector3 taper_a, float revolutions, float radiusoffset, float skew, byte fudge) + private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 holesize, LSL_Types.Vector3 topshear, LSL_Types.Vector3 profilecut, LSL_Types.Vector3 taper_a, float revolutions, float radiusoffset, float skew, byte fudge) { ObjectShapePacket.ObjectDataBlock shapeBlock; - shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); shapeBlock.ProfileCurve += fudge; @@ -5432,7 +5432,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { revolutions = 4f; } - shapeBlock.PathRevolutions = (byte)(100 * revolutions); + shapeBlock.PathRevolutions = (byte)(66.666667 * (revolutions - 1.0)); // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1 if (radiusoffset < 0f) { @@ -5453,10 +5453,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } shapeBlock.PathSkew = (sbyte)(100 * skew); - m_host.UpdateShape(shapeBlock); + part.UpdateShape(shapeBlock); } - private void SetPrimitiveShapeParams(string map, int type) + private void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type) { ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); LLUUID sculptId; @@ -5467,7 +5467,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; } - shapeBlock.ObjectLocalID = m_host.LocalId; + shapeBlock.ObjectLocalID = part.LocalId; shapeBlock.PathScaleX = 100; shapeBlock.PathScaleY = 150; @@ -5481,11 +5481,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } // retain pathcurve - shapeBlock.PathCurve = m_host.Shape.PathCurve; + shapeBlock.PathCurve = part.Shape.PathCurve; - m_host.Shape.SetSculptData((byte)type, sculptId); - m_host.Shape.SculptEntry = true; - m_host.UpdateShape(shapeBlock); + part.Shape.SetSculptData((byte)type, sculptId); + part.Shape.SculptEntry = true; + part.UpdateShape(shapeBlock); } public void llSetPrimitiveParams(LSL_Types.list rules) @@ -5572,8 +5572,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); - m_host.Shape.PathCurve = (byte) Extrusion.Straight; - SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 1); + part.Shape.PathCurve = (byte)Extrusion.Straight; + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 1); break; case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: @@ -5586,9 +5586,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); - m_host.Shape.ProfileShape = ProfileShape.Circle; - m_host.Shape.PathCurve = (byte) Extrusion.Straight; - SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 0); + part.Shape.ProfileShape = ProfileShape.Circle; + part.Shape.PathCurve = (byte)Extrusion.Straight; + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 0); break; case (int)ScriptBaseClass.PRIM_TYPE_PRISM: @@ -5601,8 +5601,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); - m_host.Shape.PathCurve = (byte) Extrusion.Straight; - SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 3); + part.Shape.PathCurve = (byte)Extrusion.Straight; + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 3); break; case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: @@ -5614,8 +5614,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api hollow = (float)Convert.ToDouble(rules.Data[idx++]); twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // dimple - m_host.Shape.PathCurve = (byte) Extrusion.Curve1; - SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, 5); + part.Shape.PathCurve = (byte)Extrusion.Curve1; + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, 5); break; case (int)ScriptBaseClass.PRIM_TYPE_TORUS: @@ -5633,8 +5633,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api revolutions = (float)Convert.ToDouble(rules.Data[idx++]); radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); skew = (float)Convert.ToDouble(rules.Data[idx++]); - m_host.Shape.PathCurve = (byte) Extrusion.Curve1; - SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0); + part.Shape.PathCurve = (byte)Extrusion.Curve1; + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0); break; case (int)ScriptBaseClass.PRIM_TYPE_TUBE: @@ -5652,8 +5652,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api revolutions = (float)Convert.ToDouble(rules.Data[idx++]); radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); skew = (float)Convert.ToDouble(rules.Data[idx++]); - m_host.Shape.PathCurve = (byte) Extrusion.Curve1; - SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1); + part.Shape.PathCurve = (byte)Extrusion.Curve1; + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1); break; case (int)ScriptBaseClass.PRIM_TYPE_RING: @@ -5671,8 +5671,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api revolutions = (float)Convert.ToDouble(rules.Data[idx++]); radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); skew = (float)Convert.ToDouble(rules.Data[idx++]); - m_host.Shape.PathCurve = (byte) Extrusion.Curve1; - SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3); + part.Shape.PathCurve = (byte)Extrusion.Curve1; + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3); break; case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: @@ -5681,8 +5681,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api string map = rules.Data[idx++].ToString(); face = Convert.ToInt32(rules.Data[idx++].ToString()); // type - m_host.Shape.PathCurve = (byte) Extrusion.Curve1; - SetPrimitiveShapeParams(map, face); + part.Shape.PathCurve = (byte)Extrusion.Curve1; + SetPrimitiveShapeParams(part, map, face); break; }