#include "screenGenerator.h" screenGenerator::screenGenerator(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { ui.setupUi(this); } screenGenerator::~screenGenerator() { } void screenGenerator::on_pBGenerate_clicked() { // Get filename to save QString filename = QFileDialog::getSaveFileName(this, tr("Save Wavefront Object File"), QDir::currentPath(), tr("Wavefront Object (*.obj)")); //Open file QFile file( filename ); file.remove(); file.open(QIODevice::ReadWrite | QIODevice::Text); QTextStream in(&file); in << "# Screen generator v0.1 OBJ File: \n"; in << "# Torben Dannhauer, 09 2009 \n"; // Raster the screen and save vertices double deltaVert = ui.dSB_upperEdge->value()-ui.dSB_lowerEdge->value(); deltaVert /= (ui.sB_horSubdivisions->value()+1); double deltaHor_rad = deg2rad( ui.sB_openingAngle->value() ) / (ui.sB_vertSubdivisions->value()+1); for(int i=0; i<=ui.sB_vertSubdivisions->value()+1; i++) // vertical { for (int j=0; j<=ui.sB_horSubdivisions->value()+1; j++) // horizontal { // calc current angle double currentAngle_rad = j*deltaHor_rad - deg2rad( ui.sB_openingAngle->value() / 2.0 ); double side = 0 - sin(currentAngle_rad)*ui.dSB_radius->value(); double up = ui.dSB_lowerEdge->value()+i*deltaVert; double depth = 0 - cos(currentAngle_rad)*ui.dSB_radius->value(); // write vertex line QString data = QString("v ")+QString::number(side, 'f', 6)+" "+QString::number(up, 'f', 6)+" "+QString::number(depth, 'f', 6)+" \n"; in << data; } } // calculate polygon vertex order for( int row=0; rowvalue()+1; row++) { for ( int col=0; colvalue()+1; col++) { // write polygon vertex line int x = row*(ui.sB_horSubdivisions->value()+2)+col+1; in << "f "+QString::number(x)+" "+QString::number(x+ui.sB_horSubdivisions->value()+2)+" "+QString::number(x+1)+"\n"; in << "f "+QString::number(x+1)+" "+QString::number(x+ui.sB_horSubdivisions->value()+2)+" "+QString::number(x+ui.sB_horSubdivisions->value()+3)+"\n"; } } // close file file.close(); } void screenGenerator::on_actionAbout_Qt_triggered() { QMessageBox::aboutQt(this); } void screenGenerator::on_actionAbout_screenGenerator_triggered() { QMessageBox::about( this, "screenGenerator V 0.1", "This software generates cylindrical curved screens to be used in the 'Projection Designer' software. The output format is wavefront object. The geometry and size can be specified." ); }