]> SALOME platform Git repositories - modules/shaper.git/blob - src/PartSet/PartSet_OperationSketchBase.cpp
Salome HOME
Provide selection synchronisation
[modules/shaper.git] / src / PartSet / PartSet_OperationSketchBase.cpp
1 // File:        PartSet_OperationSketchBase.cpp
2 // Created:     20 Apr 2014
3 // Author:      Natalia ERMOLAEVA
4
5 #include <PartSet_OperationSketchBase.h>
6 #include <PartSet_Tools.h>
7 #include <ModelAPI_ResultBody.h>
8
9 #include <SketchPlugin_Feature.h>
10 #include <V3d_View.hxx>
11 #include <AIS_Shape.hxx>
12 #include <AIS_DimensionSelectionMode.hxx>
13
14 #include <QKeyEvent>
15 #include <QMessageBox>
16 #include <QApplication>
17
18 #ifdef _DEBUG
19 #include <QDebug>
20 #endif
21
22 using namespace std;
23
24 PartSet_OperationSketchBase::PartSet_OperationSketchBase(const QString& theId,
25                                                              QObject* theParent)
26 : ModuleBase_Operation(theId, theParent)
27 {
28 }
29
30 PartSet_OperationSketchBase::~PartSet_OperationSketchBase()
31 {
32 }
33
34 boost::shared_ptr<GeomAPI_Shape> PartSet_OperationSketchBase::preview(
35                                       FeaturePtr theFeature)
36 {
37   boost::shared_ptr<SketchPlugin_Feature> aFeature = 
38                               boost::dynamic_pointer_cast<SketchPlugin_Feature>(theFeature);
39   if (aFeature) {
40     ResultPtr aRes = aFeature->firstResult();
41     ResultBodyPtr aBody = boost::dynamic_pointer_cast<ModelAPI_ResultBody>(aRes);
42     if (aBody)
43       return aBody->shape();
44   }
45   return boost::shared_ptr<GeomAPI_Shape>();
46 }
47
48 std::list<FeaturePtr> PartSet_OperationSketchBase::subFeatures() const
49 {
50   return std::list<FeaturePtr>();
51 }
52
53 std::list<int> PartSet_OperationSketchBase::getSelectionModes(ObjectPtr theFeature) const
54 {
55   std::list<int> aModes;
56   FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(theFeature);
57   if (aFeature) {
58     if (PartSet_Tools::isConstraintFeature(aFeature->getKind())) {
59         aModes.clear();
60         aModes.push_back(AIS_DSM_Text);
61         aModes.push_back(AIS_DSM_Line);
62         return aModes;
63     }
64   }
65   aModes.push_back(AIS_Shape::SelectionMode((TopAbs_ShapeEnum)TopAbs_VERTEX));
66   aModes.push_back(AIS_Shape::SelectionMode((TopAbs_ShapeEnum)TopAbs_EDGE));
67   return aModes;
68 }
69 FeaturePtr PartSet_OperationSketchBase::createFeature(const bool theFlushMessage)
70 {
71   FeaturePtr aFeature = ModuleBase_Operation::createFeature(theFlushMessage);
72   if (aFeature)
73     emit featureConstructed(aFeature, FM_Activation);
74   return aFeature;
75 }
76
77
78 void PartSet_OperationSketchBase::mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
79                                                const std::list<ModuleBase_ViewerPrs>& theSelected,
80                                                const std::list<ModuleBase_ViewerPrs>& theHighlighted)
81 {
82 }
83 void PartSet_OperationSketchBase::mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
84                                                 const std::list<ModuleBase_ViewerPrs>& theSelected,
85                                                 const std::list<ModuleBase_ViewerPrs>& theHighlighted)
86 {
87 }
88 void PartSet_OperationSketchBase::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
89 {
90 }
91 void PartSet_OperationSketchBase::mouseDoubleClick(QMouseEvent* theEvent, Handle_V3d_View theView,
92                                                    const std::list<ModuleBase_ViewerPrs>& theSelected,
93                                                    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
94 {
95 }
96
97 void PartSet_OperationSketchBase::keyReleased(const int theKey)
98 {
99   switch (theKey) {
100     case Qt::Key_Escape: {
101       bool toAbort = true;
102       if (isModified()) {
103         int anAnswer = QMessageBox::question(qApp->activeWindow(), tr("Cancel operation"),
104                                   tr("Operation %1 will be cancelled. Continue?").arg(id()),
105                                   QMessageBox::Yes, QMessageBox::No);
106         toAbort = (anAnswer == QMessageBox::Yes);
107       }
108       if (toAbort)
109         abort();
110     }
111     break;
112     default:
113     break;
114   }
115 }
116
117 void PartSet_OperationSketchBase::keyReleased(std::string theName, QKeyEvent* theEvent)
118 {
119   keyReleased(theEvent->key());
120 }
121
122 void PartSet_OperationSketchBase::restartOperation(const std::string& theType,
123                                                    ObjectPtr theFeature)
124 {
125   emit launchOperation(theType, theFeature);
126 }