]> SALOME platform Git repositories - modules/shaper.git/blob - src/PartSet/PartSet_OperationSketchBase.cpp
Salome HOME
Issue #90: Show constraints on sketcher edit
[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   aModes.push_back(AIS_DSM_Text);
68   aModes.push_back(AIS_DSM_Line);
69   return aModes;
70 }
71 FeaturePtr PartSet_OperationSketchBase::createFeature(const bool theFlushMessage)
72 {
73   ModuleBase_Operation::createFeature(theFlushMessage);
74   if (myFeature)
75     emit featureConstructed(myFeature, FM_Activation);
76   return myFeature;
77 }
78
79
80 void PartSet_OperationSketchBase::mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
81                                                const std::list<ModuleBase_ViewerPrs>& theSelected,
82                                                const std::list<ModuleBase_ViewerPrs>& theHighlighted)
83 {
84 }
85 void PartSet_OperationSketchBase::mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
86                                                 const std::list<ModuleBase_ViewerPrs>& theSelected,
87                                                 const std::list<ModuleBase_ViewerPrs>& theHighlighted)
88 {
89 }
90 void PartSet_OperationSketchBase::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
91 {
92 }
93 void PartSet_OperationSketchBase::mouseDoubleClick(QMouseEvent* theEvent, Handle_V3d_View theView,
94                                                    const std::list<ModuleBase_ViewerPrs>& theSelected,
95                                                    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
96 {
97 }
98
99 void PartSet_OperationSketchBase::keyReleased(const int theKey)
100 {
101   switch (theKey) {
102     case Qt::Key_Escape: {
103       bool toAbort = true;
104       if (isModified()) {
105         int anAnswer = QMessageBox::question(qApp->activeWindow(), tr("Cancel operation"),
106                                   tr("Operation %1 will be cancelled. Continue?").arg(id()),
107                                   QMessageBox::Yes, QMessageBox::No);
108         toAbort = (anAnswer == QMessageBox::Yes);
109       }
110       if (toAbort)
111         abort();
112     }
113     break;
114     default:
115     break;
116   }
117 }
118
119 void PartSet_OperationSketchBase::keyReleased(std::string theName, QKeyEvent* theEvent)
120 {
121   keyReleased(theEvent->key());
122 }
123
124 void PartSet_OperationSketchBase::restartOperation(const std::string& theType,
125                                                    ObjectPtr theFeature)
126 {
127   emit launchOperation(theType, theFeature);
128 }