void CQDM_Edit::LMouseUp(Vec3D<> P) { if (LMBDown){ LMBDown = false; int MatIndex = 0; emit GetCurMaterial(&MatIndex); //apply the stuff here! for (int i=0; i<(int)CurHighlighted.size(); i++){ SetMat(CurHighlighted[i], MatIndex); } if ((int)CurHighlighted.size()>0) emit ModelChanged(); CurHighlighted.clear(); emit UpdateGLWindows(); } }
void QUATERNION::LookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ) { float tempmat[16]; glPushMatrix(); glLoadIdentity(); gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ); glGetFloatv(GL_MODELVIEW_MATRIX , tempmat); glPopMatrix(); SetMat(tempmat); }
//获取一个字符的点阵信息 int CChannelNameSet::GetBuffer(int ch, int nFont) { freeData(); //创建字体。 CFont hFont; hFont.CreateFont(nFont,0,0,0, FW_NORMAL,0, 0,0,DEFAULT_CHARSET, OUT_TT_PRECIS,CLIP_TT_ALWAYS, PROOF_QUALITY ,DEFAULT_PITCH, "宋体 "); //设置字体到当前设备。 CDC*pDC = GetDC(); CFont* pOldFont = pDC->SelectObject( &hFont); //设置字体图形变换矩阵 MAT2 mat2; SetMat(&mat2); GLYPHMETRICS gm; //获取这个字符图形需要的字节的大小。 DWORD dwNeedSize = pDC->GetGlyphOutline(ch,GGO_BITMAP,&gm,0,NULL,&mat2); if (dwNeedSize > 0 && dwNeedSize < 0xFFFF) { if( ch == '\t' ) return 4 * gm.gmCellIncX; m_pBuf = (byte*)(malloc(dwNeedSize)); if ( m_pBuf) { //获取字符图形的数据到缓冲区。 pDC->GetGlyphOutline(ch,GGO_BITMAP,&gm,dwNeedSize,m_pBuf,&mat2); m_nWidth = gm.gmBlackBoxX; m_nHeight = gm.gmBlackBoxY; } } else if( dwNeedSize == 0xFFFFFFFF || dwNeedSize == 0 || ch < 0x21 ) { //要生成的文字是空格或tab只需返回宽度 if( ch == ' ') return gm.gmCellIncX; else if( ch == '\t' ) return 4 * gm.gmCellIncX; else { UINT nSubstituteChar = ' '; pDC-> GetGlyphOutline( nSubstituteChar, GGO_NATIVE, &gm, 0, NULL, &mat2 ); if( ch < 256 ) //西文 return gm.gmCellIncX; else //中文空两个空格 return 2*gm.gmCellIncX; } } else { dwNeedSize = 0; } pDC->SelectObject(pOldFont); ReleaseDC(pDC); return dwNeedSize; }