diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 739d23d..6cdbac5 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -4258,6 +4258,83 @@ namespace OpenSim.Region.Framework.Scenes | |||
4258 | return true; | 4258 | return true; |
4259 | } | 4259 | } |
4260 | 4260 | ||
4261 | public float GetMaxGroupResizeScale() | ||
4262 | { | ||
4263 | if (Scene == null || IsDeleted || inTransit) | ||
4264 | return 1.0f; | ||
4265 | |||
4266 | float maxsize = Scene.m_maxNonphys; | ||
4267 | PhysicsActor pa = m_rootPart.PhysActor; | ||
4268 | // assuming physics is more restrictive | ||
4269 | if (pa != null && pa.IsPhysical) | ||
4270 | maxsize = Scene.m_maxPhys; | ||
4271 | |||
4272 | SceneObjectPart[] parts = m_parts.GetArray(); | ||
4273 | float larger = float.MinValue; | ||
4274 | |||
4275 | for(int i = 0; i < parts.Length; i++) | ||
4276 | { | ||
4277 | SceneObjectPart obPart = parts[i]; | ||
4278 | Vector3 oldSize = new Vector3(obPart.Scale); | ||
4279 | if(larger < oldSize.X) | ||
4280 | larger = oldSize.X; | ||
4281 | |||
4282 | if(larger < oldSize.Y) | ||
4283 | larger = oldSize.Y; | ||
4284 | |||
4285 | if(larger < oldSize.Z) | ||
4286 | larger = oldSize.Z; | ||
4287 | } | ||
4288 | |||
4289 | if(larger >= maxsize) | ||
4290 | return 1.0f; | ||
4291 | |||
4292 | larger += 1e-3f; | ||
4293 | float fscale = maxsize / larger; | ||
4294 | |||
4295 | return fscale; | ||
4296 | } | ||
4297 | |||
4298 | public float GetMinGroupResizeScale() | ||
4299 | { | ||
4300 | if (Scene == null || IsDeleted || inTransit) | ||
4301 | return 1.0f; | ||
4302 | |||
4303 | float minsize = Scene.m_minNonphys; | ||
4304 | PhysicsActor pa = m_rootPart.PhysActor; | ||
4305 | // assuming physics is more restrictive | ||
4306 | if (pa != null && pa.IsPhysical) | ||
4307 | minsize = Scene.m_minPhys; | ||
4308 | |||
4309 | SceneObjectPart[] parts = m_parts.GetArray(); | ||
4310 | float smaller = float.MaxValue; | ||
4311 | |||
4312 | for(int i = 0; i < parts.Length; i++) | ||
4313 | { | ||
4314 | SceneObjectPart obPart = parts[i]; | ||
4315 | Vector3 oldSize = new Vector3(obPart.Scale); | ||
4316 | if(smaller > oldSize.X) | ||
4317 | smaller = oldSize.X; | ||
4318 | |||
4319 | if(smaller > oldSize.Y) | ||
4320 | smaller = oldSize.Y; | ||
4321 | |||
4322 | if(smaller > oldSize.Z) | ||
4323 | smaller = oldSize.Z; | ||
4324 | } | ||
4325 | |||
4326 | if(smaller <= minsize) | ||
4327 | return 1.0f; | ||
4328 | |||
4329 | if(smaller > 2e-3f) | ||
4330 | smaller -= 1e-3f; | ||
4331 | float fscale = minsize / smaller; | ||
4332 | if(fscale < 1e-8f) | ||
4333 | fscale = 1e-8f; | ||
4334 | |||
4335 | return fscale; | ||
4336 | } | ||
4337 | |||
4261 | #endregion | 4338 | #endregion |
4262 | 4339 | ||
4263 | #region Position | 4340 | #region Position |