#include "ui_dialogMakeLoft.h" #include "MainWindow/MainWindow.h" #include "ModuleBase/ModuleType.h" #include "MainWidgets/preWindow.h" #include "GeometryCommand/GeoCommandList.h" #include "GeometryCommand/GeoCommandMakeLoft.h" #include #include #include #include #include #include #include "Geometry/geometrySet.h" #include "dialogMakeLoft.h" #include #include #include "PythonModule/PyAgent.h" #include "Geometry/geometryParaLoft.h" namespace GeometryWidget { CreateLoftDialog::CreateLoftDialog(GUI::MainWindow *m, MainWidget::PreWindow *p) : GeoDialogBase(m, p) { _ui = new Ui::CreateLoftDialog; _ui->setupUi(this); _ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); this->translateButtonBox(_ui->buttonBox); connect(_ui->tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(tableClicked(int, int))); } CreateLoftDialog::CreateLoftDialog(GUI::MainWindow *m, MainWidget::PreWindow *p, Geometry::GeometrySet *set) : GeoDialogBase(m, p) { _ui = new Ui::CreateLoftDialog; _ui->setupUi(this); _ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); this->translateButtonBox(_ui->buttonBox); connect(_ui->tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(tableClicked(int, int))); _isEdit = true; _editSet = set; init(); } void CreateLoftDialog::init() { if (_editSet == nullptr) return; Geometry::GeometryModelParaBase *bp = _editSet->getParameter(); Geometry::GeometryParaLoft *p = dynamic_cast(bp); if (p == nullptr) return; emit hideGeometry(_editSet); _allShapes = p->getShapeHash(); for (QMultiHash var : _allShapes) { QList setList = var.keys(); // int k = setList.size(); for (int i = 0; i < setList.size(); ++i) { QList edlist = var.values(setList[i]); Geometry::GeometrySet *set = setList.at(i); if (set == nullptr) return; for (int var : edlist) { emit highLightGeometryEdgeSig(set, var, true); } } } bool solid = p->getSloid(); _ui->solidCheckBox->setChecked(solid); updateTab(); } CreateLoftDialog::~CreateLoftDialog() { if (_ui != nullptr) delete _ui; } void CreateLoftDialog::shapeSlected(Geometry::GeometrySet *set, int index) { if (_tempShapes.contains(set, index)) { emit highLightGeometryEdgeSig(set, index, false); _tempShapes.remove(set, index); } else { emit highLightGeometryEdgeSig(set, index, true); _tempShapes.insert(set, index); } QString label = QString(tr("Selected TopEdge(%1)")).arg(_tempShapes.size()); _ui->topedgelabel->setText(label); } void CreateLoftDialog::on_addButton_clicked() { _allShapes.append(_tempShapes); QList setlist = _tempShapes.uniqueKeys(); for (int i = 0; i < setlist.size(); i++) { QList indexlist = _tempShapes.values(setlist[i]); for (int index : indexlist) { emit highLightGeometryEdgeSig(setlist[i], index, false); } } _tempShapes.clear(); QString label = QString(tr("Selected TopEdge(%1)")).arg(_tempShapes.size()); _ui->topedgelabel->setText(label); updateTab(); } void CreateLoftDialog::on_removeButton_clicked() { const int n = _allShapes.size(); if (n <= 0) return; for (int j = 0; j < _allShapes.size(); j++) { QList setlist = _allShapes[j].uniqueKeys(); for (int i = 0; i < setlist.size(); i++) { QList indexlist = _tempShapes.values(setlist[i]); for (int index : indexlist) { emit highLightGeometryEdgeSig(setlist[i], index, false); } } } _allShapes.removeLast(); updateTab(); } void CreateLoftDialog::on_geoSelectCurve_clicked() { emit setSelectMode(int(ModuleBase::GeometryCurve)); QList keys = _tempShapes.keys(); for (int i = 0; i < keys.size(); i++) { int index = _tempShapes.value(keys[i]); emit highLightGeometryEdgeSig(keys[i], index, true); } } void CreateLoftDialog::reject() { if (_isEdit) { if (_editSet == nullptr) return; emit showGeometry(_editSet); } QDialog::reject(); this->close(); } // void CreateLoftDialog::closeEvent(QCloseEvent *e) // { // QDialog::closeEvent(e); // delete this; // } void CreateLoftDialog::accept() { bool success = true; if (_allShapes.size() < 1) success = false; if (!success) { QMessageBox::warning(this, tr("Warning"), tr("Create failed ! ")); return; } bool isSolid = _ui->solidCheckBox->isChecked(); int id = Geometry::GeometrySet::getMaxID() + 1; QString name = (QString("Loft_%1").arg(id)); QStringList codes{}; codes += QString("loft = CAD.Loft()"); if (_allShapes.size() < 1) return; if (_isEdit) codes += QString("loft.setEditID(%1)").arg(_editSet->getID()); codes += QString("loft.setName('%1')").arg(name); QString soildstr; if (isSolid) soildstr = "Yes"; else soildstr = "No"; codes += QString("loft.isSolid('%1')").arg(soildstr); for (int i = 0; i < _allShapes.size(); i++) { QList strlist{}; QList sets = _allShapes[i].uniqueKeys(); QString sec{}; for (int j = 0; j < sets.size(); ++j) { QString *temp = new QString(); auto s = sets.at(j); int id = s->getID(); *temp = QString::number(id) + ":"; QList indexs = _allShapes[i].values(s); // int nmu = indexs.size(); for (int k = 0; k < indexs.size(); k++) { (*temp) += QString::number(indexs[k]); if (k < indexs.size() - 1) { (*temp).append(","); } else if (k == (indexs.size() - 1)) { (*temp).append(";"); } } strlist << temp; } for (int i = 0; i < strlist.size(); i++) { sec += strlist[i]; } codes += QString("loft.appendSection('%1')").arg(sec); } if (_isEdit) codes += QString("loft.edit()"); else codes += QString("loft.create()"); _pyAgent->submit(codes); /* Command::GeoCommandMakeLoft* command = new Command::GeoCommandMakeLoft(_mainWindow, _preWindow); command->setShapeList(_allShapes); command->isSolid(isSolid); command->setName(name); bool success = Command::GeoComandList::getInstance()->executeCommand(command); */ QDialog::accept(); this->close(); } void CreateLoftDialog::updateTab() { QTableWidget *tab = _ui->tableWidget; tab->setRowCount(0); const int nc = _allShapes.size(); tab->setRowCount(nc); for (int i = 0; i < nc; ++i) { QTableWidgetItem *item = new QTableWidgetItem(QString("Section_%1").arg(i + 1)); tab->setItem(i, 0, item); int n = _allShapes.at(i).size(); QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(n)); tab->setItem(i, 1, item1); } } void CreateLoftDialog::tableClicked(int row, int col) { Q_UNUSED(col); for (int j = 0; j < _allShapes.size(); j++) { QList setlist = _allShapes[j].uniqueKeys(); for (int i = 0; i < setlist.size(); i++) { QList indexlist = _tempShapes.values(setlist[i]); for (int index : indexlist) { emit highLightGeometryEdgeSig(setlist[i], index, false); } } } if (row >= _allShapes.size()) return; QMultiHash rowshape = _allShapes.at(row); QList setlist = rowshape.uniqueKeys(); for (int i = 0; i < setlist.size(); i++) { QList indexlist = _tempShapes.values(setlist[i]); for (int index : indexlist) { emit highLightGeometryEdgeSig(setlist[i], index, true); } } } }