| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <algorithm> |
| | #include <QMessageBox> |
| |
|
| |
|
| | #include <Gui/CommandT.h> |
| | #include <Gui/WaitCursor.h> |
| |
|
| | #include "FitBSplineCurve.h" |
| | #include "ui_FitBSplineCurve.h" |
| |
|
| |
|
| | using namespace ReenGui; |
| |
|
| | class FitBSplineCurveWidget::Private |
| | { |
| | public: |
| | Ui_FitBSplineCurve ui {}; |
| | App::DocumentObjectT obj {}; |
| | }; |
| |
|
| | |
| |
|
| | FitBSplineCurveWidget::FitBSplineCurveWidget(const App::DocumentObjectT& obj, QWidget* parent) |
| | : d(new Private()) |
| | { |
| | Q_UNUSED(parent); |
| | d->ui.setupUi(this); |
| | d->obj = obj; |
| |
|
| | |
| | connect(d->ui.checkBox, &QCheckBox::toggled, |
| | this, &FitBSplineCurveWidget::toggleParametrizationType); |
| | connect(d->ui.groupBoxSmooth, &QGroupBox::toggled, |
| | this, &FitBSplineCurveWidget::toggleSmoothing); |
| | |
| | } |
| |
|
| | FitBSplineCurveWidget::~FitBSplineCurveWidget() |
| | { |
| | delete d; |
| | } |
| |
|
| | void FitBSplineCurveWidget::toggleParametrizationType(bool on) |
| | { |
| | d->ui.paramType->setEnabled(on); |
| | if (on) { |
| | d->ui.groupBoxSmooth->setChecked(false); |
| | } |
| | } |
| |
|
| | void FitBSplineCurveWidget::toggleSmoothing(bool on) |
| | { |
| | if (on) { |
| | d->ui.checkBox->setChecked(false); |
| | d->ui.paramType->setEnabled(false); |
| | } |
| | } |
| |
|
| | bool FitBSplineCurveWidget::accept() |
| | { |
| | try { |
| | tryAccept(); |
| | } |
| | catch (const Base::Exception& e) { |
| | Gui::Command::abortCommand(); |
| | QMessageBox::warning(this, tr("Input error"), QString::fromLatin1(e.what())); |
| | return false; |
| | } |
| |
|
| | return true; |
| | } |
| |
|
| | void FitBSplineCurveWidget::tryAccept() |
| | { |
| | QString document = QString::fromStdString(d->obj.getDocumentPython()); |
| | QString object = QString::fromStdString(d->obj.getObjectPython()); |
| |
|
| | QStringList arguments; |
| | arguments.append(QStringLiteral("Points=getattr(%1, %1.getPropertyNameOfGeometry())").arg(object)); |
| | if (!d->ui.groupBoxSmooth->isChecked()) { |
| | arguments.append(QStringLiteral("MinDegree = %1").arg(d->ui.degreeMin->value())); |
| | } |
| | arguments.append(QStringLiteral("MaxDegree = %1").arg(d->ui.degreeMax->value())); |
| | arguments.append(QStringLiteral("Continuity = %1").arg(d->ui.continuity->currentIndex())); |
| | if (d->ui.checkBoxClosed->isChecked()) { |
| | arguments.append(QStringLiteral("Closed = True")); |
| | } |
| | else { |
| | arguments.append(QStringLiteral("Closed = False")); |
| | } |
| | if (d->ui.checkBox->isChecked()) { |
| | int index = d->ui.paramType->currentIndex(); |
| | arguments.append(QStringLiteral("ParametrizationType = %1").arg(index)); |
| | } |
| | if (d->ui.groupBoxSmooth->isChecked()) { |
| | arguments.append(QStringLiteral("Weight1 = %1").arg(d->ui.curveLength->value())); |
| | arguments.append(QStringLiteral("Weight2 = %1").arg(d->ui.curvature->value())); |
| | arguments.append(QStringLiteral("Weight3 = %1").arg(d->ui.torsion->value())); |
| | } |
| |
|
| | QString argument = arguments.join(QLatin1String(", ")); |
| | QString command = QStringLiteral( |
| | "%1.addObject(\"Part::Spline\", \"Spline\").Shape = " |
| | "ReverseEngineering.approxCurve(%2).toShape()" |
| | ) |
| | .arg(document, argument); |
| |
|
| | tryCommand(command); |
| | } |
| |
|
| | void FitBSplineCurveWidget::exeCommand(const QString& cmd) |
| | { |
| | Gui::WaitCursor wc; |
| | Gui::Command::addModule(Gui::Command::App, "ReverseEngineering"); |
| | Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Fit B-spline")); |
| | Gui::Command::runCommand(Gui::Command::Doc, cmd.toLatin1()); |
| | Gui::Command::commitCommand(); |
| | Gui::Command::updateActive(); |
| | } |
| |
|
| | void FitBSplineCurveWidget::tryCommand(const QString& cmd) |
| | { |
| | try { |
| | exeCommand(cmd); |
| | } |
| | catch (const Base::Exception& e) { |
| | Gui::Command::abortCommand(); |
| | e.reportException(); |
| | } |
| | } |
| |
|
| |
|
| | void FitBSplineCurveWidget::changeEvent(QEvent* e) |
| | { |
| | QWidget::changeEvent(e); |
| | if (e->type() == QEvent::LanguageChange) { |
| | d->ui.retranslateUi(this); |
| | } |
| | } |
| |
|
| |
|
| | |
| |
|
| | TaskFitBSplineCurve::TaskFitBSplineCurve(const App::DocumentObjectT& obj) |
| | : widget {new FitBSplineCurveWidget(obj)} |
| | { |
| | addTaskBox(widget); |
| | } |
| |
|
| | void TaskFitBSplineCurve::open() |
| | {} |
| |
|
| | bool TaskFitBSplineCurve::accept() |
| | { |
| | return widget->accept(); |
| | } |
| |
|
| | #include "moc_FitBSplineCurve.cpp" |
| |
|