void IFPAnimationViewerWidget::reloadModelFile() { QString fname = ui.modelField->text(); File file(fname.toLocal8Bit().constData()); MeshPointer* meshPtr; if (file.exists()) { DFFLoader dff; DFFMesh* dffMesh = dff.loadMesh(file); MeshClump* clump = new MeshClump(dffMesh); delete dffMesh; meshPtr = new StaticMeshPointer(clump); } else { meshPtr = new ManagedMeshPointer(fname.toLocal8Bit().constData()); } renderWidget->setMeshPointer(meshPtr); if (frameModel) delete frameModel; MeshClump* clump = **meshPtr; frameModel = new IFPFrameItemModel(clump); ui.frameView->setModel(frameModel); }
void MapItemDatabase::ExportAllItems(string textureExportPath, string meshExportPath, string materialExportPath, string sceneExportPath, bool bOverwrite) { // export textures and preprocess textures for materials // TODO: seperate txd out into a unique list (txd tend to repeat in Item Definations) for (auto it : this->m_items) { MapItemDefination& mapItem = *(it.second); istream* txdStream = nullptr; // preprocess for materials? if (!this->GetResourceStreamFromIMGs(mapItem.GetTexDictStem() + ".txd", txdStream)) throw new MyException("TXD NOT FOUND"); TXDArchive txdArchive(txdStream); for (int i = 0; i < txdArchive.getTextureCount(); i++) { TXDTextureHeader* texHeader = txdArchive.getHeader(i); m_matDB->AddTextureHeaderForPreProcessing(texHeader); } this->m_texExporter->Export(&txdArchive, mapItem.GetTexDictStem(), textureExportPath, bOverwrite); } // export the DFFs for (auto it : this->m_items) { MapItemDefination& mapItem = *(it.second); istream* dffStream = nullptr; if (!this->GetResourceStreamFromIMGs(mapItem.GetDFFStem() + ".dff", dffStream)) throw new MyException("DFF NOT FOUND"); DFFLoader loader; DFFMesh* mesh = loader.loadMesh(dffStream); // TODO: Add material for Subclumps vector<string> matList = this->m_matDB->CreateOrRetrieveMaterial(mesh->getGeometry(0), &mapItem); this->m_dffExporter->Export(matList, mesh, mapItem.GetDFFStem(), meshExportPath, bOverwrite); delete mesh; } this->m_matDB->ExportAll(materialExportPath); this->ExportScene(sceneExportPath); }
void DFFWidget::reloadHighLevelFile() { setCurrentGeometry(NULL); if (frameModel) delete frameModel; if (geomModel) delete geomModel; if (mesh) delete mesh; DFFLoader dff; File file = dfile->getFile(); try { mesh = dff.loadMesh(file); setEnabled(true); } catch (DFFException ex) { System::getInstance()->log(LogEntry::error(QString(tr("Error opening the DFF file: %1")) .arg(ex.getMessage().get()), &ex)); mesh = NULL; setEnabled(false); //ui.hlWidget->setEnabled(false); //ui.tabWidget->setTabEnabled(ui.tabWidget->indexOf(ui.hlWidget), false); } // Load the frame tree frameModel = new DFFFrameItemModel(mesh); ui.frameTree->setModel(frameModel); connect(ui.frameTree->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(frameSelected(const QModelIndex&, const QModelIndex&))); System* sys = System::getInstance(); DFFMesh::GeometryIterator git; if (mesh) { geomModel = new DFFGeometryItemModel(mesh); ui.geometryTree->setModel(geomModel); renderWidget->displayMesh(mesh); connect(ui.geometryTree->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(geometryTreeItemSelected(const QModelIndex&, const QModelIndex&))); connect(geomModel, SIGNAL(geometryDisplayStateChanged(DFFGeometry*, bool)), this, SLOT(geometryDisplayStateChanged(DFFGeometry*, bool))); connect(geomModel, SIGNAL(geometryPartDisplayStateChanged(DFFGeometryPart*, bool)), this, SLOT(geometryPartDisplayStateChanged(DFFGeometryPart*, bool))); // Search for the mesh texture char* meshName = new char[file.getPath().getFileName().length() + 1]; strtolower(meshName, file.getPath().getFileName().get()); meshName[strlen(meshName)-4] = '\0'; SystemQuery query("FindMeshTextures"); query["meshName"] = meshName; QList<SystemQueryResult> results = sys->sendSystemQuery(query); QStringList texes; for (unsigned int i = 0 ; i < results.size() ; i++) { SystemQueryResult res = results[i]; QStringList subTexes = res["textures"].toStringList(); texes.append(subTexes); } for (QStringList::iterator it = texes.begin() ; it != texes.end() ; it++) { QString tex = *it; ui.texSourceBox->addItem(tex, false); } if (texes.size() > 0) texSrcChanged(0); delete[] meshName; } }