vint
MoebiusStrip::PickElement(int x, int y, int& SideInd, int&
BlockInd)
v{
v long hits;
v static unsigned int selectBuf[16384];
v glSelectBuffer(16384, sBuf);
v glRenderMode(GL_SELECT);
v glInitNames(); glPushName(-1);
v int viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport);
v double mp[16]; glGetDoublev( GL_PROJECTION_MATRIX
,mp);
v glMatrixMode(GL_PROJECTION);
v glPushMatrix();
v glLoadIdentity();
v gluPickMatrix(x, viewport[3]-y, 4, 4,
viewport);
v glMultMatrixd(mp);
v glMatrixMode(GL_MODELVIEW);
v Draw(); // RENDER!
v glPopMatrix();
v glMatrixMode(GL_PROJECTION);
v glPopMatrix();
v glMatrixMode(GL_MODELVIEW);
v hits = glRenderMode(GL_RENDER);
v if (hits <= 0) return 0;
v vector< pair<double,unsigned int>
> H;
v for(int ii=0;ii<hits;ii++)
v H.push_back( make_pair(sBuf[ii*4+1]/4294967295.0,sBuf[ii*4+3]));
v sort(H.begin(),H.end());
v Ind2Sec(H[0].second,SideInd, BlockInd);
v return H[0].second;
v}