⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oglviewer.cpp

📁 The purpose of this program is to enable building a config file to the radarFDTD package using a mo
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "oglViewer.h"#include <GL/gl.h>#include <GL/glu.h>#include <qpixmap.h>#include <qimage.h>#include <qnamespace.h>#include <qcursor.h>#include <stdio.h>#include <iostream>using namespace std;static const float XMT_RGB[3] = {1.0, 0.4, 0.0};static const float RCV_RGB[3] = {0.0, 0.4, 1.0};#define SQR(x) ((x)*(x))OGLViewer::OGLViewer(QWidget *parent, const char *name) :    QGLWidget(parent,name, 0, 0) {  m_Lx = m_Ly = m_Lz = 50.0;	m_lastx = 0.0;	m_lasty = 0.0;	m_transz = 0.0;  m_transy = 0.0;	m_transx = 0.0;	m_rotx = 0.0;	m_roty = 0.0;  m_moving = false;	m_rotating = true;	m_zooming = false;	m_solid = false;  m_popup = NULL;   m_drawBox = true;  m_drawObjects = true;  m_drawRCVs = true;  m_drawXMTs = true;    paintGL();  //draw_geometry();  //updateGL();}OGLViewer::~OGLViewer(){  if (m_popup != NULL)    delete m_popup;  glDeleteLists(1,5);}void OGLViewer::updateMaterialColorTable(QValueList<material_t>& mat){  m_colMap.clear();  for (unsigned int i=0; i<mat.size(); i++) {    m_colMap.push_back(mat[i].viewColor);  }}    void OGLViewer::wireBox(float Lx, float Ly, float Lz, float R, float G, float B){  glBegin(GL_LINE_LOOP);     glColor3f(R,G,B);    glVertex3f(0,0,0);    glVertex3f(Lx,0,0);    glVertex3f(Lx,Ly,0);    glVertex3f(0,Ly,0);  glEnd();    glBegin(GL_LINE_LOOP);     glColor3f(R,G,B);    glVertex3f(0,0,Lz);    glVertex3f(Lx,0,Lz);    glVertex3f(Lx,Ly,Lz);    glVertex3f(0,Ly,Lz);  glEnd();    glBegin(GL_LINES);    glColor3f(R,G,B);    glVertex3f(0,0,0);    glVertex3f(0,0,Lz);        glVertex3f(Lx,0,0);    glVertex3f(Lx,0,Lz);        glVertex3f(0,Ly,0);    glVertex3f(0,Ly,Lz);        glVertex3f(Lx,Ly,0);    glVertex3f(Lx,Ly,Lz);  glEnd();}void OGLViewer::wireCube(float length, float R, float G, float B){  glBegin(GL_LINE_LOOP);    glColor3f(R,G,B);      glVertex3f(-length/2, -length/2, length/2);    glVertex3f(length/2, -length/2, length/2);    glVertex3f(length/2, length/2, length/2);    glVertex3f(-length/2, length/2, length/2);  glEnd();  glBegin(GL_LINE_LOOP);    glColor3f(R,G,B);      glVertex3f(-length/2, -length/2, -length/2);    glVertex3f(length/2, -length/2, -length/2);    glVertex3f(length/2, length/2, -length/2);    glVertex3f(-length/2, length/2, -length/2);  glEnd();  glBegin(GL_LINES);    glColor3f(R,G,B);      glVertex3f(-length/2, -length/2, length/2);    glVertex3f(-length/2, -length/2, -length/2);    glVertex3f(length/2, -length/2, length/2);    glVertex3f(length/2, -length/2, -length/2);    glVertex3f(length/2, length/2, length/2);    glVertex3f(length/2, length/2, -length/2);    glVertex3f(-length/2, length/2, length/2);    glVertex3f(-length/2, length/2, -length/2);  glEnd();}void OGLViewer::WireSphere(float r, int sec, int slice,                            float R, float G, float B){  glColor3f(R,G,B);  GLUquadricObj* sphereObj = gluNewQuadric ();  //can make the sphere solid, wireframe, and points  // GLU_LINE, GLU_POINT, GLU_FILL  gluQuadricDrawStyle (sphereObj, GLU_LINE);  gluSphere(sphereObj, r, sec, slice);}void OGLViewer::drawXMT(int polarization){  float length = 2;  float arrow_deg = 30.0;  float arrow_length = length*0.3;  float dt = arrow_length*sin(M_PI*arrow_deg/180.0);  float dl = arrow_length*cos(M_PI*arrow_deg/180.0);  //cout << "Draw XMT with polarization: " << polarization << endl;  glBegin(GL_LINES);    glColor3f(XMT_RGB[0],XMT_RGB[1],XMT_RGB[2]);    if (polarization == 0) { // x-polarized      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(length/2, 0.0, 0.0);      // upper arrow      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2-dl,dt,0.0);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2-dl,-dt,0.0);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2-dl,0.0,dt);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2-dl,0.0,-dt);      // lower arrow      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2+dl,dt,0.0);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2+dl,-dt,0.0);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2+dl,0.0,dt);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2+dl,0.0,-dt);    } else if (polarization == 1) { // y-polarized      glVertex3f(0.0, -length/2, 0.0);      glVertex3f(0.0, length/2, 0.0);      // upper arrow      glVertex3f(0.0,length/2, 0.0);      glVertex3f(dt,length/2-dl,0.0);      glVertex3f(0.0,length/2, 0.0);      glVertex3f(-dt,length/2-dl,0.0);      glVertex3f(0.0,length/2, 0.0);      glVertex3f(0.0,length/2-dl,dt);      glVertex3f(0.0,length/2, 0.0);      glVertex3f(0.0,length/2-dl,-dt);      // lower arrow      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(dt,-length/2+dl,0.0);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(-dt,-length/2+dl,0.0);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(0.0,-length/2+dl,dt);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(0.0,-length/2+dl,-dt);    } else { // z-polarized      glVertex3f(0.0, 0.0, -length/2);      glVertex3f(0.0, 0.0, length/2);      // upper arrow      glVertex3f(0.0,0.0,length/2);      glVertex3f(dt,0.0,length/2-dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(-dt,0.0,length/2-dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(0.0,dt,length/2-dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(0.0,-dt,length/2-dl);      // lower arrow      glVertex3f(0.0,0.0,-length/2);      glVertex3f(dt,0.0,-length/2+dl);      glVertex3f(0.0,0.0,-length/2);      glVertex3f(-dt,0.0,-length/2+dl);      glVertex3f(0.0,0.0,-length/2);      glVertex3f(0.0,dt,-length/2+dl);      glVertex3f(0.0, 0.0,-length/2);      glVertex3f(0.0,-dt,-length/2+dl);    }  glEnd();}void OGLViewer::drawRCV(int component){  float length = 2;  float arrow_deg = 30.0;  float arrow_length = length*0.3;  float dt = arrow_length*sin(M_PI*arrow_deg/180.0);  float dl = arrow_length*cos(M_PI*arrow_deg/180.0);  glBegin(GL_LINES);    glColor3f(RCV_RGB[0],RCV_RGB[1],RCV_RGB[2]);    if ((component == 1)||(component == 4)||        (component == 0)||(component == 7)) { // Hx/Ex-component      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(length/2, 0.0, 0.0);      // upper arrow      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2+dl,dt,0.0);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2+dl,-dt,0.0);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2+dl,0.0,dt);      glVertex3f(length/2, 0.0, 0.0);      glVertex3f(length/2+dl,0.0,-dt);      // lower arrow      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2-dl,dt,0.0);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2-dl,-dt,0.0);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2-dl,0.0,dt);      glVertex3f(-length/2, 0.0, 0.0);      glVertex3f(-length/2-dl,0.0,-dt);      // "current" loop symbolize magnetic field      if ((component == 1)||(component == 0)) {        glVertex3f(0,-0.5,-0.5); glVertex3f(0,-0.5,0.5);        glVertex3f(0,-0.5,0.5);  glVertex3f(0,0.5,0.5);        glVertex3f(0,0.5,0.5);   glVertex3f(0,0.5,-0.5);        glVertex3f(0,0.5,-0.5);  glVertex3f(0,-0.5,-0.5);      }    }    if ((component == 2)||(component == 5)||        (component == 0)||(component == 7)) { // Hy/Ey-component      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(0.0,length/2, 0.0);      // upper arrow      glVertex3f(0.0,length/2, 0.0);      glVertex3f(dt,length/2+dl,0.0);      glVertex3f(0.0,length/2, 0.0);      glVertex3f(-dt,length/2+dl,0.0);      glVertex3f(0.0,length/2, 0.0);      glVertex3f(0.0,length/2+dl,dt);      glVertex3f(0.0,length/2,0.0);      glVertex3f(0.0,length/2+dl,-dt);      // lower arrow      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(dt,-length/2-dl,0.0);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(-dt,-length/2-dl,0.0);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(0.0,-length/2-dl,dt);      glVertex3f(0.0,-length/2, 0.0);      glVertex3f(0.0,-length/2-dl,-dt);      // "current" loop symbolize magnetic field      if ((component == 2)||(component == 0)) {        glVertex3f(-0.5,0,-0.5); glVertex3f(-0.5,0,0.5);        glVertex3f(-0.5,0,0.5);  glVertex3f(0.5,0,0.5);        glVertex3f(0.5,0,0.5);   glVertex3f(0.5,0,-0.5);        glVertex3f(0.5,0,-0.5);  glVertex3f(-0.5,0,-0.5);      }    }     if ((component == 3)||(component == 6)||        (component == 0)||(component == 7)) { // Hz/Ez-component      glVertex3f(0.0,0.0,-length/2);      glVertex3f(0.0,0.0,length/2);      // upper arrow      glVertex3f(0.0,0.0,length/2);      glVertex3f(dt,0.0,length/2+dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(-dt,0.0,length/2+dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(0.0,dt,length/2+dl);      glVertex3f(0.0,0.0,length/2);      glVertex3f(0.0,-dt,length/2+dl);      // lower arrow      glVertex3f(0.0,0.0,-length/2);      glVertex3f(dt,0.0,-length/2-dl);      glVertex3f(0.0,0.0,-length/2);      glVertex3f(-dt,0.0,-length/2-dl);      glVertex3f(0.0,0.0,-length/2);      glVertex3f(0.0,dt,-length/2-dl);      glVertex3f(0.0,0.0,-length/2);      glVertex3f(0.0,-dt,-length/2-dl);      // "current" loop symbolize magnetic field      if ((component == 3)||(component == 0)) {        glVertex3f(-0.5,-0.5,0); glVertex3f(-0.5,0.5,0);        glVertex3f(-0.5,0.5,0);  glVertex3f(0.5,0.5,0);        glVertex3f(0.5,0.5,0);   glVertex3f(0.5,-0.5,0);        glVertex3f(0.5,-0.5,0);  glVertex3f(-0.5,-0.5,0);      }    }    if (component == 7)      WireSphere(0.6,10,10,RCV_RGB[0],RCV_RGB[1],RCV_RGB[2]);  glEnd();}void OGLViewer::initializeGL () {	//glClearDepth(1.0);	//glEnable(GL_DEPTH_TEST);	glClearColor(0.0, 0.0, 0.0, 0.0);	glShadeModel(GL_SMOOTH);	//glShadeModel(GL_FLAT);	//glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);	//glEnable(GL_COLOR_MATERIAL);}void OGLViewer::resizeGL ( int w, int h ) {  //printf("w,h= %d %d\n",w,h);  // Map real coordinates to window 2D coordinates   glViewport (0, 0, (GLsizei) w, (GLsizei) h);   glMatrixMode (GL_PROJECTION);   glLoadIdentity ();   double backClipingPlan = 2.0*sqrt(SQR(m_Lx)+SQR(m_Ly)+SQR(m_Lz));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -