zoukankan      html  css  js  c++  java
  • [QGLViewer]3D场景鼠标点击位置

    重载鼠标事件:

    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();
    		}
    

     效果:

  • 相关阅读:
    global mapper合并多个tif影像
    arcgis 10.2 licence manager无法启动
    Error C2079 'CMFCPropertySheet::m_wndOutlookBar' uses undefined class 'CMFCOutlookBar'
    家里的技嘉B360主板win10 uefi系统安装
    vc 6.0项目转为vs 2017项目遇到 的问题
    PPT学习笔记
    git拉取分支
    将本地源码推向gitee码云
    java反编译工具使用记录
    node.js install and cecium apply
  • 原文地址:https://www.cnblogs.com/yhlx125/p/6834832.html
Copyright © 2011-2022 走看看