diff --git a/src/ConfigOptions/MeshConfig.cpp b/src/ConfigOptions/MeshConfig.cpp index b11bfa7..1eebb4d 100644 --- a/src/ConfigOptions/MeshConfig.cpp +++ b/src/ConfigOptions/MeshConfig.cpp @@ -3,7 +3,7 @@ #include "Common/DebugLogger.h" #define MESHON true; #define MESHOFF false; -#define MESHIMPORT "cgns;msh;neu;stl;dat;vtk;inp" +#define MESHIMPORT "cgns;msh;neu;stl;dat;vtk;inp;obj" #define POINTCLOUDIMPORT "xyz;pcd;ply" #define MESHEXPORT "vtk;neu;stl" #define POINTCLOUDEXPORT "pcd;ply" diff --git a/src/MainWidgets/SelectNodeShow.cpp b/src/MainWidgets/SelectNodeShow.cpp new file mode 100644 index 0000000..dc79191 --- /dev/null +++ b/src/MainWidgets/SelectNodeShow.cpp @@ -0,0 +1,284 @@ +#include +#include "SelectNodeShow.h" +#include "ui_SelectNodeShow.h" +#include +#include +#include +#include +#include +#include "MeshData/meshSingleton.h" +#include "MeshData/meshKernal.h" +#include "preWindow.h" +#include "vtkMeshSelectTableModel.h" +#include "Settings/busAPI.h" // 获取高亮颜色 +#include "Settings/GraphOption.h" // 获取高亮颜色 +namespace MainWidget { + + SelectNodeShow::SelectNodeShow(PreWindow* preWindow,QWidget* parent) + : QDialog(parent) + , ui(new Ui::SelectNodeShow) + ,_preWindow(preWindow) + { + ui->setupUi(this); + init(); + + } + + SelectNodeShow::~SelectNodeShow() + { + delete ui; + } + + void SelectNodeShow::search() + { + on_btnSearch_clicked(); + } + + void SelectNodeShow::revert() + { + on_btnCancel_clicked(); + } + + void SelectNodeShow::submit() + { + on_btnSubmit_clicked(); + } + + bool SelectNodeShow::editable() + { + return true; + } + + void SelectNodeShow::init() + { + //m_editMode = false; + + // m_access = new AccessDB(nullptr, "Threshold"); + // m_access->initDB(); + + this->setAttribute(Qt::WA_StyledBackground); + + initTableView(); + } + + void SelectNodeShow::initTableView() + { + this->_model=new vtkMeshSelectTableModel(_preWindow,this); + this->_model->clear(); + this->ui->tableView->setModel(this->_model); + selectionModel = this->ui->tableView->selectionModel(); + connect(selectionModel,SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),this,SLOT(currentChanged(const QModelIndex&, const QModelIndex&))); + // m_sqlModel = new QSqlTableModel(this, m_access); + // + // m_sqlModel->setTable("XXX"); + // + // m_sqlModel->setEditStrategy(QSqlTableModel::OnManualSubmit); + // + // if (!m_sqlModel->select()) { + // qDebug() << "查询失败"; + // qDebug() << m_sqlModel->lastError(); + // return; + // } + // + // ui->tableView->setModel(m_sqlModel); + // + // ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection); + // ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); + // + // ui->tableView->setShowGrid(false); + // + // ui->tableView->verticalHeader()->setVisible(false); + // + // ui->tableView->setEditTriggers(QTableView::NoEditTriggers); + } + + bool SelectNodeShow::editMode() + { + return false; + } + + void SelectNodeShow::on_btnEdit_clicked() + { + // // TODO + // // 将其余按键状态置灰 + // // 将表格的编辑模式打开 + // m_editMode = true; + // + // ui->tableView->setEditTriggers(QAbstractItemView::DoubleClicked); + // + // ui->btnNew->setDisabled(true); + // ui->btnNew->setDisabled(true); + // ui->btnDelete->setDisabled(true); + // ui->btnCancel->setEnabled(true); + // ui->btnSubmit->setEnabled(true); + } + + void SelectNodeShow::on_btnNew_clicked() + { + // 删除指定行数 + QItemSelectionModel* selectionModel = this->ui->tableView->selectionModel(); + QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); + if (selectedIndexes.count() == 0) { + return; + } + QList rows; + for (int i = 0; i < selectedIndexes.count(); i++) { + rows.push_back(selectedIndexes[i].row()); + this->_model->setRemoveFlag(selectedIndexes[i].row(),false); + } + + ModuleBase::SelectModel _selectModel=this->_model->getSelectModel(); + if( _selectModel== ModuleBase::BoxMeshNode || _selectModel == ModuleBase::MeshNode||_selectModel==ModuleBase::BoxMeshSurfaceNode) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } else if(_selectModel == ModuleBase::BoxMeshCell || _selectModel == ModuleBase::MeshCell||_selectModel==ModuleBase::BoxMeshSurfaceCell) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } + _preWindow->reRender(); + this->ui->tableView->show(); + } + + void SelectNodeShow::on_btnSubmit_clicked() + { + // 更新items + QMultiHash selectItems = this->_model->getSelectItems(); + this->_preWindow->setSelectItems(selectItems,this->_model->getSelectModel()); + } + + void SelectNodeShow::on_btnCancel_clicked() + { + + } + + void SelectNodeShow::on_btnDelete_clicked() + { + // 删除指定行数 + QItemSelectionModel* selectionModel = this->ui->tableView->selectionModel(); + QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); + if (selectedIndexes.count() == 0) { + return; + } + QList rows; + for (int i = 0; i < selectedIndexes.count(); i++) { + rows.push_back(selectedIndexes[i].row()); + this->_model->setRemoveFlag(selectedIndexes[i].row(),true); + } + + ModuleBase::SelectModel _selectModel=this->_model->getSelectModel(); + if( _selectModel== ModuleBase::BoxMeshNode || _selectModel == ModuleBase::MeshNode||_selectModel==ModuleBase::BoxMeshSurfaceNode) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getMeshNodeColor()); + } else if(_selectModel == ModuleBase::BoxMeshCell || _selectModel == ModuleBase::MeshCell||_selectModel==ModuleBase::BoxMeshSurfaceCell) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getMeshFaceColor()); + } + _preWindow->reRender(); + this->ui->tableView->show(); + } + + void SelectNodeShow::on_btnSearch_clicked() + { + // m_sqlModel->setSort(0, Qt::AscendingOrder); + // + // int result = m_sqlModel->select(); + // if (!result) { + // qDebug() << u8"查询失败: " << m_sqlModel->lastError().text(); + // return; + // } + // + // ui->btnNew->setEnabled(true); + // ui->btnEdit->setEnabled(true); + // ui->btnDelete->setEnabled(true); + // ui->btnCancel->setDisabled(true); + // ui->btnSubmit->setDisabled(true); + // + // ui->tableView->scrollToTop(); + } + void SelectNodeShow::initSelectNodeShow(QMultiHash* selectItems,ModuleBase::SelectModel _selectModel) + { + this->_model->SetData(selectItems,_selectModel); + // + + if (this->_model->rowCount() > 1e4) { + this->ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); + }else{ + this->ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } + this->ui->tableView->show(); + + } + void SelectNodeShow::currentChanged(const QModelIndex& current, + const QModelIndex& previous) + { + if (current.isValid()) { + // 处理当前行的逻辑,比如更新界面或者执行其他操作 + this->_model->setCurrentRowIndex(current); + } + } + void SelectNodeShow::on_btnHightlightSelect_clicked() { + ModuleBase::SelectModel _selectModel=this->_model->getSelectModel(); + // 清除选中行 + QList deleterows; + QList highrows; + deleterows.clear(); + highrows.clear(); + for(int i=0;i_model->getRemoveFlag(selectRows[i])) { + deleterows.push_back(selectRows[i]); + } else { + highrows.push_back(selectRows[i]); + } + } + if( _selectModel== ModuleBase::BoxMeshNode || _selectModel == ModuleBase::MeshNode||_selectModel==ModuleBase::BoxMeshSurfaceNode) { + this->_model->HightlightRows(deleterows,Setting::BusAPI::instance()->getGraphOption()->getMeshNodeColor()); + this->_model->HightlightRows(highrows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } else if(_selectModel == ModuleBase::BoxMeshCell || _selectModel == ModuleBase::MeshCell||_selectModel==ModuleBase::BoxMeshSurfaceCell) { + this->_model->HightlightRows(deleterows,Setting::BusAPI::instance()->getGraphOption()->getMeshFaceColor()); + this->_model->HightlightRows(highrows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } + + // 删除指定行数 + QItemSelectionModel* selectionModel = this->ui->tableView->selectionModel(); + QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); + if (selectedIndexes.count() == 0) { + return; + } + QList rows; + for (int i = 0; i < selectedIndexes.count(); i++) { + rows.push_back(selectedIndexes[i].row()); + } + +// ModuleBase::SelectModel _selectModel=this->_model->getSelectModel(); + if( _selectModel== ModuleBase::BoxMeshNode || _selectModel == ModuleBase::MeshNode||_selectModel==ModuleBase::BoxMeshSurfaceNode) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getPreHighLightColor()); + } else if(_selectModel == ModuleBase::BoxMeshCell || _selectModel == ModuleBase::MeshCell||_selectModel==ModuleBase::BoxMeshSurfaceCell) { + this->_model->HightlightRows(rows,Setting::BusAPI::instance()->getGraphOption()->getPreHighLightColor()); + } + _preWindow->reRender(); + selectRows=rows; +// this->ui->tableView->show(); + } + void SelectNodeShow::on_btnShowSelect_clicked() { + QList deleterows; + QList highrows; + deleterows.clear(); + highrows.clear(); + // 针对所有行进行操作 + for(int i=0;i_model->rowCount();i++) { + if(this->_model->getRemoveFlag(i)) { + deleterows.push_back(i); + } else { + highrows.push_back(i); + } + } + ModuleBase::SelectModel _selectModel=this->_model->getSelectModel(); + if( _selectModel== ModuleBase::BoxMeshNode || _selectModel == ModuleBase::MeshNode||_selectModel==ModuleBase::BoxMeshSurfaceNode) { + this->_model->HightlightRows(deleterows,Setting::BusAPI::instance()->getGraphOption()->getMeshNodeColor()); + this->_model->HightlightRows(highrows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } else if(_selectModel == ModuleBase::BoxMeshCell || _selectModel == ModuleBase::MeshCell||_selectModel==ModuleBase::BoxMeshSurfaceCell) { + this->_model->HightlightRows(deleterows,Setting::BusAPI::instance()->getGraphOption()->getMeshFaceColor()); + this->_model->HightlightRows(highrows,Setting::BusAPI::instance()->getGraphOption()->getHighLightColor()); + } + + _preWindow->reRender(); + + + } +} \ No newline at end of file diff --git a/src/MainWidgets/SelectNodeShow.h b/src/MainWidgets/SelectNodeShow.h new file mode 100644 index 0000000..9b86d80 --- /dev/null +++ b/src/MainWidgets/SelectNodeShow.h @@ -0,0 +1,81 @@ +#ifndef THRESHOLDMANAGE_H +#define THRESHOLDMANAGE_H + +#include "mainWidgetsAPI.h" +#include +#include +#include +#include +#include +#include +#include "MeshData/meshSingleton.h" +#include "MeshData/meshKernal.h" +#include "preWindow.h" +#include "meshViewProvider.h" +#include "meshKernalViewObject.h" +#include "vtkMeshSelectTableModel.h" +#include "preWindow.h" +#include "MeshData/meshKernal.h" +#include "meshViewProvider.h" +#include "meshKernalViewObject.h" +#include "MeshData/meshSet.h" + + + +namespace Ui { + class SelectNodeShow; +} + +namespace MainWidget { + class MAINWIDGETSAPI SelectNodeShow : public QDialog { + Q_OBJECT + + public: + explicit SelectNodeShow(PreWindow* preWindow,QWidget* parent = nullptr); + ~SelectNodeShow(); + + void search(); + + void revert(); + + void submit(); + + bool editable(); + + bool editMode(); + + void initSelectNodeShow(QMultiHash* selectItems,ModuleBase::SelectModel _selectModel); + + private: + void init(); + + void initTableView(); + + private slots: + void on_btnEdit_clicked(); + + void on_btnNew_clicked(); + + void on_btnSubmit_clicked(); + + void on_btnCancel_clicked(); + + void on_btnDelete_clicked(); + + void on_btnSearch_clicked(); + + void on_btnShowSelect_clicked(); + + void on_btnHightlightSelect_clicked(); + + void currentChanged(const QModelIndex& current, const QModelIndex& previous) ; + + private: + Ui::SelectNodeShow* ui; + vtkMeshSelectTableModel* _model; + PreWindow* _preWindow; + QItemSelectionModel *selectionModel; + QList selectRows; + }; +} // namespace MainWidget +#endif // THRESHOLDMANAGE_H diff --git a/src/MainWidgets/SelectNodeShow.ui b/src/MainWidgets/SelectNodeShow.ui new file mode 100644 index 0000000..e61065c --- /dev/null +++ b/src/MainWidgets/SelectNodeShow.ui @@ -0,0 +1,145 @@ + + + SelectNodeShow + + + + 0 + 0 + 840 + 782 + + + + Form + + + + + + + 0 + 0 + + + + + 16777215 + 50 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + + 提交 + + + false + + + + + + + + 0 + 0 + + + + + + + 删除 + + + false + + + + + + + + 0 + 0 + + + + + + + 新增 + + + false + + + + + + + 高亮选择 + + + + + + + 显示点集 + + + + + + + Qt::Horizontal + + + + 1598 + 20 + + + + + + + + + + + + + + + diff --git a/src/MainWidgets/meshKernalViewObject.cpp b/src/MainWidgets/meshKernalViewObject.cpp index 15105d4..42c67d6 100644 --- a/src/MainWidgets/meshKernalViewObject.cpp +++ b/src/MainWidgets/meshKernalViewObject.cpp @@ -33,6 +33,9 @@ #include #include #include + +#include + #ifdef LAMPCAE_HAS_OPENMP #include #endif @@ -336,24 +339,21 @@ namespace MainWidget { auto dataset = _kernal->getMeshData(); const int id = _kernal->getID(); // IDS (kernalid,pointId) // cell ID与显示隐藏状态 - vtkSmartPointer kcellid_index = - vtkSmartPointer::New(); + vtkSmartPointer kcellid_index =vtkSmartPointer::New(); kcellid_index->SetNumberOfComponents(2); // 设置 dimension kcellid_index->SetName("IDS"); const int ncell = dataset->GetNumberOfCells(); - for(int i = 0; i < ncell; ++i) + for(int i = 0; i < ncell; ++i){ kcellid_index->InsertNextTuple2(id, i); // 这里添加 网格id ,与 cell 序号 + } dataset->GetCellData()->AddArray(kcellid_index); - - vtkSmartPointer cstatesArray = - vtkSmartPointer::New(); + vtkSmartPointer cstatesArray =vtkSmartPointer::New(); cstatesArray->SetName("SHOW"); cstatesArray->SetNumberOfValues(ncell); cstatesArray->Fill(1); dataset->GetCellData()->AddArray(cstatesArray); - vtkSmartPointer metralArray = - vtkSmartPointer::New(); + vtkSmartPointer metralArray =vtkSmartPointer::New(); metralArray->SetName("MATERIAL"); metralArray->SetNumberOfValues(ncell); metralArray->Fill(-1); @@ -367,24 +367,22 @@ namespace MainWidget { // dataset->GetCellData()->AddArray(selectSateArray); // select // point ID与显示隐藏状态 - vtkSmartPointer kpointid_index = - vtkSmartPointer::New(); + vtkSmartPointer kpointid_index =vtkSmartPointer::New(); kpointid_index->SetNumberOfComponents(2); kpointid_index->SetName("IDS"); const int npoint = dataset->GetNumberOfPoints(); - for(int i = 0; i < npoint; ++i) + for(int i = 0; i < npoint; ++i){ kpointid_index->InsertNextTuple2(id, i); + } dataset->GetPointData()->AddArray(kpointid_index); - vtkSmartPointer pstatesArray = - vtkSmartPointer::New(); + vtkSmartPointer pstatesArray =vtkSmartPointer::New(); pstatesArray->SetName("SHOW"); pstatesArray->SetNumberOfValues(npoint); pstatesArray->Fill(1); dataset->GetPointData()->AddArray(pstatesArray); - vtkSmartPointer pmetralArray = - vtkSmartPointer::New(); + vtkSmartPointer pmetralArray =vtkSmartPointer::New(); pmetralArray->SetName("MATERIAL"); // 材料 pmetralArray->SetNumberOfValues(ncell); pmetralArray->Fill(-1); @@ -401,12 +399,42 @@ namespace MainWidget { void MeshKernalViewObj::init() { - vtkSmartPointer filter = vtkSmartPointer::New(); - filter->AddInputData(_kernal->getMeshData()); - filter->Update(); - _displayData->DeepCopy(filter->GetOutput()); // 深拷贝 + qDebug()<<"init start!!! "; + if(nullptr==_displayData){ + qDebug()<<"_displayData is nullptr!!!"; + }else{ + qDebug()<<"_displayData is not nullptr!!!"; + } - auto gp = Setting::BusAPI::instance()->getGraphOption(); + if(nullptr==_kernal->getMeshData()){ + qDebug()<<"_kernal->getMeshData() is nullptr!!!"; + }else{ + qDebug()<<"_kernal->getMeshData() is not nullptr!!!"; + } + vtkDataSet* tempData = _kernal->getMeshData(); + if(nullptr==tempData){ + qDebug()<<"tempData is nullptr!!!"; + }else{ + qDebug()<<"tempData is not nullptr!!!"; + } + qDebug()<<"point count: "<GetNumberOfPoints(); + qDebug()<<"cell count: "<GetNumberOfCells(); + + vtkSmartPointer geometryFilter = vtkSmartPointer::New(); + geometryFilter->SetInputData(tempData); + geometryFilter->Update(); + vtkSmartPointer filter = vtkSmartPointer::New(); + filter->AddInputData(geometryFilter->GetOutput());qDebug()<<"filter->AddInputData() start!!!"; + filter->Update();qDebug()<<"filter->Update() start!!!"; + vtkUnstructuredGrid* tempVtkUnGridDataset=filter->GetOutput(); + if(nullptr==tempVtkUnGridDataset){ + qDebug()<<"tempVtkunGridDataset is nullptr!!!"; + }else{ + qDebug()<<"tempVtkunGridDataset is not nullptr!!!"; + } + _displayData->DeepCopy(tempVtkUnGridDataset); // 深拷贝 + qDebug()<<"_displayData created!!!"; + Setting::GraphOption* gp = Setting::BusAPI::instance()->getGraphOption(); setCellColor(gp->getMeshFaceColor()); setPointColor(gp->getMeshNodeColor()); @@ -416,18 +444,20 @@ namespace MainWidget { pointMapper->SetScalarModeToUsePointData(); _actor[POINTACTOR]->SetMapper(pointMapper); _actor[POINTACTOR]->GetProperty()->SetRepresentationToPoints(); - + qDebug()<<"pointMapper created!!!"; vtkSmartPointer edgeMapper = vtkSmartPointer::New(); edgeMapper->SetInputData(_displayData); edgeMapper->SetScalarModeToUseCellData(); _actor[EDGEACTOR]->SetMapper(edgeMapper); _actor[EDGEACTOR]->GetProperty()->SetRepresentationToWireframe(); - + qDebug()<<"edgeMapper created!!!"; vtkSmartPointer faceMapper = vtkSmartPointer::New(); faceMapper->SetInputData(_displayData); faceMapper->SetScalarModeToUseCellData(); _actor[FACEACTOR]->SetMapper(faceMapper); _actor[FACEACTOR]->GetProperty()->SetRepresentationToSurface(); + qDebug()<<"faceMapper created!!!"; + qDebug()<<"init finished!!!"; } void MeshKernalViewObj::updateDisplayMember() diff --git a/src/MainWidgets/meshViewProvider.cpp b/src/MainWidgets/meshViewProvider.cpp index c13f7f2..513cc87 100644 --- a/src/MainWidgets/meshViewProvider.cpp +++ b/src/MainWidgets/meshViewProvider.cpp @@ -54,16 +54,22 @@ namespace MainWidget void MeshViewProvider::updateMeshActorSlot() { +// qDebug()<<"updateMeshActorSlot started!!"; const int nk = _meshData->getKernalCount(); +// qDebug()<<"updateMeshActorSlot kernel count "<getKernalAt(i); +// qDebug() << "find kernel idx "<< i; + MeshData::MeshKernal* Kernal = _meshData->getKernalAt(i); if (!_viewObjects.contains(Kernal)) { - auto vobj = new MeshKernalViewObj(Kernal); // 创建一个新的视图 + qDebug() << "_viewObjects do not contain "<getName(); + MeshKernalViewObj* vobj =nullptr; + vobj=new MeshKernalViewObj(Kernal); // 创建一个新的视图 + qDebug()<<"create MeshKernalViewObj!!"; _viewObjects.insert(Kernal, vobj); - updateDisplayModel(Kernal); - updateGraphOption(Kernal); + updateDisplayModel(Kernal); qDebug()<<"updateDisplayModel !!"; + updateGraphOption(Kernal);qDebug()<<"updateGraphOption !!"; vtkActor **ac = vobj->getActor(); _preWindow->AppendActor(ac[0]); _preWindow->AppendActor(ac[1]); @@ -77,6 +83,7 @@ namespace MainWidget continue; this->removeDisplay(ker); } + qDebug()<<"updateMeshActorSlot finished!!"; } void MeshViewProvider::highLighKernel(MeshData::MeshKernal *k) diff --git a/src/MainWindow/MainWindow.ui b/src/MainWindow/MainWindow.ui index 86ab562..bb654e1 100644 --- a/src/MainWindow/MainWindow.ui +++ b/src/MainWindow/MainWindow.ui @@ -557,17 +557,17 @@ - + - 目标与场景 + 制备仿真工作流 - + 森林目标 - + - 制备 + 森林目标制备 @@ -577,7 +577,7 @@ - + 测量与后向散射系数仿真 @@ -587,7 +587,7 @@ - + 成像仿真 @@ -598,25 +598,25 @@ - + - + - + - + 农作物目标 - + - 制备 + 农作物目标制备 - + 测量与后向散射系数仿真 @@ -626,7 +626,7 @@ - + 成像仿真 @@ -637,25 +637,25 @@ - + - + - + - + 草地目标 - + - 制备 + 草地目标制备 - + 测量与后向散射系数仿真 @@ -665,7 +665,7 @@ - + 成像仿真 @@ -676,25 +676,25 @@ - + - + - + - + 水体目标 - + - 制备 + 水体目标制备 - + 测量与后向散射系数仿真 @@ -704,7 +704,7 @@ - + 成像仿真 @@ -715,26 +715,26 @@ - + - + - + - + 土壤目标 - + - 制备 + 土壤目标制备 - + 测量与后向散射系数仿真 @@ -744,7 +744,7 @@ - + 成像仿真 @@ -755,26 +755,26 @@ - + - + - + - + 动态水体目标 - + - 制备 + 动态水体目标制备 - + 测量与后向散射系数仿真 @@ -784,7 +784,7 @@ - + 成像仿真 @@ -795,19 +795,19 @@ - + - + - + - + 道路目标 - + - 制备 + 道路目标制备 @@ -815,7 +815,7 @@ - + 测量与后向散射系数仿真 @@ -825,7 +825,7 @@ - + 成像仿真 @@ -836,26 +836,26 @@ - + - + - + - + 人工目标 - + - 制备 + 人工目标制备 - + 测量与后向散射系数仿真 @@ -865,7 +865,7 @@ - + 成像仿真 @@ -876,25 +876,25 @@ - + - + - + - + 几何校正场景 - + - 制备 + 几何校正场景制备 - + 测量与后向散射系数仿真 @@ -904,7 +904,7 @@ - + 成像仿真 @@ -915,25 +915,25 @@ - + - + - + - + 辐射定标场景 - + - 制备 + 辐射定标场景制备 - + 测量与后向散射系数仿真 @@ -943,7 +943,7 @@ - + 成像仿真 @@ -954,19 +954,19 @@ - + - + - + - + 陆地场景 - + - 制备 + 陆地场景制备 @@ -980,7 +980,7 @@ - + 测量与后向散射系数仿真 @@ -990,7 +990,7 @@ - + 成像仿真 @@ -1001,26 +1001,26 @@ - + - + - + - + 水体场景 - + - 制备 + 水体场景制备 - + 测量与后向散射系数仿真 @@ -1030,7 +1030,7 @@ - + 成像仿真 @@ -1041,19 +1041,19 @@ - + - + - + - + 植被场景 - + - 制备 + 植被场景制备 @@ -1067,7 +1067,7 @@ - + 测量与后向散射系数仿真 @@ -1077,7 +1077,7 @@ - + 成像仿真 @@ -1088,30 +1088,563 @@ - + - + - + - - - - - - - - + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 目标与场景制备子系统专用软件 + + + + 森林目标制备模块 + + + + + + + + + + + + 农作物目标制备模块 + + + + + + + + 草地目标制备模块 + + + + + + + + 水体目标制备模块 + + + + + + + + 土壤目标制备模块 + + + + + + + + + 动态水体目标制备模块 + + + + + + + + + 道路目标制备模块 + + + + + + + + + + 人工目标制备模块 + + + + + + + + + 几何校正场景制备模块 + + + + + + + + 辐射定标场景制备模块 + + + + + + + + 陆地场景制备模块 + + + + + + + + + + + + + + + + 水体场景制备模块 + + + + + + + + + 植被场景制备模块 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 特性测量子系统专用软件 + + + + 森林目标后向散射特性计算模块 + + + + + + + + + + + + 农作物目标后向散射特性计算模块 + + + + + + + + + + + + 草地目标测量与后向散射系数仿真 + + + + + + + + + + + + 水体目标后向散射特性计算模块 + + + + + + + + + + + 土壤目标后向散射特性计算模块 + + + + + + + + + + + + 动态水体目标后向散射特性计算模块 + + + + + + + + + + + + 道路目标后向散射特性计算模块 + + + + + + + + + + + + 人工目标后向散射特性计算模块 + + + + + + + + + + + + 几何校正场景后向散射特性计算模块 + + + + + + + + + + + + 辐射定标场景后向散射特性计算模块 + + + + + + + + + + + + 陆地场景后向散射特性计算模块 + + + + + + + + + + + + 水体场景后向散射特性计算模块 + + + + + + + + + + + + 植被场景后向散射特性计算模块 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 仿真分析子系统专用软件 + + + + 森林目标仿真分析模块 + + + + + + + + + + + 农作物目标仿真分析模块 + + + + + + + + + + + 草地目标仿真分析模块 + + + + + + + + + + + 水体目标仿真分析模块 + + + + + + + + + + + 土壤目标仿真分析模块 + + + + + + + + + + + 动态水体目标仿真分析模块 + + + + + + + + + + + 道路目标仿真分析模块 + + + + + + + + + + + 人工目标仿真分析模块 + + + + + + + + + + + 几何校正场景仿真分析模块 + + + + + + + + + + + 辐射定标场景仿真分析模块 + + + + + + + + + + + 陆地场景仿真分析模块 + + + + + + + + + + + 水体场景仿真分析模块 + + + + + + + + + + + 植被场景仿真分析模块 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + @@ -1274,7 +1807,7 @@ - 输出RCS + 后向散射特性计算并导出 @@ -2660,7 +3193,7 @@ - Attriution DB Show + 测量属性数据库管理 diff --git a/src/MeshData/meshKernal.h b/src/MeshData/meshKernal.h index cb569fc..8a551f3 100644 --- a/src/MeshData/meshKernal.h +++ b/src/MeshData/meshKernal.h @@ -83,7 +83,7 @@ namespace MeshData QString _path{}; int _pointIDOffset{ -1 }; //起始ID,终止ID=起始ID+mesh.pointnum-1 int _cellIDOffset{ -1 }; - vtkSmartPointer _mesh{}; // 网格颜色 + vtkSmartPointer _mesh{}; // 网格 int _dimension{ 3 }; QPair _specificColor; DataProperty::DataBase* _gmshSetting{};//gmsh网格划分的属性 diff --git a/src/PluginMeshDataExchange/VTKdataExchange.cpp b/src/PluginMeshDataExchange/VTKdataExchange.cpp index f54264c..d127c4d 100644 --- a/src/PluginMeshDataExchange/VTKdataExchange.cpp +++ b/src/PluginMeshDataExchange/VTKdataExchange.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "MainWindow/MainWindow.h" #include "MainWindow/SubWindowManager.h" #include "Settings/BusAPI.h" @@ -51,8 +52,14 @@ namespace MeshData { dataset = readSTL(); } else if(suffix == "dat") { dataset = readTecplot(); + }else if(suffix == "obj") { + dataset = readObj(); } + if(dataset != nullptr) { + qDebug()<<"point count: "<GetNumberOfPoints(); + qDebug()<<"cell count: "<GetNumberOfCells(); + // 网格面片三角化 // emit _mainwindow->printMessage(Common::Message::Normal, // u8"surface triangulation ....."); @@ -112,7 +119,8 @@ namespace MeshData { _stlReader->SetFileName(_fileName.toLocal8Bit().constData()); // _stlReader->SetMerging(true); _stlReader->Update(); - return _stlReader->GetOutput(); + vtkDataSet* result= _stlReader->GetOutput(); + return result; } vtkDataSet* VTKdataExchange::readTecplot() @@ -267,4 +275,18 @@ namespace MeshData { { return false; } + vtkDataSet* VTKdataExchange::readObj() + { + if(!_threadRuning){ + return nullptr; + } + + _objReader = vtkSmartPointer::New(); + _objReader->SetFileName(_fileName.toLocal8Bit().constData()); + // _stlReader->SetMerging(true); + _objReader->Update(); + vtkDataSet* result= _objReader->GetOutput(); + return result; + + } } // namespace MeshData diff --git a/src/PluginMeshDataExchange/VTKdataExchange.h b/src/PluginMeshDataExchange/VTKdataExchange.h index 2a73c3d..01f11a3 100644 --- a/src/PluginMeshDataExchange/VTKdataExchange.h +++ b/src/PluginMeshDataExchange/VTKdataExchange.h @@ -3,6 +3,7 @@ #include "meshDataExchangePlugin.h" #include +#include #include "MeshThreadBase.h" class vtkDataSet; @@ -28,6 +29,7 @@ namespace MeshData vtkDataSet* readVTK(); vtkDataSet* readSTL(); vtkDataSet* readTecplot(); + vtkDataSet* readObj(); bool writeVTK(); bool writeSTL(); @@ -38,6 +40,7 @@ namespace MeshData MeshData* _meshData{}; vtkSmartPointer _vtkReader{}; vtkSmartPointer _stlReader{}; + vtkSmartPointer _objReader{}; vtkSmartPointer _tecplotReader{}; MeshOperation _operation; int _modelId; diff --git a/src/PluginMeshDataExchange/dialogimportmodeldataset.cpp b/src/PluginMeshDataExchange/dialogimportmodeldataset.cpp index fa62c38..793d59e 100644 --- a/src/PluginMeshDataExchange/dialogimportmodeldataset.cpp +++ b/src/PluginMeshDataExchange/dialogimportmodeldataset.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace WBFZ { DialogImportModelDataset::DialogImportModelDataset(GUI::MainWindow* _mainwindow, QWidget* parent) @@ -155,7 +156,7 @@ namespace WBFZ { mapper->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); - this->ui->progressBar->setValue(60); + this->ui->progressBar->setValue(70); _render->AddActor(actor); // 更新渲染窗口 _render->ResetCamera(); diff --git a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp index 917135b..e05a044 100644 --- a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp +++ b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp @@ -63,6 +63,7 @@ namespace MeshData { IO::IOConfigure::RegisterMeshImporter("STL(*.stl)", VTK_DAT_STL_importMesh); IO::IOConfigure::RegisterMeshImporter("Tecplot(*.dat)", VTK_DAT_STL_importMesh); IO::IOConfigure::RegisterMeshImporter("VTK(*.vtk)", VTK_DAT_STL_importMesh); + IO::IOConfigure::RegisterMeshImporter("Alias Wavefront Object(*.obj)", VTK_DAT_OBJ_importMesh); IO::IOConfigure::RegisterMeshImporter("Abaqus(*.inp)", INPimportMesh); IO::IOConfigure::RegisterMeshImporter("CNTM(*.cntm)", CNTMimportMesh); IO::IOConfigure::RegisterMeshImporter("SU2(*.su2)", SU2importMesh); @@ -512,3 +513,12 @@ bool MESHDATAEXCHANGEPLUGINAPI PLYexportPCL(QString AbFileName, int modelId) emit tc->threadStart(); // emit MSHwriter->start(); return false; } +bool MESHDATAEXCHANGEPLUGINAPI VTK_DAT_OBJ_importMesh(QString AbFileName, int modelId) +{ + + auto VTK_DAT_OBJ_reader = new MeshData::VTKdataExchange( + AbFileName, MeshData::MESH_READ, MeshData::MeshDataExchangePlugin::getMWpt()); + ModuleBase::ThreadControl* tc = new ModuleBase::ThreadControl(VTK_DAT_OBJ_reader); + emit tc->threadStart(); // emit VTK_DAT_STL_reader->start(); + return false; +} diff --git a/src/PluginMeshDataExchange/meshDataExchangePlugin.h b/src/PluginMeshDataExchange/meshDataExchangePlugin.h index 6330121..ff84b63 100644 --- a/src/PluginMeshDataExchange/meshDataExchangePlugin.h +++ b/src/PluginMeshDataExchange/meshDataExchangePlugin.h @@ -62,6 +62,7 @@ extern "C" bool MESHDATAEXCHANGEPLUGINAPI FOAMimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI NEUimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI VTK_DAT_STL_importMesh(QString AbFileName, int modelId); + bool MESHDATAEXCHANGEPLUGINAPI VTK_DAT_OBJ_importMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI INPimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI CNTMimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI SU2importMesh(QString AbFileName, int modelId); diff --git a/src/PluginWBFZExchangePlugin/DialogPCLGPMesh.cpp b/src/PluginWBFZExchangePlugin/DialogPCLGPMesh.cpp index 5f4d682..a76c7db 100644 --- a/src/PluginWBFZExchangePlugin/DialogPCLGPMesh.cpp +++ b/src/PluginWBFZExchangePlugin/DialogPCLGPMesh.cpp @@ -310,50 +310,11 @@ namespace WBFZ { DebugInfo("cellToPointFilter \n"); // 获取过滤后的 vtkPolyData inpolyData = cellToPointFilter->GetOutput(); - - - - pcl::PointCloud::Ptr cloud_with_rgba(new pcl::PointCloud); - pcl::PointCloud::Ptr cloud_filtered( new pcl::PointCloud); - pcl::PointCloud::Ptr output( new pcl::PointCloud); // 输出结果 - pcl::PointCloud::Ptr cloud_with_normals(new pcl::PointCloud); // 法线向量 - - pcl::search::KdTree::Ptr tree2(new pcl::search::KdTree); - - pcl::io::vtkPolyDataToPointCloud(inpolyData, *cloud_with_rgba); - qDebug()<<"cloud_with_rgba "<size(); - PointCloudOperator::PointCloudCommon::NormalEstimation(cloud_with_rgba, cloud_with_normals); - tree2->setInputCloud(cloud_with_normals); // 构建搜索树 - - std::shared_ptr mesh (new pcl::PolygonMesh); // 非智能指针,需要释放 - - pcl::GreedyProjectionTriangulation gp3; // 定义三角化对象 - gp3.setSearchRadius(_SearchRadius); // 设置连接点之间的最大距离(即三角形的最大边长) - gp3.setMu(_Mu); // 设置被样本点搜索其临近点的最远距离,为了适应点云密度的变化 - gp3.setMaximumNearestNeighbors(_MaximumNearestNeighbors); // 设置样本点可搜索的邻域个数 - gp3.setMaximumSurfaceAngle(_MaximumSurfaceAngle); // 设置某点法线方向偏离样本点法线方向的最大角度 - gp3.setMinimumAngle(_MaximumAngle); // 设置三角化后得到三角形内角的最小角度 - gp3.setMaximumAngle(_MinimumAngle); // 设置三角化后得到三角形内角的最大角度 - gp3.setNormalConsistency(false); // 设置该参数保证法线朝向一致 - gp3.setInputCloud(cloud_with_normals); // 设置输入点云为有向点云 - gp3.setSearchMethod(tree2); // 设置搜索方式 - gp3.reconstruct(*mesh); // 重建提取三角化 -- 这里会导致程序崩溃,可能存在内存泄露, - - // DebugInfo("remesh over GP \n"); - // return false; - size_t pointcount = PointCloudOperator::PointCloudCommon::mesh2vtk(*mesh, polydata2); - - vtkSmartPointer geofilter=vtkSmartPointer::New(); - geofilter->SetInputData(polydata2); - geofilter->Update(); - polydata=geofilter->GetOutput(); - qDebug()<<"cellToPointFilter successfully!! wait for writing file dataset : "<GetNumberOfPoints()<<" "<GetNumberOfCells(); -// if(PointCloudOperator::PointCloudMeshOperator::GP(inpolyData,polydata,_SearchRadius,_Mu,_MaximumNearestNeighbors,_MaximumSurfaceAngle,_MaximumAngle,_MinimumAngle)){ -// -// }else{ -// return false; -// } + if(PointCloudOperator::PointCloudMeshOperator::GP(inpolyData,polydata,_SearchRadius,_Mu,_MaximumNearestNeighbors,_MaximumSurfaceAngle,_MaximumAngle,_MinimumAngle)){ + }else{ + return false; + } DebugInfo("PCLGPMeshAlg successfully!! wait for writing file dataset : %d \n",nullptr==polydata); if(nullptr!=polydata){