1 // File: PartSet_OperationEditLine.h
2 // Created: 05 May 2014
3 // Author: Natalia ERMOLAEVA
5 #include <PartSet_OperationEditLine.h>
6 #include <PartSet_Tools.h>
8 #include <XGUI_ViewerPrs.h>
10 #include <SketchPlugin_Feature.h>
11 #include <GeomDataAPI_Point2D.h>
12 #include <ModelAPI_Data.h>
13 #include <ModelAPI_Document.h>
15 #include <SketchPlugin_Line.h>
17 #include <V3d_View.hxx>
23 #include <QMouseEvent>
27 PartSet_OperationEditLine::PartSet_OperationEditLine(const QString& theId,
29 boost::shared_ptr<ModelAPI_Feature> theFeature)
30 : PartSet_OperationSketchBase(theId, theParent), mySketch(theFeature)
34 PartSet_OperationEditLine::~PartSet_OperationEditLine()
38 bool PartSet_OperationEditLine::isGranted() const
43 std::list<int> PartSet_OperationEditLine::getSelectionModes(boost::shared_ptr<ModelAPI_Feature> theFeature) const
45 std::list<int> aModes;
46 aModes.push_back(TopAbs_VERTEX);
47 aModes.push_back(TopAbs_EDGE);
51 void PartSet_OperationEditLine::init(boost::shared_ptr<ModelAPI_Feature> theFeature)
53 setFeature(theFeature);
56 void PartSet_OperationEditLine::mousePressed(QMouseEvent* theEvent, Handle(V3d_View) theView)
58 if (!(theEvent->buttons() & Qt::LeftButton))
60 gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(theEvent->pos(), theView);
61 myCurPressed = aPoint;
64 void PartSet_OperationEditLine::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
66 if (!(theEvent->buttons() & Qt::LeftButton))
70 PartSet_Tools::ConvertTo2D(myCurPressed, mySketch, theView, aCurX, aCurY);
73 gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(theEvent->pos(), theView);
74 PartSet_Tools::ConvertTo2D(aPoint, mySketch, theView, aX, anY);
76 double aDeltaX = aX - aCurX;
77 double aDeltaY = anY - aCurY;
79 moveLinePoint(aDeltaX, aDeltaY, LINE_ATTR_START);
80 moveLinePoint(aDeltaX, aDeltaY, LINE_ATTR_END);
81 myCurPressed = aPoint;
84 void PartSet_OperationEditLine::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
85 const std::list<XGUI_ViewerPrs>& theSelected)
87 boost::shared_ptr<ModelAPI_Feature> aFeature;
88 if (!theSelected.empty())
89 aFeature = theSelected.front().feature();
91 if (aFeature == feature())
96 emit launchOperation(PartSet_OperationEditLine::Type(), aFeature);
99 void PartSet_OperationEditLine::startOperation()
101 // do nothing in order to do not create a new feature
102 emit multiSelectionEnabled(false);
105 void PartSet_OperationEditLine::stopOperation()
107 emit multiSelectionEnabled(true);
110 boost::shared_ptr<ModelAPI_Feature> PartSet_OperationEditLine::createFeature()
112 // do nothing in order to do not create a new feature
113 return boost::shared_ptr<ModelAPI_Feature>();
116 void PartSet_OperationEditLine::moveLinePoint(double theDeltaX, double theDeltaY,
117 const std::string& theAttribute)
119 boost::shared_ptr<ModelAPI_Data> aData = feature()->data();
120 boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
121 boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(theAttribute));
123 aPoint->setValue(aPoint->x() + theDeltaX, aPoint->y() + theDeltaY);