void MainWindow::on_butExport_clicked() { using namespace Assimp; #ifndef ASSIMP_BUILD_NO_EXPORT QString filename, filter, format_id; Exporter exporter; QTime time_begin; aiReturn rv; QStringList exportersList; QMap<QString, const aiExportFormatDesc*> exportersMap; if(mScene == nullptr) { QMessageBox::critical(this, "Export error", "Scene is empty"); return; } for (size_t i = 0; i < exporter.GetExportFormatCount(); ++i) { const aiExportFormatDesc* desc = exporter.GetExportFormatDescription(i); exportersList.push_back(desc->id + QString(": ") + desc->description); exportersMap.insert(desc->id, desc); } // get an exporter bool dialogSelectExporterOk; QString selectedExporter = QInputDialog::getItem(this, "Export format", "Select the exporter : ", exportersList, 0, false, &dialogSelectExporterOk); if (!dialogSelectExporterOk) return; // build the filter QString selectedId = selectedExporter.left(selectedExporter.indexOf(':')); filter = QString("*.") + exportersMap[selectedId]->fileExtension; // get file path filename = QFileDialog::getSaveFileName(this, "Set file name", "", filter); // if it's canceled if (filename == "") return; // begin export time_begin = QTime::currentTime(); rv = exporter.Export(mScene, selectedId.toLocal8Bit(), filename.toLocal8Bit(), aiProcess_FlipUVs); ui->lblExportTime->setText(QString::number(time_begin.secsTo(QTime::currentTime()))); if(rv == aiReturn_SUCCESS) LogInfo("Export done: " + filename); else { QString errorMessage = QString("Export failed: ") + filename; LogError(errorMessage); QMessageBox::critical(this, "Export error", errorMessage); } #endif }
// ------------------------------------------------------------------------------------------------ ASSIMP_API const aiExportFormatDesc* aiGetExportFormatDescription( size_t index) { // Note: this is valid as the index always pertains to a built-in exporter, // for which the returned structure is guaranteed to be of static storage duration. Exporter exporter; const aiExportFormatDesc* orig( exporter.GetExportFormatDescription( index ) ); if (NULL == orig) { return NULL; } aiExportFormatDesc *desc = new aiExportFormatDesc; desc->description = new char[ strlen( orig->description ) + 1 ](); ::strncpy( (char*) desc->description, orig->description, strlen( orig->description ) ); desc->fileExtension = new char[ strlen( orig->fileExtension ) + 1 ](); ::strncpy( ( char* ) desc->fileExtension, orig->fileExtension, strlen( orig->fileExtension ) ); desc->id = new char[ strlen( orig->id ) + 1 ](); ::strncpy( ( char* ) desc->id, orig->id, strlen( orig->id ) ); return desc; }