diff --git a/src/Mod/Surface/App/FeatureSurface.cpp b/src/Mod/Surface/App/FeatureSurface.cpp index 0796f2a714..9775897f67 100644 --- a/src/Mod/Surface/App/FeatureSurface.cpp +++ b/src/Mod/Surface/App/FeatureSurface.cpp @@ -148,11 +148,11 @@ void ShapeValidator::checkAndAdd(const Part::TopoShape &ts, const char *subName, } -PROPERTY_SOURCE(Surface::SurfaceFeature, Part::Feature) +PROPERTY_SOURCE(Surface::SurfaceFeature, Part::Spline) const char* SurfaceFeature::FillTypeEnums[] = {"Stretched", "Coons", "Curved", NULL}; -SurfaceFeature::SurfaceFeature(): Feature() +SurfaceFeature::SurfaceFeature(): Spline() { ADD_PROPERTY(FillType, ((long)0)); ADD_PROPERTY(BoundaryList, (0, "Dummy")); diff --git a/src/Mod/Surface/App/FeatureSurface.h b/src/Mod/Surface/App/FeatureSurface.h index a6e7023a68..e7f8eba1d1 100644 --- a/src/Mod/Surface/App/FeatureSurface.h +++ b/src/Mod/Surface/App/FeatureSurface.h @@ -31,7 +31,7 @@ #include #include #include -#include +#include namespace Surface { @@ -61,7 +61,7 @@ public: } }; -class SurfaceFeature : public Part::Feature +class SurfaceFeature : public Part::Spline { PROPERTY_HEADER(Surface::SurfaceFeature); diff --git a/src/Mod/Surface/Gui/SurfaceFilling.cpp b/src/Mod/Surface/Gui/SurfaceFilling.cpp index 235ad81203..bb832e0da3 100644 --- a/src/Mod/Surface/Gui/SurfaceFilling.cpp +++ b/src/Mod/Surface/Gui/SurfaceFilling.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -133,6 +132,7 @@ SurfaceFilling::SurfaceFilling(ViewProviderSurfaceFeature* vp, Surface::SurfaceF ui->setupUi(this); selectionMode = None; this->vp = vp; + checkCommand = true; setEditedObject(obj); // Create context menu @@ -208,21 +208,22 @@ void SurfaceFilling::changeEvent(QEvent *e) void SurfaceFilling::open() { - if (!Gui::Command::hasPendingCommand()) { + if (checkCommand && !Gui::Command::hasPendingCommand()) { std::string Msg("Edit "); Msg += editedObject->Label.getValue(); Gui::Command::openCommand(Msg.c_str()); + checkCommand = false; } } void SurfaceFilling::slotUndoDocument(const Gui::Document&) { - //Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()"); + checkCommand = true; } void SurfaceFilling::slotRedoDocument(const Gui::Document&) { - //Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()"); + checkCommand = true; } bool SurfaceFilling::accept() @@ -271,33 +272,25 @@ bool SurfaceFilling::reject() void SurfaceFilling::on_fillType_stretch_clicked() { - GeomFill_FillingStyle curtype = static_cast(editedObject->FillType.getValue()); - if (curtype != GeomFill_StretchStyle) { - editedObject->FillType.setValue(static_cast(GeomFill_StretchStyle)); - editedObject->recomputeFeature(); - if (!editedObject->isValid()) { - Base::Console().Error("Surface filling: %s", editedObject->getStatusString()); - } - } + changeFillType(GeomFill_StretchStyle); } void SurfaceFilling::on_fillType_coons_clicked() { - GeomFill_FillingStyle curtype = static_cast(editedObject->FillType.getValue()); - if (curtype != GeomFill_CoonsStyle) { - editedObject->FillType.setValue(static_cast(GeomFill_CoonsStyle)); - editedObject->recomputeFeature(); - if (!editedObject->isValid()) { - Base::Console().Error("Surface filling: %s", editedObject->getStatusString()); - } - } + changeFillType(GeomFill_CoonsStyle); } void SurfaceFilling::on_fillType_curved_clicked() +{ + changeFillType(GeomFill_CurvedStyle); +} + +void SurfaceFilling::changeFillType(GeomFill_FillingStyle fillType) { GeomFill_FillingStyle curtype = static_cast(editedObject->FillType.getValue()); - if (curtype != GeomFill_CurvedStyle) { - editedObject->FillType.setValue(static_cast(GeomFill_CurvedStyle)); + if (curtype != fillType) { + open(); + editedObject->FillType.setValue(static_cast(fillType)); editedObject->recomputeFeature(); if (!editedObject->isValid()) { Base::Console().Error("Surface filling: %s", editedObject->getStatusString()); @@ -323,6 +316,7 @@ void SurfaceFilling::onSelectionChanged(const Gui::SelectionChanges& msg) return; if (msg.Type == Gui::SelectionChanges::AddSelection) { + open(); if (selectionMode == Append) { QListWidgetItem* item = new QListWidgetItem(ui->listWidget); ui->listWidget->addItem(item); @@ -384,6 +378,7 @@ void SurfaceFilling::onDeleteEdge() int row = ui->listWidget->currentRow(); QListWidgetItem* item = ui->listWidget->item(row); if (item) { + open(); QList data; data = item->data(Qt::UserRole).toList(); ui->listWidget->takeItem(row); diff --git a/src/Mod/Surface/Gui/SurfaceFilling.h b/src/Mod/Surface/Gui/SurfaceFilling.h index 8cc399cf43..e6e6a4271f 100644 --- a/src/Mod/Surface/Gui/SurfaceFilling.h +++ b/src/Mod/Surface/Gui/SurfaceFilling.h @@ -30,6 +30,7 @@ #include #include #include +#include namespace SurfaceGui { @@ -75,6 +76,7 @@ protected: enum SelectionMode { None, Append, Remove }; SelectionMode selectionMode; Surface::SurfaceFeature* editedObject; + bool checkCommand; private: Ui_SurfaceFilling* ui; @@ -96,6 +98,7 @@ protected: virtual void slotUndoDocument(const Gui::Document& Doc); /** Notifies on redo */ virtual void slotRedoDocument(const Gui::Document& Doc); + void changeFillType(GeomFill_FillingStyle); private Q_SLOTS: void on_fillType_stretch_clicked();