* Committing meshmerizer patch from Dahlia. Thanks Dahlia!

* 0001241: physics cylinder proxy distorted and square hollow misaligned (patch attached) 
* The included patch corrects the outer shell of the meshmerizer proxy for the cylinder prim to eliminate spurious vertices and shape distortion, and corrects the orientation of the square hollow.
* The size and orientation of the square hollow for the prism prim has been corrected also.
0.6.0-stable
Teravus Ovares 2008-05-13 04:16:16 +00:00
parent c8b59f7a31
commit e70da2e174
1 changed files with 252 additions and 168 deletions

View File

@ -56,7 +56,7 @@ namespace OpenSim.Region.Physics.Meshing
// Setting baseDir to a path will enable the dumping of raw files
// raw files can be imported by blender so a visual inspection of the results can be done
// const string baseDir = "rawFiles";
private const string baseDir = null; //"rawFiles";
private const string baseDir = "rawFiles";
private const float DEG_TO_RAD = 0.01745329238f;
// TODO: unused
@ -219,11 +219,32 @@ namespace OpenSim.Region.Physics.Meshing
if (hshape == HollowShape.Square)
{
float hollowFactorF = (float)fhollowFactor / (float)50000;
Vertex IMM = new Vertex(-0.5f * hollowFactorF, -0.5f * hollowFactorF, 0.0f);
Vertex IPM = new Vertex(+0.5f * hollowFactorF, -0.5f * hollowFactorF, 0.0f);
Vertex IPP = new Vertex(+0.5f * hollowFactorF, +0.5f * hollowFactorF, 0.0f);
Vertex IMP = new Vertex(-0.5f * hollowFactorF, +0.5f * hollowFactorF, 0.0f);
Vertex IMM;
Vertex IPM;
Vertex IPP;
Vertex IMP;
if (pshape == ProfileShape.Circle)
{ // square cutout in cylinder is 45 degress rotated
IMM = new Vertex(0.0f, -0.707f * hollowFactorF, 0.0f);
IPM = new Vertex(0.707f * hollowFactorF, 0.0f, 0.0f);
IPP = new Vertex(0.0f, 0.707f * hollowFactorF, 0.0f);
IMP = new Vertex(-0.707f * hollowFactorF, 0.0f, 0.0f);
}
else if (pshape == ProfileShape.EquilateralTriangle)
{
IMM = new Vertex(0.0f, -0.667f * hollowFactorF, 0.0f);
IPM = new Vertex(0.667f * hollowFactorF, 0.0f, 0.0f);
IPP = new Vertex(0.0f, 0.667f * hollowFactorF, 0.0f);
IMP = new Vertex(-0.667f * hollowFactorF, 0.0f, 0.0f);
}
else
{
IMM = new Vertex(-0.5f * hollowFactorF, -0.5f * hollowFactorF, 0.0f);
IPM = new Vertex(+0.5f * hollowFactorF, -0.5f * hollowFactorF, 0.0f);
IPP = new Vertex(+0.5f * hollowFactorF, +0.5f * hollowFactorF, 0.0f);
IMP = new Vertex(-0.5f * hollowFactorF, +0.5f * hollowFactorF, 0.0f);
}
holeHull = new SimpleHull();
@ -236,97 +257,124 @@ namespace OpenSim.Region.Physics.Meshing
{
float hollowFactorF = (float)fhollowFactor / (float)50000;
Vertex IQ1Q15 = new Vertex(-0.35f * hollowFactorF, -0.35f * hollowFactorF, 0.0f);
Vertex IQ1Q16 = new Vertex(-0.30f * hollowFactorF, -0.40f * hollowFactorF, 0.0f);
Vertex IQ1Q17 = new Vertex(-0.24f * hollowFactorF, -0.43f * hollowFactorF, 0.0f);
Vertex IQ1Q18 = new Vertex(-0.18f * hollowFactorF, -0.46f * hollowFactorF, 0.0f);
Vertex IQ1Q19 = new Vertex(-0.11f * hollowFactorF, -0.48f * hollowFactorF, 0.0f);
//Vertex IQ1Q15 = new Vertex(-0.35f * hollowFactorF, -0.35f * hollowFactorF, 0.0f);
//Vertex IQ1Q16 = new Vertex(-0.30f * hollowFactorF, -0.40f * hollowFactorF, 0.0f);
//Vertex IQ1Q17 = new Vertex(-0.24f * hollowFactorF, -0.43f * hollowFactorF, 0.0f);
//Vertex IQ1Q18 = new Vertex(-0.18f * hollowFactorF, -0.46f * hollowFactorF, 0.0f);
//Vertex IQ1Q19 = new Vertex(-0.11f * hollowFactorF, -0.48f * hollowFactorF, 0.0f);
Vertex IQ2Q10 = new Vertex(+0.0f * hollowFactorF, -0.50f * hollowFactorF, 0.0f);
Vertex IQ2Q11 = new Vertex(+0.11f * hollowFactorF, -0.48f * hollowFactorF, 0.0f);
Vertex IQ2Q12 = new Vertex(+0.18f * hollowFactorF, -0.46f * hollowFactorF, 0.0f);
Vertex IQ2Q13 = new Vertex(+0.24f * hollowFactorF, -0.43f * hollowFactorF, 0.0f);
Vertex IQ2Q14 = new Vertex(+0.30f * hollowFactorF, -0.40f * hollowFactorF, 0.0f);
Vertex IQ2Q15 = new Vertex(+0.35f * hollowFactorF, -0.35f * hollowFactorF, 0.0f);
Vertex IQ2Q16 = new Vertex(+0.40f * hollowFactorF, -0.30f * hollowFactorF, 0.0f);
Vertex IQ2Q17 = new Vertex(+0.43f * hollowFactorF, -0.24f * hollowFactorF, 0.0f);
Vertex IQ2Q18 = new Vertex(+0.46f * hollowFactorF, -0.18f * hollowFactorF, 0.0f);
Vertex IQ2Q19 = new Vertex(+0.48f * hollowFactorF, -0.11f * hollowFactorF, 0.0f);
//Vertex IQ2Q10 = new Vertex(+0.0f * hollowFactorF, -0.50f * hollowFactorF, 0.0f);
//Vertex IQ2Q11 = new Vertex(+0.11f * hollowFactorF, -0.48f * hollowFactorF, 0.0f);
//Vertex IQ2Q12 = new Vertex(+0.18f * hollowFactorF, -0.46f * hollowFactorF, 0.0f);
//Vertex IQ2Q13 = new Vertex(+0.24f * hollowFactorF, -0.43f * hollowFactorF, 0.0f);
//Vertex IQ2Q14 = new Vertex(+0.30f * hollowFactorF, -0.40f * hollowFactorF, 0.0f);
//Vertex IQ2Q15 = new Vertex(+0.35f * hollowFactorF, -0.35f * hollowFactorF, 0.0f);
//Vertex IQ2Q16 = new Vertex(+0.40f * hollowFactorF, -0.30f * hollowFactorF, 0.0f);
//Vertex IQ2Q17 = new Vertex(+0.43f * hollowFactorF, -0.24f * hollowFactorF, 0.0f);
//Vertex IQ2Q18 = new Vertex(+0.46f * hollowFactorF, -0.18f * hollowFactorF, 0.0f);
//Vertex IQ2Q19 = new Vertex(+0.48f * hollowFactorF, -0.11f * hollowFactorF, 0.0f);
Vertex IQ2Q20 = new Vertex(+0.50f * hollowFactorF, +0.0f * hollowFactorF, 0.0f);
Vertex IQ2Q21 = new Vertex(+0.48f * hollowFactorF, +0.11f * hollowFactorF, 0.0f);
Vertex IQ2Q22 = new Vertex(+0.46f * hollowFactorF, +0.18f * hollowFactorF, 0.0f);
Vertex IQ2Q23 = new Vertex(+0.43f * hollowFactorF, +0.24f * hollowFactorF, 0.0f);
Vertex IQ2Q24 = new Vertex(+0.40f * hollowFactorF, +0.30f * hollowFactorF, 0.0f);
Vertex IQ2Q25 = new Vertex(+0.35f * hollowFactorF, +0.35f * hollowFactorF, 0.0f);
Vertex IQ2Q26 = new Vertex(+0.30f * hollowFactorF, +0.40f * hollowFactorF, 0.0f);
Vertex IQ2Q27 = new Vertex(+0.24f * hollowFactorF, +0.43f * hollowFactorF, 0.0f);
Vertex IQ2Q28 = new Vertex(+0.18f * hollowFactorF, +0.46f * hollowFactorF, 0.0f);
Vertex IQ2Q29 = new Vertex(+0.11f * hollowFactorF, +0.48f * hollowFactorF, 0.0f);
//Vertex IQ2Q20 = new Vertex(+0.50f * hollowFactorF, +0.0f * hollowFactorF, 0.0f);
//Vertex IQ2Q21 = new Vertex(+0.48f * hollowFactorF, +0.11f * hollowFactorF, 0.0f);
//Vertex IQ2Q22 = new Vertex(+0.46f * hollowFactorF, +0.18f * hollowFactorF, 0.0f);
//Vertex IQ2Q23 = new Vertex(+0.43f * hollowFactorF, +0.24f * hollowFactorF, 0.0f);
//Vertex IQ2Q24 = new Vertex(+0.40f * hollowFactorF, +0.30f * hollowFactorF, 0.0f);
//Vertex IQ2Q25 = new Vertex(+0.35f * hollowFactorF, +0.35f * hollowFactorF, 0.0f);
//Vertex IQ2Q26 = new Vertex(+0.30f * hollowFactorF, +0.40f * hollowFactorF, 0.0f);
//Vertex IQ2Q27 = new Vertex(+0.24f * hollowFactorF, +0.43f * hollowFactorF, 0.0f);
//Vertex IQ2Q28 = new Vertex(+0.18f * hollowFactorF, +0.46f * hollowFactorF, 0.0f);
//Vertex IQ2Q29 = new Vertex(+0.11f * hollowFactorF, +0.48f * hollowFactorF, 0.0f);
Vertex IQ1Q20 = new Vertex(+0.0f * hollowFactorF, +0.50f * hollowFactorF, 0.0f);
Vertex IQ1Q21 = new Vertex(-0.11f * hollowFactorF, +0.48f * hollowFactorF, 0.0f);
Vertex IQ1Q22 = new Vertex(-0.18f * hollowFactorF, +0.46f * hollowFactorF, 0.0f);
Vertex IQ1Q23 = new Vertex(-0.24f * hollowFactorF, +0.43f * hollowFactorF, 0.0f);
Vertex IQ1Q24 = new Vertex(-0.30f * hollowFactorF, +0.40f * hollowFactorF, 0.0f);
Vertex IQ1Q25 = new Vertex(-0.35f * hollowFactorF, +0.35f * hollowFactorF, 0.0f);
Vertex IQ1Q26 = new Vertex(-0.40f * hollowFactorF, +0.30f * hollowFactorF, 0.0f);
Vertex IQ1Q27 = new Vertex(-0.43f * hollowFactorF, +0.24f * hollowFactorF, 0.0f);
Vertex IQ1Q28 = new Vertex(-0.46f * hollowFactorF, +0.18f * hollowFactorF, 0.0f);
Vertex IQ1Q29 = new Vertex(-0.48f * hollowFactorF, +0.11f * hollowFactorF, 0.0f);
//Vertex IQ1Q20 = new Vertex(+0.0f * hollowFactorF, +0.50f * hollowFactorF, 0.0f);
//Vertex IQ1Q21 = new Vertex(-0.11f * hollowFactorF, +0.48f * hollowFactorF, 0.0f);
//Vertex IQ1Q22 = new Vertex(-0.18f * hollowFactorF, +0.46f * hollowFactorF, 0.0f);
//Vertex IQ1Q23 = new Vertex(-0.24f * hollowFactorF, +0.43f * hollowFactorF, 0.0f);
//Vertex IQ1Q24 = new Vertex(-0.30f * hollowFactorF, +0.40f * hollowFactorF, 0.0f);
//Vertex IQ1Q25 = new Vertex(-0.35f * hollowFactorF, +0.35f * hollowFactorF, 0.0f);
//Vertex IQ1Q26 = new Vertex(-0.40f * hollowFactorF, +0.30f * hollowFactorF, 0.0f);
//Vertex IQ1Q27 = new Vertex(-0.43f * hollowFactorF, +0.24f * hollowFactorF, 0.0f);
//Vertex IQ1Q28 = new Vertex(-0.46f * hollowFactorF, +0.18f * hollowFactorF, 0.0f);
//Vertex IQ1Q29 = new Vertex(-0.48f * hollowFactorF, +0.11f * hollowFactorF, 0.0f);
Vertex IQ1Q10 = new Vertex(-0.50f * hollowFactorF, +0.0f * hollowFactorF, 0.0f);
Vertex IQ1Q11 = new Vertex(-0.48f * hollowFactorF, -0.11f * hollowFactorF, 0.0f);
Vertex IQ1Q12 = new Vertex(-0.46f * hollowFactorF, -0.18f * hollowFactorF, 0.0f);
Vertex IQ1Q13 = new Vertex(-0.43f * hollowFactorF, -0.24f * hollowFactorF, 0.0f);
Vertex IQ1Q14 = new Vertex(-0.40f * hollowFactorF, -0.30f * hollowFactorF, 0.0f);
//Vertex IQ1Q10 = new Vertex(-0.50f * hollowFactorF, +0.0f * hollowFactorF, 0.0f);
//Vertex IQ1Q11 = new Vertex(-0.48f * hollowFactorF, -0.11f * hollowFactorF, 0.0f);
//Vertex IQ1Q12 = new Vertex(-0.46f * hollowFactorF, -0.18f * hollowFactorF, 0.0f);
//Vertex IQ1Q13 = new Vertex(-0.43f * hollowFactorF, -0.24f * hollowFactorF, 0.0f);
//Vertex IQ1Q14 = new Vertex(-0.40f * hollowFactorF, -0.30f * hollowFactorF, 0.0f);
//Counter clockwise around the quadrants
holeHull = new SimpleHull();
holeHull.AddVertex(IQ1Q15);
holeHull.AddVertex(IQ1Q14);
holeHull.AddVertex(IQ1Q13);
holeHull.AddVertex(IQ1Q12);
holeHull.AddVertex(IQ1Q11);
holeHull.AddVertex(IQ1Q10);
//holeHull.AddVertex(IQ1Q15);
//holeHull.AddVertex(IQ1Q14);
//holeHull.AddVertex(IQ1Q13);
//holeHull.AddVertex(IQ1Q12);
//holeHull.AddVertex(IQ1Q11);
//holeHull.AddVertex(IQ1Q10);
holeHull.AddVertex(IQ1Q29);
holeHull.AddVertex(IQ1Q28);
holeHull.AddVertex(IQ1Q27);
holeHull.AddVertex(IQ1Q26);
holeHull.AddVertex(IQ1Q25);
holeHull.AddVertex(IQ1Q24);
holeHull.AddVertex(IQ1Q23);
holeHull.AddVertex(IQ1Q22);
holeHull.AddVertex(IQ1Q21);
holeHull.AddVertex(IQ1Q20);
//holeHull.AddVertex(IQ1Q29);
//holeHull.AddVertex(IQ1Q28);
//holeHull.AddVertex(IQ1Q27);
//holeHull.AddVertex(IQ1Q26);
//holeHull.AddVertex(IQ1Q25);
//holeHull.AddVertex(IQ1Q24);
//holeHull.AddVertex(IQ1Q23);
//holeHull.AddVertex(IQ1Q22);
//holeHull.AddVertex(IQ1Q21);
//holeHull.AddVertex(IQ1Q20);
holeHull.AddVertex(IQ2Q29);
holeHull.AddVertex(IQ2Q28);
holeHull.AddVertex(IQ2Q27);
holeHull.AddVertex(IQ2Q26);
holeHull.AddVertex(IQ2Q25);
holeHull.AddVertex(IQ2Q24);
holeHull.AddVertex(IQ2Q23);
holeHull.AddVertex(IQ2Q22);
holeHull.AddVertex(IQ2Q21);
holeHull.AddVertex(IQ2Q20);
//holeHull.AddVertex(IQ2Q29);
//holeHull.AddVertex(IQ2Q28);
//holeHull.AddVertex(IQ2Q27);
//holeHull.AddVertex(IQ2Q26);
//holeHull.AddVertex(IQ2Q25);
//holeHull.AddVertex(IQ2Q24);
//holeHull.AddVertex(IQ2Q23);
//holeHull.AddVertex(IQ2Q22);
//holeHull.AddVertex(IQ2Q21);
//holeHull.AddVertex(IQ2Q20);
holeHull.AddVertex(IQ2Q19);
holeHull.AddVertex(IQ2Q18);
holeHull.AddVertex(IQ2Q17);
holeHull.AddVertex(IQ2Q16);
holeHull.AddVertex(IQ2Q15);
holeHull.AddVertex(IQ2Q14);
holeHull.AddVertex(IQ2Q13);
holeHull.AddVertex(IQ2Q12);
holeHull.AddVertex(IQ2Q11);
holeHull.AddVertex(IQ2Q10);
//holeHull.AddVertex(IQ2Q19);
//holeHull.AddVertex(IQ2Q18);
//holeHull.AddVertex(IQ2Q17);
//holeHull.AddVertex(IQ2Q16);
//holeHull.AddVertex(IQ2Q15);
//holeHull.AddVertex(IQ2Q14);
//holeHull.AddVertex(IQ2Q13);
//holeHull.AddVertex(IQ2Q12);
//holeHull.AddVertex(IQ2Q11);
//holeHull.AddVertex(IQ2Q10);
//holeHull.AddVertex(IQ1Q19);
//holeHull.AddVertex(IQ1Q18);
//holeHull.AddVertex(IQ1Q17);
//holeHull.AddVertex(IQ1Q16);
holeHull.AddVertex(new Vertex(0.353553f * hollowFactorF, 0.353553f * hollowFactorF, 0.0f)); // 45 degrees
holeHull.AddVertex(new Vertex(0.433013f * hollowFactorF, 0.250000f * hollowFactorF, 0.0f)); // 30 degrees
holeHull.AddVertex(new Vertex(0.482963f * hollowFactorF, 0.129410f * hollowFactorF, 0.0f)); // 15 degrees
holeHull.AddVertex(new Vertex(0.500000f * hollowFactorF, 0.000000f * hollowFactorF, 0.0f)); // 0 degrees
holeHull.AddVertex(new Vertex(0.482963f * hollowFactorF, -0.129410f * hollowFactorF, 0.0f)); // 345 degrees
holeHull.AddVertex(new Vertex(0.433013f * hollowFactorF, -0.250000f * hollowFactorF, 0.0f)); // 330 degrees
holeHull.AddVertex(new Vertex(0.353553f * hollowFactorF, -0.353553f * hollowFactorF, 0.0f)); // 315 degrees
holeHull.AddVertex(new Vertex(0.250000f * hollowFactorF, -0.433013f * hollowFactorF, 0.0f)); // 300 degrees
holeHull.AddVertex(new Vertex(0.129410f * hollowFactorF, -0.482963f * hollowFactorF, 0.0f)); // 285 degrees
holeHull.AddVertex(new Vertex(0.000000f * hollowFactorF, -0.500000f * hollowFactorF, 0.0f)); // 270 degrees
holeHull.AddVertex(new Vertex(-0.129410f * hollowFactorF, -0.482963f * hollowFactorF, 0.0f)); // 255 degrees
holeHull.AddVertex(new Vertex(-0.250000f * hollowFactorF, -0.433013f * hollowFactorF, 0.0f)); // 240 degrees
holeHull.AddVertex(new Vertex(-0.353553f * hollowFactorF, -0.353553f * hollowFactorF, 0.0f)); // 225 degrees
holeHull.AddVertex(new Vertex(-0.433013f * hollowFactorF, -0.250000f * hollowFactorF, 0.0f)); // 210 degrees
holeHull.AddVertex(new Vertex(-0.482963f * hollowFactorF, -0.129410f * hollowFactorF, 0.0f)); // 195 degrees
holeHull.AddVertex(new Vertex(-0.500000f * hollowFactorF, 0.000000f * hollowFactorF, 0.0f)); // 180 degrees
holeHull.AddVertex(new Vertex(-0.482963f * hollowFactorF, 0.129410f * hollowFactorF, 0.0f)); // 165 degrees
holeHull.AddVertex(new Vertex(-0.433013f * hollowFactorF, 0.250000f * hollowFactorF, 0.0f)); // 150 degrees
holeHull.AddVertex(new Vertex(-0.353553f * hollowFactorF, 0.353553f * hollowFactorF, 0.0f)); // 135 degrees
holeHull.AddVertex(new Vertex(-0.250000f * hollowFactorF, 0.433013f * hollowFactorF, 0.0f)); // 120 degrees
holeHull.AddVertex(new Vertex(-0.129410f * hollowFactorF, 0.482963f * hollowFactorF, 0.0f)); // 105 degrees
holeHull.AddVertex(new Vertex(0.000000f * hollowFactorF, 0.500000f * hollowFactorF, 0.0f)); // 90 degrees
holeHull.AddVertex(new Vertex(0.129410f * hollowFactorF, 0.482963f * hollowFactorF, 0.0f)); // 75 degrees
holeHull.AddVertex(new Vertex(0.250000f * hollowFactorF, 0.433013f * hollowFactorF, 0.0f)); // 60 degrees
holeHull.AddVertex(new Vertex(0.353553f * hollowFactorF, 0.353553f * hollowFactorF, 0.0f)); // 45 degrees
holeHull.AddVertex(IQ1Q19);
holeHull.AddVertex(IQ1Q18);
holeHull.AddVertex(IQ1Q17);
holeHull.AddVertex(IQ1Q16);
}
if (hshape == HollowShape.Triangle)
{
@ -401,10 +449,14 @@ namespace OpenSim.Region.Physics.Meshing
Vertex MP = new Vertex(-0.5f, +0.5f, 0.0f);
SimpleHull outerHull = new SimpleHull();
outerHull.AddVertex(MM);
outerHull.AddVertex(PM);
//outerHull.AddVertex(MM);
//outerHull.AddVertex(PM);
//outerHull.AddVertex(PP);
//outerHull.AddVertex(MP);
outerHull.AddVertex(PP);
outerHull.AddVertex(MP);
outerHull.AddVertex(MM);
outerHull.AddVertex(PM);
// Deal with cuts now
if ((profileBegin != 0) || (profileEnd != 0))
@ -617,97 +669,126 @@ namespace OpenSim.Region.Physics.Meshing
// Base
// Q1Q15 = Quadrant 1, Quadrant1, Vertex 5
Vertex Q1Q15 = new Vertex(-0.35f, -0.35f, 0.0f);
Vertex Q1Q16 = new Vertex(-0.30f, -0.40f, 0.0f);
Vertex Q1Q17 = new Vertex(-0.24f, -0.43f, 0.0f);
Vertex Q1Q18 = new Vertex(-0.18f, -0.46f, 0.0f);
Vertex Q1Q19 = new Vertex(-0.11f, -0.48f, 0.0f);
//Vertex Q1Q15 = new Vertex(-0.35f, -0.35f, 0.0f);
//Vertex Q1Q16 = new Vertex(-0.30f, -0.40f, 0.0f);
//Vertex Q1Q17 = new Vertex(-0.24f, -0.43f, 0.0f);
//Vertex Q1Q18 = new Vertex(-0.18f, -0.46f, 0.0f);
//Vertex Q1Q19 = new Vertex(-0.11f, -0.48f, 0.0f);
Vertex Q2Q10 = new Vertex(+0.0f, -0.50f, 0.0f);
Vertex Q2Q11 = new Vertex(+0.11f, -0.48f, 0.0f);
Vertex Q2Q12 = new Vertex(+0.18f, -0.46f, 0.0f);
Vertex Q2Q13 = new Vertex(+0.24f, -0.43f, 0.0f);
Vertex Q2Q14 = new Vertex(+0.30f, -0.40f, 0.0f);
Vertex Q2Q15 = new Vertex(+0.35f, -0.35f, 0.0f);
Vertex Q2Q16 = new Vertex(+0.40f, -0.30f, 0.0f);
Vertex Q2Q17 = new Vertex(+0.43f, -0.24f, 0.0f);
Vertex Q2Q18 = new Vertex(+0.46f, -0.18f, 0.0f);
Vertex Q2Q19 = new Vertex(+0.48f, -0.11f, 0.0f);
//Vertex Q2Q10 = new Vertex(+0.0f, -0.50f, 0.0f);
//Vertex Q2Q11 = new Vertex(+0.11f, -0.48f, 0.0f);
//Vertex Q2Q12 = new Vertex(+0.18f, -0.46f, 0.0f);
//Vertex Q2Q13 = new Vertex(+0.24f, -0.43f, 0.0f);
//Vertex Q2Q14 = new Vertex(+0.30f, -0.40f, 0.0f);
//Vertex Q2Q15 = new Vertex(+0.35f, -0.35f, 0.0f);
//Vertex Q2Q16 = new Vertex(+0.40f, -0.30f, 0.0f);
//Vertex Q2Q17 = new Vertex(+0.43f, -0.24f, 0.0f);
//Vertex Q2Q18 = new Vertex(+0.46f, -0.18f, 0.0f);
//Vertex Q2Q19 = new Vertex(+0.48f, -0.11f, 0.0f);
Vertex Q2Q20 = new Vertex(+0.50f, +0.0f, 0.0f);
Vertex Q2Q21 = new Vertex(+0.48f, +0.11f, 0.0f);
Vertex Q2Q22 = new Vertex(+0.46f, +0.18f, 0.0f);
Vertex Q2Q23 = new Vertex(+0.43f, +0.24f, 0.0f);
Vertex Q2Q24 = new Vertex(+0.40f, +0.30f, 0.0f);
Vertex Q2Q25 = new Vertex(+0.35f, +0.35f, 0.0f);
Vertex Q2Q26 = new Vertex(+0.30f, +0.40f, 0.0f);
Vertex Q2Q27 = new Vertex(+0.24f, +0.43f, 0.0f);
Vertex Q2Q28 = new Vertex(+0.18f, +0.46f, 0.0f);
Vertex Q2Q29 = new Vertex(+0.11f, +0.48f, 0.0f);
//Vertex Q2Q20 = new Vertex(+0.50f, +0.0f, 0.0f);
//Vertex Q2Q21 = new Vertex(+0.48f, +0.11f, 0.0f);
//Vertex Q2Q22 = new Vertex(+0.46f, +0.18f, 0.0f);
//Vertex Q2Q23 = new Vertex(+0.43f, +0.24f, 0.0f);
//Vertex Q2Q24 = new Vertex(+0.40f, +0.30f, 0.0f);
//Vertex Q2Q25 = new Vertex(+0.35f, +0.35f, 0.0f);
//Vertex Q2Q26 = new Vertex(+0.30f, +0.40f, 0.0f);
//Vertex Q2Q27 = new Vertex(+0.24f, +0.43f, 0.0f);
//Vertex Q2Q28 = new Vertex(+0.18f, +0.46f, 0.0f);
//Vertex Q2Q29 = new Vertex(+0.11f, +0.48f, 0.0f);
Vertex Q1Q20 = new Vertex(+0.0f, +0.50f, 0.0f);
Vertex Q1Q21 = new Vertex(-0.11f, +0.48f, 0.0f);
Vertex Q1Q22 = new Vertex(-0.18f, +0.46f, 0.0f);
Vertex Q1Q23 = new Vertex(-0.24f, +0.43f, 0.0f);
Vertex Q1Q24 = new Vertex(-0.30f, +0.40f, 0.0f);
Vertex Q1Q25 = new Vertex(-0.35f, +0.35f, 0.0f);
Vertex Q1Q26 = new Vertex(-0.40f, +0.30f, 0.0f);
Vertex Q1Q27 = new Vertex(-0.43f, +0.24f, 0.0f);
Vertex Q1Q28 = new Vertex(-0.46f, +0.18f, 0.0f);
Vertex Q1Q29 = new Vertex(-0.48f, +0.11f, 0.0f);
//Vertex Q1Q20 = new Vertex(+0.0f, +0.50f, 0.0f);
//Vertex Q1Q21 = new Vertex(-0.11f, +0.48f, 0.0f);
//Vertex Q1Q22 = new Vertex(-0.18f, +0.46f, 0.0f);
//Vertex Q1Q23 = new Vertex(-0.24f, +0.43f, 0.0f);
//Vertex Q1Q24 = new Vertex(-0.30f, +0.40f, 0.0f);
//Vertex Q1Q25 = new Vertex(-0.35f, +0.35f, 0.0f);
//Vertex Q1Q26 = new Vertex(-0.40f, +0.30f, 0.0f);
//Vertex Q1Q27 = new Vertex(-0.43f, +0.24f, 0.0f);
//Vertex Q1Q28 = new Vertex(-0.46f, +0.18f, 0.0f);
//Vertex Q1Q29 = new Vertex(-0.48f, +0.11f, 0.0f);
Vertex Q1Q10 = new Vertex(-0.50f, +0.0f, 0.0f);
Vertex Q1Q11 = new Vertex(-0.48f, -0.11f, 0.0f);
Vertex Q1Q12 = new Vertex(-0.46f, -0.18f, 0.0f);
Vertex Q1Q13 = new Vertex(-0.43f, -0.24f, 0.0f);
Vertex Q1Q14 = new Vertex(-0.40f, -0.30f, 0.0f);
//Vertex Q1Q10 = new Vertex(-0.50f, +0.0f, 0.0f);
//Vertex Q1Q11 = new Vertex(-0.48f, -0.11f, 0.0f);
//Vertex Q1Q12 = new Vertex(-0.46f, -0.18f, 0.0f);
//Vertex Q1Q13 = new Vertex(-0.43f, -0.24f, 0.0f);
//Vertex Q1Q14 = new Vertex(-0.40f, -0.30f, 0.0f);
SimpleHull outerHull = new SimpleHull();
//Clockwise around the quadrants
outerHull.AddVertex(Q1Q15);
outerHull.AddVertex(Q1Q16);
outerHull.AddVertex(Q1Q17);
outerHull.AddVertex(Q1Q18);
outerHull.AddVertex(Q1Q19);
//outerHull.AddVertex(Q1Q15);
//outerHull.AddVertex(Q1Q16);
//outerHull.AddVertex(Q1Q17);
//outerHull.AddVertex(Q1Q18);
//outerHull.AddVertex(Q1Q19);
outerHull.AddVertex(Q2Q10);
outerHull.AddVertex(Q2Q11);
outerHull.AddVertex(Q2Q12);
outerHull.AddVertex(Q2Q13);
outerHull.AddVertex(Q2Q14);
outerHull.AddVertex(Q2Q15);
outerHull.AddVertex(Q2Q16);
outerHull.AddVertex(Q2Q17);
outerHull.AddVertex(Q2Q18);
outerHull.AddVertex(Q2Q19);
//outerHull.AddVertex(Q2Q10);
//outerHull.AddVertex(Q2Q11);
//outerHull.AddVertex(Q2Q12);
//outerHull.AddVertex(Q2Q13);
//outerHull.AddVertex(Q2Q14);
//outerHull.AddVertex(Q2Q15);
//outerHull.AddVertex(Q2Q16);
//outerHull.AddVertex(Q2Q17);
//outerHull.AddVertex(Q2Q18);
//outerHull.AddVertex(Q2Q19);
outerHull.AddVertex(Q2Q20);
outerHull.AddVertex(Q2Q21);
outerHull.AddVertex(Q2Q22);
outerHull.AddVertex(Q2Q23);
outerHull.AddVertex(Q2Q24);
outerHull.AddVertex(Q2Q25);
outerHull.AddVertex(Q2Q26);
outerHull.AddVertex(Q2Q27);
outerHull.AddVertex(Q2Q28);
outerHull.AddVertex(Q2Q29);
//outerHull.AddVertex(Q2Q20);
//outerHull.AddVertex(Q2Q21);
//outerHull.AddVertex(Q2Q22);
//outerHull.AddVertex(Q2Q23);
//outerHull.AddVertex(Q2Q24);
//outerHull.AddVertex(Q2Q25);
//outerHull.AddVertex(Q2Q26);
//outerHull.AddVertex(Q2Q27);
//outerHull.AddVertex(Q2Q28);
//outerHull.AddVertex(Q2Q29);
//outerHull.AddVertex(Q1Q20);
//outerHull.AddVertex(Q1Q21);
//outerHull.AddVertex(Q1Q22);
//outerHull.AddVertex(Q1Q23);
//outerHull.AddVertex(Q1Q24);
//outerHull.AddVertex(Q1Q25);
//outerHull.AddVertex(Q1Q26);
//outerHull.AddVertex(Q1Q27);
//outerHull.AddVertex(Q1Q28);
//outerHull.AddVertex(Q1Q29);
//outerHull.AddVertex(Q1Q10);
//outerHull.AddVertex(Q1Q11);
//outerHull.AddVertex(Q1Q12);
//outerHull.AddVertex(Q1Q13);
//outerHull.AddVertex(Q1Q14);
// counter-clockwise around the quadrants, start at 45 degrees
outerHull.AddVertex(new Vertex(0.353553f, 0.353553f, 0.0f)); // 45 degrees
outerHull.AddVertex(new Vertex(0.250000f, 0.433013f, 0.0f)); // 60 degrees
outerHull.AddVertex(new Vertex(0.129410f, 0.482963f, 0.0f)); // 75 degrees
outerHull.AddVertex(new Vertex(0.000000f, 0.500000f, 0.0f)); // 90 degrees
outerHull.AddVertex(new Vertex(-0.129410f, 0.482963f, 0.0f)); // 105 degrees
outerHull.AddVertex(new Vertex(-0.250000f, 0.433013f, 0.0f)); // 120 degrees
outerHull.AddVertex(new Vertex(-0.353553f, 0.353553f, 0.0f)); // 135 degrees
outerHull.AddVertex(new Vertex(-0.433013f, 0.250000f, 0.0f)); // 150 degrees
outerHull.AddVertex(new Vertex(-0.482963f, 0.129410f, 0.0f)); // 165 degrees
outerHull.AddVertex(new Vertex(-0.500000f, 0.000000f, 0.0f)); // 180 degrees
outerHull.AddVertex(new Vertex(-0.482963f, -0.129410f, 0.0f)); // 195 degrees
outerHull.AddVertex(new Vertex(-0.433013f, -0.250000f, 0.0f)); // 210 degrees
outerHull.AddVertex(new Vertex(-0.353553f, -0.353553f, 0.0f)); // 225 degrees
outerHull.AddVertex(new Vertex(-0.250000f, -0.433013f, 0.0f)); // 240 degrees
outerHull.AddVertex(new Vertex(-0.129410f, -0.482963f, 0.0f)); // 255 degrees
outerHull.AddVertex(new Vertex(0.000000f, -0.500000f, 0.0f)); // 270 degrees
outerHull.AddVertex(new Vertex(0.129410f, -0.482963f, 0.0f)); // 285 degrees
outerHull.AddVertex(new Vertex(0.250000f, -0.433013f, 0.0f)); // 300 degrees
outerHull.AddVertex(new Vertex(0.353553f, -0.353553f, 0.0f)); // 315 degrees
outerHull.AddVertex(new Vertex(0.433013f, -0.250000f, 0.0f)); // 330 degrees
outerHull.AddVertex(new Vertex(0.482963f, -0.129410f, 0.0f)); // 345 degrees
outerHull.AddVertex(new Vertex(0.500000f, 0.000000f, 0.0f)); // 0 degrees
outerHull.AddVertex(new Vertex(0.482963f, 0.129410f, 0.0f)); // 15 degrees
outerHull.AddVertex(new Vertex(0.433013f, 0.250000f, 0.0f)); // 30 degrees
outerHull.AddVertex(Q1Q20);
outerHull.AddVertex(Q1Q21);
outerHull.AddVertex(Q1Q22);
outerHull.AddVertex(Q1Q23);
outerHull.AddVertex(Q1Q24);
outerHull.AddVertex(Q1Q25);
outerHull.AddVertex(Q1Q26);
outerHull.AddVertex(Q1Q27);
outerHull.AddVertex(Q1Q28);
outerHull.AddVertex(Q1Q29);
outerHull.AddVertex(Q1Q10);
outerHull.AddVertex(Q1Q11);
outerHull.AddVertex(Q1Q12);
outerHull.AddVertex(Q1Q13);
outerHull.AddVertex(Q1Q14);
// Deal with cuts now
if ((profileBegin != 0) || (profileEnd != 0))
@ -933,9 +1014,12 @@ namespace OpenSim.Region.Physics.Meshing
SimpleHull outerHull = new SimpleHull();
//outerHull.AddVertex(MM);
//outerHull.AddVertex(PM);
//outerHull.AddVertex(PP);
outerHull.AddVertex(PP);
outerHull.AddVertex(MM);
outerHull.AddVertex(PM);
outerHull.AddVertex(PP);
// Deal with cuts now
if ((profileBegin != 0) || (profileEnd != 0))