* Moved PrimitiveBaseShape subclasses into factory methods - the subclassing scheme won't hold for serialization

* Extracted out the 'old' AddNewPrimitive that places an object at an exact pos, without the raytracing
afrisby
lbsa71 2007-12-28 08:34:38 +00:00
parent 5bd5770ed2
commit 8cd72beb86
8 changed files with 107 additions and 116 deletions

View File

@ -203,7 +203,7 @@ namespace OpenSim.Framework.Data.MySQL
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
group.AddPart(prim);
group.RootPart = prim;
@ -223,7 +223,7 @@ namespace OpenSim.Framework.Data.MySQL
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
createdObjects[new LLUUID(objID)].AddPart(prim);
}

View File

@ -156,6 +156,58 @@ namespace OpenSim.Framework
return shape;
}
public static PrimitiveBaseShape CreateBox()
{
PrimitiveBaseShape shape = Create();
shape.PathCurve = (byte)Extrusion.Straight;
shape.ProfileShape = ProfileShape.Square;
shape.PathScaleX = 100;
shape.PathScaleY = 100;
return shape;
}
public static PrimitiveBaseShape CreateCylinder()
{
PrimitiveBaseShape shape = Create();
shape.PathCurve = (byte)Extrusion.Curve1;
shape.ProfileShape = ProfileShape.Square;
shape.PathScaleX = 100;
shape.PathScaleY = 100;
return shape;
}
public static PrimitiveBaseShape Default
{
get
{
PrimitiveBaseShape boxShape = CreateBox();
boxShape.SetScale(0.5f);
return boxShape;
}
}
public void SetScale(float side)
{
Scale = new LLVector3(side, side, side);
}
public void SetHeigth(float heigth)
{
Scale.Z = heigth;
}
public void SetRadius(float radius)
{
Scale.X = Scale.Y = radius * 2f;
}
//void returns need to change of course
public virtual void GetMesh()
{
@ -165,77 +217,15 @@ namespace OpenSim.Framework
{
return (PrimitiveBaseShape)MemberwiseClone();
}
}
public class GenericShape : PrimitiveBaseShape
public static PrimitiveBaseShape CreateCylinder(float radius, float heigth)
{
public GenericShape()
: base()
{
}
}
PrimitiveBaseShape shape = CreateCylinder( );
public class BoxShape : PrimitiveBaseShape
{
public BoxShape()
: base()
{
PathCurve = (byte) Extrusion.Straight;
ProfileShape = ProfileShape.Square;
PathScaleX = 100;
PathScaleY = 100;
}
shape.SetHeigth( heigth );
shape.SetRadius( radius );
public BoxShape(float side)
: this()
{
SetSide(side);
}
public void SetSide(float side)
{
Scale = new LLVector3(side, side, side);
}
public static BoxShape Default
{
get
{
BoxShape boxShape = new BoxShape();
boxShape.SetSide(0.5f);
return boxShape;
}
}
}
public class CylinderShape : PrimitiveBaseShape
{
public CylinderShape()
: base()
{
PathCurve = (byte) Extrusion.Straight;
ProfileShape = ProfileShape.Circle;
PathScaleX = 100;
PathScaleY = 100;
}
public CylinderShape(float radius, float heigth)
: this()
{
SetRadius(radius);
SetHeigth(heigth);
}
private void SetHeigth(float heigth)
{
Scale.Z = heigth;
}
private void SetRadius(float radius)
{
Scale.X = Scale.Y = radius*2f;
return shape;
}
}
}

View File

@ -1017,18 +1017,20 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection);
if (PermissionsMngr.CanRezObject(ownerID, pos))
{
// rez ON the ground, not IN the ground
pos.Z += 0.25F;
AddNewPrim(ownerID, pos, rot, shape);
}
}
public virtual void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
{
SceneObjectGroup sceneOb =
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
AddEntity(sceneOb);
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
// if grass or tree, make phantom
@ -1053,7 +1055,6 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
}
}
}
public void AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position,
Tree treeType, bool newTree)

View File

@ -43,7 +43,7 @@ namespace SimpleApp
public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID,
LLVector3 groupPosition, LLVector3 offsetPosition, LLQuaternion rotationDirection)
: base(
regionHandle, parent, ownerID, localID, new CylinderShape(0.5f, 0.2f), groupPosition, offsetPosition
regionHandle, parent, ownerID, localID, PrimitiveBaseShape.CreateCylinder(0.5f, 0.2f), groupPosition, offsetPosition
)
{
m_rotationDirection = rotationDirection;
@ -64,7 +64,7 @@ namespace SimpleApp
public ComplexObject(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos)
: base(scene, regionHandle, ownerID, localID, pos, BoxShape.Default)
: base(scene, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default)
{
m_rotationDirection = new LLQuaternion(0.05f, 0.1f, 0.15f);

View File

@ -39,7 +39,7 @@ namespace SimpleApp
private PerformanceCounter m_counter;
public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos)
: base(world, regionHandle, ownerID, localID, pos, BoxShape.Default)
: base(world, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default)
{
String objectName = "Processor";
String counterName = "% Processor Time";

View File

@ -36,7 +36,7 @@ namespace SimpleApp
public class FileSystemObject : SceneObjectGroup
{
public FileSystemObject(Scene world, FileInfo fileInfo, LLVector3 pos)
: base(world, world.RegionInfo.RegionHandle, LLUUID.Zero, world.NextLocalId, pos, BoxShape.Default)
: base(world, world.RegionInfo.RegionHandle, LLUUID.Zero, world.NextLocalId, pos, PrimitiveBaseShape.Default)
{
//float size = (float) Math.Pow((double) fileInfo.Length, (double) 1/3)/5;
// rootPrimitive.ResizeGoup(new LLVector3(size, size, size));

View File

@ -199,7 +199,7 @@ namespace OpenSim.DataStore.MSSQL
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
group.AddPart(prim);
group.RootPart = prim;
@ -219,7 +219,7 @@ namespace OpenSim.DataStore.MSSQL
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
createdObjects[new LLUUID(objID)].AddPart(prim);
}

View File

@ -265,7 +265,7 @@ namespace OpenSim.DataStore.MonoSqlite
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
group.AddPart(prim);
group.RootPart = prim;
@ -285,7 +285,7 @@ namespace OpenSim.DataStore.MonoSqlite
{
MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default;
prim.Shape = PrimitiveBaseShape.Default;
}
createdObjects[new LLUUID(objID)].AddPart(prim);
}