PDA

View Full Version : Selection Problem

Sangee
08-09-2006, 04:13 AM
Hi,

If more objects are get overlapped, the hit is not occuring. How to solve this problem?

The code is as follows:

;

// Hit counter and viewport storeage
GLint hits, viewport[4];

// Setup selection buffer
glSelectBuffer(BUFFER_LENGTH, selectBuff);
glRenderMode(GL_SELECT);

// Get the viewport
glGetIntegerv(GL_VIEWPORT, viewport);

// Switch to projection and save the matrix
glMatrixMode(GL_PROJECTION);

// Establish new clipping volume to be unit cube around
// mouse cursor point (xPos, yPos) and extending two pixels
// in the vertical and horzontal direction

// Since OpenGL measures
// window coordinates starting at the bottom of the window, and Windows
// measures starting at the top, we need to account for this by
// subtracting the y coordinate from the height of the window. This has
// the effect of reversing the coordinate system (y starts at top)

gluPickMatrix(xPos, viewport[3] - yPos, 2, 2, viewport);

glGetFloatv(GL_PROJECTION_MATRIX, projection);
// Apply perspective matrix
glOrtho(l,r,b,t,near1,far1);
///gluPerspective(30.0f, m_WHRatio, 1.0, 2.0);
glGetFloatv(GL_PROJECTION_MATRIX, projection);

glMatrixMode(GL_MODELVIEW);

// Draw the scene
if(asc == 1 &#0124;&#0124; asc == 2)
RenderScene();

else if(ger == 1 &#0124;&#0124; ger == 2)
GerberDraw ();

// Collect the hits
hits = glRenderMode(GL_RENDER);

if(m_bHighlight == true)
{

CDocumentationDoc *pDoc = GetDocument();
ASSERT_VALID(pDoc);

CFileCollection* FileDetails = (CFileCollection*) pDoc -> aFileCollection_Array.GetAt(FileNo);
CMainCodes* pCodes = (CMainCodes*) FileDetails -> aFile_Details.GetAt(CodeNo);
CLineInformation* pLine = (CLineInformation*) pCodes -> Line_Information.GetAt(LineNo);
pLine -> Highlight = FALSE;

}

// If a single hit occured, display the info.
if(hits >= 1)
{

ProcessStack(selectBuff);
m_bHighlight = true;

}

if more number of objects are overlapped, the value for the variable "hits" is coming as -1.

Relic
08-09-2006, 05:26 AM