重载鼠标事件:
void AxMapControl::mousePressEvent(QMouseEvent* e)
{switch(currentTool){case AX_DRAW_DIRECTION:{if (e->button() == Qt::LeftButton) {QPoint screenPt=e->pos();qglviewer::Vec orig1, dir1;camera()->convertClickToLine(screenPt, orig1, dir1);double valueZ=0;double a = ( valueZ- orig1.z) / dir1.z;Pnt.z = valueZ;Pnt.x = orig1.x + dir1.x * a;Pnt.y = orig1.y + dir1.y * a;//QMessageBox::information(this, "PickPoint", QString::number(Pnt.x) + "," + QString::number(Pnt.y));}break;}}QGLViewer::mousePressEvent(e);
}
重载绘制方法
void AxMapControl::draw()
{if (pimpl->points.size()>0){QMutexLocker locker(&pimpl->mutex_);glColor3f(255/255.0, 69/255.0, 0.0);draw_3d_points(pimpl->points);}if (pimpl->pointCloudOneFrame.size()>0){QMutexLocker locker(&pimpl->mutex_);glColor3f(255/255.0, 69/255.0, 0.0);for (vector<Point3ds>::const_iterator it = pimpl->pointCloudOneFrame.begin();it != pimpl->pointCloudOneFrame.end(); ++it) {const Point3ds& p = *it;if (p.size()>0){draw_3d_points(p);}}}if (!glImg.isNull()){glNormal3f(0.0, 0.0, 1.0);glBegin(GL_QUADS);glTexCoord2f(0.0, 1.0-v_max); glVertex2f(-u_max*ratio,-v_max);glTexCoord2f(0.0, 1.0); glVertex2f(-u_max*ratio, v_max);glTexCoord2f(u_max, 1.0); glVertex2f( u_max*ratio, v_max);glTexCoord2f(u_max, 1.0-v_max); glVertex2f( u_max*ratio,-v_max);glEnd();}if (currentTool==AX_DRAW_DIRECTION){glBegin(GL_LINES);glColor3f(255/255.0, 0/255.0, 0.0);glVertex3fv(currentPose);glVertex3fv(Pnt);glEnd();}
效果: