#include <PartSet_OperationEditLine.h>
#include <PartSet_Tools.h>
+#include <XGUI_ViewerPrs.h>
+
#include <SketchPlugin_Feature.h>
#include <GeomDataAPI_Point2D.h>
#include <ModelAPI_Data.h>
if (!(theEvent->buttons() & Qt::LeftButton))
return;
gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(theEvent->pos(), theView);
- myCurPressed = aPoint;
+ myCurPoint.setPoint(aPoint);
}
-void PartSet_OperationEditLine::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationEditLine::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView,
+ const std::list<XGUI_ViewerPrs>& theSelected)
{
if (!(theEvent->buttons() & Qt::LeftButton))
return;
-
- double aCurX, aCurY;
- PartSet_Tools::ConvertTo2D(myCurPressed, mySketch, theView, aCurX, aCurY);
-
- double aX, anY;
gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(theEvent->pos(), theView);
- PartSet_Tools::ConvertTo2D(aPoint, mySketch, theView, aX, anY);
-
- double aDeltaX = aX - aCurX;
- double aDeltaY = anY - aCurY;
- moveLinePoint(aDeltaX, aDeltaY, LINE_ATTR_START);
- moveLinePoint(aDeltaX, aDeltaY, LINE_ATTR_END);
- myCurPressed = aPoint;
+ if (myCurPoint.myIsInitialized) {
+ double aCurX, aCurY;
+ PartSet_Tools::ConvertTo2D(myCurPoint.myPoint, mySketch, theView, aCurX, aCurY);
+
+ double aX, anY;
+ PartSet_Tools::ConvertTo2D(aPoint, mySketch, theView, aX, anY);
+
+ double aDeltaX = aX - aCurX;
+ double aDeltaY = anY - aCurY;
+
+ moveLinePoint(feature(), aDeltaX, aDeltaY, LINE_ATTR_START);
+ moveLinePoint(feature(), aDeltaX, aDeltaY, LINE_ATTR_END);
+
+ /*std::list<XGUI_ViewerPrs>::const_iterator anIt = theSelected.begin(), aLast = theSelected.end();
+ for (; anIt != aLast; anIt++) {
+ boost::shared_ptr<ModelAPI_Feature> aFeature = (*anIt).feature();
+ if (!aFeature)
+ continue;
+ moveLinePoint(aFeature, aDeltaX, aDeltaY, LINE_ATTR_START);
+ moveLinePoint(aFeature, aDeltaX, aDeltaY, LINE_ATTR_END);
+ }*/
+ }
+ myCurPoint.setPoint(aPoint);
}
-void PartSet_OperationEditLine::setSelected(boost::shared_ptr<ModelAPI_Feature> theFeature,
- const TopoDS_Shape& theShape)
+void PartSet_OperationEditLine::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
+ const std::list<XGUI_ViewerPrs>& theSelected)
{
- if (theFeature == feature())
+ boost::shared_ptr<ModelAPI_Feature> aFeature;
+ if (!theSelected.empty())
+ aFeature = theSelected.front().feature();
+
+ if (aFeature == feature())
return;
-
+
commit();
-
- if (theFeature)
- emit launchOperation(PartSet_OperationEditLine::Type(), theFeature);
+ if (aFeature)
+ emit launchOperation(PartSet_OperationEditLine::Type(), aFeature);
}
void PartSet_OperationEditLine::startOperation()
{
// do nothing in order to do not create a new feature
- emit multiSelectionEnabled(false);
+ emit selectionEnabled(false);
+ myCurPoint.clear();
}
void PartSet_OperationEditLine::stopOperation()
{
- emit multiSelectionEnabled(true);
+ emit selectionEnabled(true);
}
boost::shared_ptr<ModelAPI_Feature> PartSet_OperationEditLine::createFeature()
return boost::shared_ptr<ModelAPI_Feature>();
}
-void PartSet_OperationEditLine::moveLinePoint(double theDeltaX, double theDeltaY,
+void PartSet_OperationEditLine::moveLinePoint(boost::shared_ptr<ModelAPI_Feature> theFeature,
+ double theDeltaX, double theDeltaY,
const std::string& theAttribute)
{
- boost::shared_ptr<ModelAPI_Data> aData = feature()->data();
+ if (!theFeature)
+ return;
+
+ boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(theAttribute));