//
#include "PartSet_SketcherReentrantMgr.h"
+#include "PartSet_ExternalObjectsMgr.h"
#include "PartSet_Module.h"
#include "PartSet_SketcherMgr.h"
#include "PartSet_WidgetPoint2d.h"
#include <ModuleBase_OperationDescription.h>
#include "ModuleBase_ToolBox.h"
#include "ModuleBase_ISelection.h"
-#include "ModuleBase_ISelectionActivate.h"
#include <SketchPlugin_Feature.h>
#include <SketchPlugin_Line.h>
myRestartingMode(RM_None),
myIsFlagsBlocked(false),
myIsInternalEditOperation(false),
- myInternalActiveWidget(0),
myNoMoreWidgetsAttribute("")
{
}
{
}
-ModuleBase_ModelWidget* PartSet_SketcherReentrantMgr::internalActiveWidget() const
-{
- ModuleBase_ModelWidget* aWidget = 0;
- if (!isActiveMgr())
- return aWidget;
-
- ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
- if (anOperation) {
- ModuleBase_IPropertyPanel* aPanel = anOperation->propertyPanel();
- if (aPanel) { // check for case when the operation is started but property panel is not filled
- ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
- if (myIsInternalEditOperation && (!anActiveWidget || !anActiveWidget->isViewerSelector()))
- aWidget = myInternalActiveWidget;
- }
- }
- return aWidget;
-}
-
bool PartSet_SketcherReentrantMgr::isInternalEditActive() const
{
return myIsInternalEditOperation;
myClickedSketchPoint = PartSet_Tools::getPnt2d(theEvent, theWindow,
module()->sketchMgr()->activeSketch());
+ FeaturePtr anExternalCreatedFeature;
if (!aPreSelected.empty()) {
ModuleBase_ViewerPrsPtr aValue = aPreSelected.first();
module()->getGeomSelection(aValue, mySelectedObject, mySelectedAttribute);
if (aPointWidget) {
GeomShapePtr aShape;
aPointWidget->getGeomSelection_(aValue, mySelectedObject, aShape);
+ ObjectPtr anExternalObject =
+ aPointWidget->getExternalObjectMgr()->getExternalObjectValidated();
+ // if external object is during reentrant operation and is used as a parameter of feature
+ // it should be removed after the operation is restarted. (Circle feature, Projection)
+ if (anExternalObject.get())
+ anExternalCreatedFeature = ModelAPI_Feature::feature(anExternalObject);
}
}
restartOperation();
+ // remove created external feature
+ if (anExternalCreatedFeature.get()) {
+ QObjectPtrList anObjects;
+ anObjects.append(anExternalCreatedFeature);
+ workshop()->deleteFeatures(anObjects);
+ }
+
myClickedSketchPoint = std::shared_ptr<GeomAPI_Pnt2d>();
mySelectedObject = ObjectPtr();
mySelectedAttribute = AttributePtr();
ModuleBase_ModelWidget* aFirstWidget = ModuleBase_IPropertyPanel::findFirstAcceptingValueWidget
(aWidgets);
if (aFirstWidget)
- myInternalActiveWidget = aFirstWidget;
+ setInternalActiveWidget(aFirstWidget);
}
}
std::cout << "PartSet_SketcherReentrantMgr::deleteInternalFeature: "
<< myInternalFeature->data()->name() << std::endl;
#endif
- if (myInternalActiveWidget)
- myInternalActiveWidget = 0;
+ setInternalActiveWidget(0);
delete myInternalWidget;
myInternalWidget = 0;
{
return dynamic_cast<PartSet_Module*>(myWorkshop->module());
}
+
+void PartSet_SketcherReentrantMgr::setInternalActiveWidget(ModuleBase_ModelWidget* theWidget)
+{
+ ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
+ (myWorkshop->currentOperation());
+ if (aFOperation)
+ {
+ XGUI_PropertyPanel* aPropertyPanel = dynamic_cast<XGUI_PropertyPanel*>
+ (aFOperation->propertyPanel());
+ if (aPropertyPanel)
+ aPropertyPanel->setInternalActiveWidget(theWidget);
+ }
+}