From 6a6f57ad5638119d9f78028363f461dc9a877843 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 23 May 2007 13:26:21 +0000 Subject: [PATCH] Added angular sorting of the points on the plane intersecting the cut plane. --- src/osgSim/OverlayNode.cpp | 64 ++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/src/osgSim/OverlayNode.cpp b/src/osgSim/OverlayNode.cpp index f21578127..811a63278 100644 --- a/src/osgSim/OverlayNode.cpp +++ b/src/osgSim/OverlayNode.cpp @@ -144,7 +144,7 @@ public: face.vertices.push_back(v111); face.vertices.push_back(v101); } -#if 0 + { // bottom plane. Face& face = createFace(); face.plane.set(0.0,1.0,0.0,-bb.yMin()); @@ -162,10 +162,9 @@ public: face.vertices.push_back(v111); face.vertices.push_back(v011); } -#endif { // near plane Face& face = createFace(); - face.plane.set(0.0,0.0,-1.0,bb.zMin()); + face.plane.set(0.0,0.0,1.0,-bb.zMin()); face.vertices.push_back(v000); face.vertices.push_back(v100); face.vertices.push_back(v101); @@ -174,12 +173,13 @@ public: { // far plane Face& face = createFace(); - face.plane.set(0.0,0.0,1.0,-bb.zMax()); + face.plane.set(0.0,0.0,-1.0,bb.zMax()); face.vertices.push_back(v010); face.vertices.push_back(v011); face.vertices.push_back(v111); face.vertices.push_back(v110); } + } void transform(const osg::Matrix& matrix, const osg::Matrix& inverse) @@ -239,7 +239,7 @@ public: } else if (intersect==0) { - osg::notify(osg::NOTICE)<<" Face intersecting"< AnglePositions; + AnglePositions anglePositions; + for(vitr = vertices.begin(); + vitr != vertices.end(); + ++vitr) + { + osg::Vec3d delta = *vitr - center; + double angle = atan2(delta * u, delta * v); + anglePositions[angle] = *vitr; + } + + + Vertices newVertices; + for(AnglePositions::iterator aitr = anglePositions.begin(); + aitr != anglePositions.end(); + ++aitr) + { + newVertices.push_back(aitr->second); + } + + newVertices.swap(vertices); + + osg::notify(osg::NOTICE)<<" after angle sort "<