LAMPCAE/src/GeometryWidgets/dialogCreateCone.cpp

194 lines
5.2 KiB
C++

#include "dialogCreateCone.h"
#include "ui_dialogCreateCone.h"
#include "Geometry/geometrySet.h"
#include "geoPointWidget.h"
#include "GeometryCommand/GeoCommandList.h"
#include "GeometryCommand/GeoCommandCreateCone.h"
#include "Geometry/geometryParaCone.h"
#include <QMessageBox>
#include "PythonModule/PyAgent.h"
#include <math.h>
namespace GeometryWidget
{
CreateConeDialog::CreateConeDialog(GUI::MainWindow *m, MainWidget::PreWindow *p) : GeoDialogBase(m, p)
{
_ui = new Ui::CreateCone;
_ui->setupUi(this);
init();
connect(_ui->radioButtonUser, SIGNAL(toggled(bool)), this, SLOT(on_radioButtonUser()));
}
CreateConeDialog::CreateConeDialog(GUI::MainWindow *m, MainWidget::PreWindow *p, Geometry::GeometrySet *set) : GeoDialogBase(m, p)
{
_ui = new Ui::CreateCone;
_ui->setupUi(this);
_isEdit = true;
_editSet = set;
this->setWindowTitle("Edit Cone");
init();
connect(_ui->radioButtonUser, SIGNAL(toggled(bool)), this, SLOT(on_radioButtonUser()));
}
CreateConeDialog::~CreateConeDialog()
{
if (_ui != nullptr)
delete _ui;
}
// void CreateConeDialog::closeEvent(QCloseEvent *e)
// {
// QDialog::closeEvent(e);
// delete this;
// }
void CreateConeDialog::init()
{
_pw = new GeoPointWidget(_mainWindow, _preWindow);
_ui->verticalLayout->addWidget(_pw);
on_radioButtonUser();
this->translateButtonBox(_ui->buttonBox);
if (!_isEdit)
{
int id = Geometry::GeometrySet::getMaxID() + 1;
_ui->namelineEdit->setPlaceholderText(QString("Cone_%1").arg(id));
}
else
{
if (_editSet == nullptr)
return;
_ui->namelineEdit->setText(_editSet->getName());
_ui->namelineEdit->setEnabled(false);
Geometry::GeometryModelParaBase *pb = _editSet->getParameter();
Geometry::GeometryParaCone *p = dynamic_cast<Geometry::GeometryParaCone *>(pb);
if (p == nullptr)
return;
double loc[3] = {0.0}, radius1 = {0.0}, radius2 = {0.0}, length = {0.0}, dir[3] = {0.0};
p->getLocation(loc);
p->getRadius1(&radius1);
p->getRadius2(&radius2);
p->getLength(&length);
p->getDirection(dir);
_pw->setCoordinate(loc);
_ui->doubleSpinBoxR->setValue(radius1);
_ui->doubleSpinBoxR2->setValue(radius2);
_ui->doubleSpinBoxL->setValue(length);
if (dir[0] != 0 && dir[1] == 0 && dir[2] == 0)
{
_ui->radioButtonX->setChecked(true);
}
else if (dir[0] == 0 && dir[1] != 0 && dir[2] == 0)
{
_ui->radioButtonY->setChecked(true);
}
else if (dir[0] == 0 && dir[1] == 0 && dir[2] != 0)
{
_ui->radioButtonZ->setChecked(true);
}
else
{
_ui->radioButtonUser->setChecked(true);
_ui->doubleSpinBoxX->setVisible(true);
_ui->doubleSpinBoxY->setVisible(true);
_ui->doubleSpinBoxZ->setVisible(true);
_ui->doubleSpinBoxX->setValue(dir[0]);
_ui->doubleSpinBoxY->setValue(dir[1]);
_ui->doubleSpinBoxZ->setValue(dir[2]);
}
}
}
void CreateConeDialog::reject()
{
QDialog::reject();
this->close();
}
void CreateConeDialog::accept()
{
double corner[3] = {0.0};
bool ok = _pw->getCoordinate(corner);
QString name = _ui->namelineEdit->text();
if (name.isEmpty())
name = _ui->namelineEdit->placeholderText();
if (ok)
ok = !name.isEmpty();
double r = _ui->doubleSpinBoxR->value();
double r2 = _ui->doubleSpinBoxR2->value();
if (fabs(r - r2) < 1e-6)
{
QMessageBox::warning(this, tr("Warning"), tr("The two radii are equal!"));
return;
}
double l = _ui->doubleSpinBoxL->value();
if (ok && l < 1e-6)
ok = false;
if (!ok)
{
QMessageBox::warning(this, tr("Warning"), tr("Input Wrong !"));
return;
}
double dir[3] = {0.0};
if (_ui->radioButtonX->isChecked())
dir[0] = 1.0;
else if (_ui->radioButtonY->isChecked())
dir[1] = 1.0;
else if (_ui->radioButtonZ->isChecked())
dir[2] = 1.0;
else
{
dir[0] = _ui->doubleSpinBoxX->value();
dir[1] = _ui->doubleSpinBoxY->value();
dir[2] = _ui->doubleSpinBoxZ->value();
}
/*Command::GeoCommandCreateCone* command = new Command::GeoCommandCreateCone(_mainWindow, _preWindow);
command->setLocation(corner);
command->setAxis(dir);
command->setRadius(r, r2);
command->setLength(l);
command->setName(name);
if (_isEdit) command->setEditData(_editSet);
bool success = Command::GeoComandList::getInstance()->executeCommand(command);
if (!success)
{
QMessageBox::warning(this, tr("Warning"), tr("Create failed ! "));
return;
}*/
QStringList codes{};
codes += QString("cone = CAD.Cone()");
if (_isEdit)
codes += QString("cone.setEditID(%1)").arg(_editSet->getID());
else
codes += QString("cone.setName('%1')").arg(name);
codes += QString("cone.setLocation(%1,%2,%3)").arg(corner[0]).arg(corner[1]).arg(corner[2]);
codes += QString("cone.setRadius(%1,%2)").arg(r).arg(r2);
codes += QString("cone.setLength(%1)").arg(l);
codes += QString("cone.setAxis(%1,%2,%3)").arg(dir[0]).arg(dir[1]).arg(dir[2]);
if (_isEdit)
codes += QString("cone.edit()");
else
codes += QString("cone.create()");
_pyAgent->submit(codes);
QDialog::accept();
this->close();
}
void CreateConeDialog::on_radioButtonUser()
{
bool checked = _ui->radioButtonUser->isChecked();
_ui->doubleSpinBoxX->setVisible(checked);
_ui->doubleSpinBoxY->setVisible(checked);
_ui->doubleSpinBoxZ->setVisible(checked);
}
}