Bounding Box/find rez from inventory point code now seems to be working correctly.
So next step is to clean up that code and wait for bug reports.trunk
							parent
							
								
									856d5f4375
								
							
						
					
					
						commit
						a266e6dc4b
					
				| 
						 | 
				
			
			@ -2312,14 +2312,19 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
                            AddNewSceneObject(group, true);
 | 
			
		||||
 | 
			
		||||
                          //  m_log.InfoFormat("ray end point for inventory rezz is {0} {1} {2} ", RayEnd.X, RayEnd.Y, RayEnd.Z);
 | 
			
		||||
                            // if attachment we set it's asset id so object updates can reflect that
 | 
			
		||||
                            // if not, we set it's position in world.
 | 
			
		||||
                            if (!attachment)
 | 
			
		||||
                            {
 | 
			
		||||
                                float offsetHeight = 0;
 | 
			
		||||
                                pos = GetNewRezLocation(
 | 
			
		||||
                                    RayStart, RayEnd, RayTargetID, Quaternion.Identity,
 | 
			
		||||
                                    BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(), false);
 | 
			
		||||
                                    BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(out offsetHeight), false);
 | 
			
		||||
                                pos.Z += offsetHeight;
 | 
			
		||||
                                group.AbsolutePosition = pos;
 | 
			
		||||
                             //   m_log.InfoFormat("rezx point for inventory rezz is {0} {1} {2}  and offsetheight was {3}", pos.X, pos.Y, pos.Z, offsetHeight);
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -587,21 +587,22 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            return returnresult;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets a vector representing the size of the bounding box containing all the prims in the group
 | 
			
		||||
        /// Treats all prims as rectangular, so no shape (cut etc) is taken into account
 | 
			
		||||
        /// offsetHeight is the offset in the Z axis from the centre of the bounding box to the centre of the root prim
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public Vector3 GetAxisAlignedBoundingBox()
 | 
			
		||||
        public Vector3 GetAxisAlignedBoundingBox(out float offsetHeight)
 | 
			
		||||
        {
 | 
			
		||||
            float maxX = -256f, maxY = -256f, maxZ = -256f, minX = 256f, minY = 256f, minZ = 256f;
 | 
			
		||||
            lock (m_parts)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (SceneObjectPart part in m_parts.Values)
 | 
			
		||||
                {
 | 
			
		||||
                  
 | 
			
		||||
 | 
			
		||||
                    Vector3 worldPos = part.GetWorldPosition();
 | 
			
		||||
                    Vector3 offset = worldPos - AbsolutePosition;
 | 
			
		||||
                    Quaternion worldRot;
 | 
			
		||||
| 
						 | 
				
			
			@ -659,7 +660,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    backBottomRight.Y = orig.Y + (part.Scale.Y / 2);
 | 
			
		||||
                    backBottomRight.Z = orig.Z - (part.Scale.Z / 2);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    frontTopLeft = frontTopLeft * worldRot;
 | 
			
		||||
                    frontTopRight = frontTopRight * worldRot;
 | 
			
		||||
                    frontBottomLeft = frontBottomLeft * worldRot;
 | 
			
		||||
| 
						 | 
				
			
			@ -795,10 +795,23 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            Vector3 boundingBox = new Vector3(maxX - minX, maxY - minY, maxZ - minZ);
 | 
			
		||||
 | 
			
		||||
            offsetHeight = 0;
 | 
			
		||||
            float lower = (minZ * -1);
 | 
			
		||||
            if (lower > maxZ)
 | 
			
		||||
            {
 | 
			
		||||
                offsetHeight = lower - (boundingBox.Z / 2);
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
            else if (maxZ > lower)
 | 
			
		||||
            {
 | 
			
		||||
                offsetHeight = maxZ - (boundingBox.Z / 2);
 | 
			
		||||
                offsetHeight *= -1;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
          //  m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z);
 | 
			
		||||
            return boundingBox;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public void SaveScriptedState(XmlTextWriter writer)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue