Universe.Region.SceneObjectGroup.GroupResize C# (CSharp) Метод

GroupResize() публичный Метод

public GroupResize ( System.Vector3 scale, uint localID ) : void
scale System.Vector3
localID uint
Результат void
        public void GroupResize(Vector3 scale, uint localID)
        {
            SceneObjectPart part = (SceneObjectPart) GetChildPart(localID);
            if (part != null)
            {
                CheckSculptAndLoad();
                //Grab the mesh again if it is a sculpty/mesh as we remove it after the first mesh is built
                part.IgnoreUndoUpdate = true;

                IOpenRegionSettingsModule WSModule = Scene.RequestModuleInterface<IOpenRegionSettingsModule>();
                if (WSModule != null)
                {
                    if (WSModule.MinimumPrimScale != -1)
                    {
                        if (scale.X < WSModule.MinimumPrimScale)
                            scale.X = WSModule.MinimumPrimScale;
                        if (scale.Y < WSModule.MinimumPrimScale)
                            scale.Y = WSModule.MinimumPrimScale;
                        if (scale.Z < WSModule.MinimumPrimScale)
                            scale.Z = WSModule.MinimumPrimScale;
                    }

                    if (RootPart.PhysActor != null && RootPart.PhysActor.IsPhysical &&
                        WSModule.MaximumPhysPrimScale != -1)
                    {
                        if (scale.X > WSModule.MaximumPhysPrimScale)
                            scale.X = WSModule.MaximumPhysPrimScale;
                        if (scale.Y > WSModule.MaximumPhysPrimScale)
                            scale.Y = WSModule.MaximumPhysPrimScale;
                        if (scale.Z > WSModule.MaximumPhysPrimScale)
                            scale.Z = WSModule.MaximumPhysPrimScale;
                    }

                    if (WSModule.MaximumPrimScale != -1)
                    {
                        if (scale.X > WSModule.MaximumPrimScale)
                            scale.X = WSModule.MaximumPrimScale;
                        if (scale.Y > WSModule.MaximumPrimScale)
                            scale.Y = WSModule.MaximumPrimScale;
                        if (scale.Z > WSModule.MaximumPrimScale)
                            scale.Z = WSModule.MaximumPrimScale;
                    }
                }

                float x = (scale.X/part.Scale.X);
                float y = (scale.Y/part.Scale.Y);
                float z = (scale.Z/part.Scale.Z);

                if (x == 1.0f && y == 1.0f && z == 1.0f)
                    return;

                foreach (SceneObjectPart obPart in m_partsList)
                {
                    obPart.StoreUndoState();
                }

                //On some linked objects this hangs (maybe deadlock), do we need this?
                //part.PhysActor.BlockPhysicalReconstruction = true;

                RebuildPhysicalRepresentation(true, () =>
                    {
                        Vector3 prevScale = part.Scale;
                        prevScale.X *= x;
                        prevScale.Y *= y;
                        prevScale.Z *= z;
                        part.Resize(prevScale);

                        foreach (SceneObjectPart obPart in m_partsList.Where(obPart => obPart.UUID != m_rootPart.UUID))
                        {
                            obPart.IgnoreUndoUpdate = true;
                            Vector3 currentpos = new Vector3(obPart.OffsetPosition);
                            currentpos.X *= x;
                            currentpos.Y *= y;
                            currentpos.Z *= z;
                            Vector3 newSize = new Vector3(obPart.Scale);
                            newSize.X *= x;
                            newSize.Y *= y;
                            newSize.Z *= z;
                            obPart.Resize(newSize);
                            obPart.UpdateOffSet(currentpos);
                            obPart.IgnoreUndoUpdate = false;
                        }

                        part.IgnoreUndoUpdate = false;
                        m_rootPart.IgnoreUndoUpdate = false;
                        HasGroupChanged = true;
                        ScheduleGroupTerseUpdate();
                        m_ValidgrpOOB = false;
                    });
            }
        }
SceneObjectGroup