#include <PartSet_WidgetPoint2d.h>
#include <PartSet_WidgetPoint2dDistance.h>
#include <PartSet_WidgetShapeSelector.h>
-#include <PartSet_WidgetConstraintShapeSelector.h>
-#include <PartSet_SketcherMgr.h>
+#include <PartSet_WidgetEditor.h>
+#include "PartSet_SketcherMgr.h"
+#include "PartSet_MenuMgr.h"
#include <ModuleBase_Operation.h>
#include <ModuleBase_IViewer.h>
#include <ModuleBase_IPropertyPanel.h>
#include <ModuleBase_WidgetEditor.h>
#include <ModuleBase_FilterFactory.h>
-#include <ModuleBase_FilterLinearEdge.h>
-#include <ModuleBase_FilterFace.h>
-#include <ModuleBase_FilterMulti.h>
-#include <ModuleBase_FilterCustom.h>
-#include <ModuleBase_FilterNoConsructionSubShapes.h>
#include <GeomValidators_Edge.h>
#include <GeomValidators_EdgeOrVertex.h>
#include <GeomValidators_Face.h>
#include <GeomValidators_ConstructionComposite.h>
-#include <PartSet_FilterSketchEntity.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_Events.h>
#include <SketchPlugin_Feature.h>
#include <SketchPlugin_Sketch.h>
#include <SketchPlugin_Line.h>
-//#include <SketchPlugin_Arc.h>
-//#include <SketchPlugin_Circle.h>
+#include <SketchPlugin_Arc.h>
+#include <SketchPlugin_Circle.h>
+#include <SketchPlugin_Point.h>
#include <SketchPlugin_ConstraintLength.h>
#include <SketchPlugin_ConstraintDistance.h>
#include <SketchPlugin_ConstraintParallel.h>
#include <Events_Loop.h>
#include <Config_PropManager.h>
+#include <Config_Keywords.h>
#include <StdSelect_TypeOfFace.hxx>
#include <TopoDS_Vertex.hxx>
connect(aViewer, SIGNAL(viewTransformed(int)),
SLOT(onViewTransformed(int)));
- createActions();
+ myMenuMgr = new PartSet_MenuMgr(this);
}
PartSet_Module::~PartSet_Module()
//Registering of validators
SessionPtr aMgr = ModelAPI_Session::get();
ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
- aFactory->registerValidator("PartSet_DistanceValidator", new PartSet_DistanceValidator);
- aFactory->registerValidator("PartSet_LengthValidator", new PartSet_LengthValidator);
- aFactory->registerValidator("PartSet_PerpendicularValidator", new PartSet_PerpendicularValidator);
- aFactory->registerValidator("PartSet_ParallelValidator", new PartSet_ParallelValidator);
- aFactory->registerValidator("PartSet_RadiusValidator", new PartSet_RadiusValidator);
- aFactory->registerValidator("PartSet_RigidValidator", new PartSet_RigidValidator);
+ aFactory->registerValidator("PartSet_DistanceSelection", new PartSet_DistanceSelection);
+ aFactory->registerValidator("PartSet_LengthSelection", new PartSet_LengthSelection);
+ aFactory->registerValidator("PartSet_PerpendicularSelection", new PartSet_PerpendicularSelection);
+ aFactory->registerValidator("PartSet_ParallelSelection", new PartSet_ParallelSelection);
+ aFactory->registerValidator("PartSet_RadiusSelection", new PartSet_RadiusSelection);
+ aFactory->registerValidator("PartSet_RigidSelection", new PartSet_RigidSelection);
+ aFactory->registerValidator("PartSet_CoincidentSelection", new PartSet_CoincidentSelection);
+ aFactory->registerValidator("PartSet_HVDirSelection", new PartSet_HVDirSelection);
+ aFactory->registerValidator("PartSet_TangentSelection", new PartSet_TangentSelection);
+ aFactory->registerValidator("PartSet_FilletSelection", new PartSet_FilletSelection);
+
aFactory->registerValidator("PartSet_DifferentObjects", new PartSet_DifferentObjectsValidator);
aFactory->registerValidator("PartSet_DifferentShapes", new ModelAPI_ShapeValidator);
//Registering of selection filters
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
ModuleBase_FilterFactory* aFactory = aConnector->selectionFilters();
-
- //aFactory->registerFilter("EdgeFilter", new ModuleBase_FilterLinearEdge);
- //aFactory->registerFilter("FaceFilter", new ModuleBase_FilterFace);
- //aFactory->registerFilter("MultiFilter", new ModuleBase_FilterMulti);
- //Handle(SelectMgr_Filter) aSelectFilter = new ModuleBase_FilterNoConsructionSubShapes(workshop());
- //aFactory->registerFilter("NoConstructionSubShapesFilter",
- // new ModuleBase_FilterCustom(aSelectFilter));
- //Handle(SelectMgr_Filter) aSelectFilter = new PartSet_FilterSketchEntity(workshop());
- //aFactory->registerFilter("SketchEntityFilter", new ModuleBase_FilterCustom(aSelectFilter));
}
void PartSet_Module::registerProperties()
bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const
{
- // the display should be possible almost always, with exception of some specific cases
+ // the sketch manager put the restriction to the objects display
+ return mySketchMgr->canDisplayObject(theObject);
+}
- bool aCanDisplay = true;
- if (mySketchMgr->activeSketch()) {
- aCanDisplay = mySketchMgr->canDisplayObject(theObject);
- }
- return aCanDisplay;
+bool PartSet_Module::addViewerItems(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
+{
+ return myMenuMgr->addViewerItems(theMenu, theStdActions);
}
-void PartSet_Module::addViewerItems(QMenu* theMenu) const
+bool PartSet_Module::isMouseOverWindow()
{
- ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
- if (!PartSet_SketcherMgr::isSketchOperation(anOperation) &&
- !PartSet_SketcherMgr::isNestedSketchOperation(anOperation))
- return;
-
- ModuleBase_ISelection* aSelection = myWorkshop->selection();
- QObjectPtrList aObjects = aSelection->selectedPresentations();
- if (aObjects.size() > 0) {
- bool hasFeature = false;
- foreach(ObjectPtr aObject, aObjects)
- {
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
- if (aFeature.get() != NULL) {
- hasFeature = true;
- }
- }
- if (hasFeature) {
- XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
- XGUI_Workshop* aWorkshop = aConnector->workshop();
- QAction* anAction = aWorkshop->contextMenuMgr()->action("DELETE_CMD");
- theMenu->addAction(anAction);
- }
- }
- bool isAuxiliary;
- if (mySketchMgr->canSetAuxiliary(isAuxiliary)) {
- QAction* anAction = action("AUXILIARY_CMD");
- theMenu->addAction(anAction);
- anAction->setChecked(isAuxiliary);
- }
+ return mySketchMgr->isMouseOverWindow();
}
void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
XGUI_Workshop* aWorkshop = aConnector->workshop();
ModuleBase_ModelWidget* aWgt = NULL;
if (theType == "sketch-start-label") {
- PartSet_WidgetSketchLabel* aLabelWgt = new PartSet_WidgetSketchLabel(theParent, theWidgetApi, theParentId);
+ PartSet_WidgetSketchLabel* aLabelWgt = new PartSet_WidgetSketchLabel(theParent,
+ theWidgetApi, theParentId, mySketchMgr->isConstraintsShown());
aLabelWgt->setWorkshop(aWorkshop);
connect(aLabelWgt, SIGNAL(planeSelected(const std::shared_ptr<GeomAPI_Pln>&)),
mySketchMgr, SLOT(onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>&)));
+ connect(aLabelWgt, SIGNAL(showConstraintToggled(bool)),
+ mySketchMgr, SLOT(onShowConstraintsToggle(bool)));
aWgt = aLabelWgt;
} else if (theType == "sketch-2dpoint_selector") {
PartSet_WidgetPoint2D* aPointWgt = new PartSet_WidgetPoint2D(theParent, theWidgetApi, theParentId);
new PartSet_WidgetShapeSelector(theParent, workshop(), theWidgetApi, theParentId);
aShapeSelectorWgt->setSketcher(mySketchMgr->activeSketch());
aWgt = aShapeSelectorWgt;
- } if (theType == "sketch_constraint_shape_selector") {
- PartSet_WidgetConstraintShapeSelector* aConstraintShapeSelectorWgt =
- new PartSet_WidgetConstraintShapeSelector(theParent, workshop(), theWidgetApi, theParentId);
- aConstraintShapeSelectorWgt->setSketcher(mySketchMgr->activeSketch());
- aWgt = aConstraintShapeSelectorWgt;
- }
+ } if (theType == WDG_DOUBLEVALUE_EDITOR) {
+ aWgt = new PartSet_WidgetEditor(theParent, workshop(), theWidgetApi, theParentId);
+ }
return aWgt;
}
-void PartSet_Module::createActions()
-{
- QAction* anAction;
-
- anAction = new QAction(tr("Auxiliary"), this);
- anAction->setCheckable(true);
- addAction("AUXILIARY_CMD", anAction);
-}
-
-QAction* PartSet_Module::action(const QString& theId) const
-{
- if (myActions.contains(theId))
- return myActions[theId];
- return 0;
-}
-
-void PartSet_Module::addAction(const QString& theId, QAction* theAction)
-{
- if (myActions.contains(theId))
- qCritical("A command with Id = '%s' already defined!", qPrintable(theId));
- theAction->setData(theId);
- connect(theAction, SIGNAL(triggered(bool)), this, SLOT(onAction(bool)));
- myActions[theId] = theAction;
-}
-
-void PartSet_Module::onAction(bool isChecked)
-{
- QAction* aAction = static_cast<QAction*>(sender());
- QString anId = aAction->data().toString();
-
- if (anId == "AUXILIARY_CMD") {
- mySketchMgr->setAuxiliary(isChecked);
- }
-}
bool PartSet_Module::deleteObjects()
{
+ // 1. check whether the delete should be processed in the module
ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation),
isNestedOp = PartSet_SketcherMgr::isNestedSketchOperation(anOperation);
if (!isSketchOp && !isNestedOp)
return false;
- // sketch feature should be skipped, only sub-features can be removed
- // when sketch operation is active
- CompositeFeaturePtr aSketch = mySketchMgr->activeSketch();
-
+ // 2. find selected presentations
// selected objects should be collected before the current operation abort because
// the abort leads to selection lost on constraint objects. It can be corrected after #386 issue
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
XGUI_Workshop* aWorkshop = aConnector->workshop();
- ModuleBase_ISelection* aSel = aConnector->selection();
+ ModuleBase_ISelection* aSel = workshop()->selection();
QObjectPtrList aSelectedObj = aSel->selectedPresentations();
-
// if there are no selected objects in the viewer, that means that the selection in another
// place cased this method. It is necessary to return the false value to understande in above
// method that delete is not processed
if (isNestedOp)
anOperation->abort();
- std::set<FeaturePtr> aRefFeatures;
- foreach (ObjectPtr aObj, aSelectedObj)
- {
- //ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
- //if (aPart) {
- // TODO: check for what there is this condition. It is placed here historicaly because
- // ther is this condition during remove features.
- //} else {
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
- if (aFeature.get() != NULL) {
- aObj->document()->refsToFeature(aFeature, aRefFeatures, false);
- }
- //}
- }
-
+ // 3. start operation
QString aDescription = aWorkshop->contextMenuMgr()->action("DELETE_CMD")->text();
- /**
- // according to #355 feature, it is not necessary to inform about dependencies during
- // sketch delete operation
- //
- if (!aRefFeatures.empty()) {
- QStringList aRefNames;
- std::set<FeaturePtr>::const_iterator anIt = aRefFeatures.begin(),
- aLast = aRefFeatures.end();
- for (; anIt != aLast; anIt++) {
- FeaturePtr aFeature = (*anIt);
- if (aFeature == aSketch)
- continue;
- aRefNames.append((*anIt)->name().c_str());
- }
- if (!aRefNames.empty()) {
- QString aNames = aRefNames.join(", ");
- aDescription += aNames.prepend(" ");
-
- QMainWindow* aDesktop = aWorkshop->desktop();
- QMessageBox::StandardButton aRes = QMessageBox::warning(
- aDesktop, tr("Delete features"),
- QString(tr("Selected features are used in the following features: %1.\
- These features will be deleted also. Would you like to continue?")).arg(aNames),
- QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
- if (aRes != QMessageBox::Yes)
- return;
- }
- }*/
-
SessionPtr aMgr = ModelAPI_Session::get();
aMgr->startOperation(aDescription.toStdString());
- std::set<FeaturePtr>::const_iterator anIt = aRefFeatures.begin(),
- aLast = aRefFeatures.end();
- for (; anIt != aLast; anIt++) {
- FeaturePtr aRefFeature = (*anIt);
- if (aRefFeature == aSketch)
- continue;
- aRefFeature->document()->removeFeature(aRefFeature);
- }
- foreach (ObjectPtr aObj, aSelectedObj)
- {
- DocumentPtr aDoc = aObj->document();
- //ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
- //if (aPart) {
- // if (aDoc == aMgr->activeDocument()) {
- // aDoc->close();
- // }
- //} else {
- //FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
- if (aFeature.get() != NULL) {
- aDoc->removeFeature(aFeature);
- }
- //}
- }
+ // 4. delete features
+ // sketch feature should be skipped, only sub-features can be removed
+ // when sketch operation is active
+ std::set<FeaturePtr> anIgnoredFeatures;
+ anIgnoredFeatures.insert(mySketchMgr->activeSketch());
+ aWorkshop->deleteFeatures(aSelectedObj, anIgnoredFeatures);
+
+ // 5. stop operation
aWorkshop->displayer()->updateViewer();
- //myDisplayer->updateViewer();
aMgr->finishOperation();
return true;
XGUI_Displayer* aDisplayer = aWorkshop->displayer();
Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
- double aLen = aView->Convert(25);
+ double aLen = aView->Convert(15);
SketcherPrs_Tools::setArrowSize(aLen);
bool isModified = false;