* Added support for delinking individual prim from a linkset.
parent
c2632a2eb9
commit
b4a19a4fb4
|
@ -895,6 +895,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// be more efficient yet to keep this dictionary permanently on hand.
|
// be more efficient yet to keep this dictionary permanently on hand.
|
||||||
|
|
||||||
Dictionary<uint, SceneObjectGroup> sceneObjects = new Dictionary<uint, SceneObjectGroup>();
|
Dictionary<uint, SceneObjectGroup> sceneObjects = new Dictionary<uint, SceneObjectGroup>();
|
||||||
|
|
||||||
List<EntityBase> EntitieList = GetEntities();
|
List<EntityBase> EntitieList = GetEntities();
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
{
|
{
|
||||||
|
@ -902,14 +903,17 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectGroup obj = (SceneObjectGroup) ent;
|
SceneObjectGroup obj = (SceneObjectGroup) ent;
|
||||||
sceneObjects.Add(obj.LocalId, obj);
|
sceneObjects.Add(obj.LocalId, obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the root prim among the prim ids we've been given
|
// Find the root prim among the prim ids we've been given
|
||||||
for (int i = 0; i < primIds.Count; i++)
|
for (int i = 0; i < primIds.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sceneObjects.ContainsKey(primIds[i]))
|
if (sceneObjects.ContainsKey(primIds[i]))
|
||||||
{
|
{
|
||||||
|
|
||||||
parenPrim = sceneObjects[primIds[i]];
|
parenPrim = sceneObjects[primIds[i]];
|
||||||
primIds.RemoveAt(i);
|
primIds.RemoveAt(i);
|
||||||
break;
|
break;
|
||||||
|
@ -925,9 +929,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[SCENE]: " +
|
// If the first scan failed, we need to do a /deep/ scan of the linkages. This is /really/ slow
|
||||||
"DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!",
|
// We know that this is not the root prim now essentially, so we don't have to worry about remapping
|
||||||
primIds);
|
// which one is the root prim
|
||||||
|
bool delinkedSomething = false;
|
||||||
|
for (int i = 0; i < primIds.Count; i++)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup grp in sceneObjects.Values)
|
||||||
|
{
|
||||||
|
SceneObjectPart gPart = grp.GetChildPart(primIds[i]);
|
||||||
|
if (gPart != null)
|
||||||
|
{
|
||||||
|
grp.DelinkFromGroup(primIds[i]);
|
||||||
|
delinkedSomething = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!delinkedSomething)
|
||||||
|
{
|
||||||
|
m_log.InfoFormat("[SCENE]: " +
|
||||||
|
"DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!",
|
||||||
|
primIds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1218,6 +1218,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
part.UpdateExtraParam(type, inUse, data);
|
part.UpdateExtraParam(type, inUse, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public SceneObjectPart[] GetParts()
|
||||||
|
{
|
||||||
|
int numParts = Children.Count;
|
||||||
|
SceneObjectPart[] partArray = new SceneObjectPart[numParts];
|
||||||
|
Children.Values.CopyTo(partArray, 0);
|
||||||
|
return partArray;
|
||||||
|
}
|
||||||
public bool GetLocked()
|
public bool GetLocked()
|
||||||
{
|
{
|
||||||
return m_locked;
|
return m_locked;
|
||||||
|
|
Loading…
Reference in New Issue