DrawSketchHandler: Cursor rework and preselect at point functionalities

This commit is contained in:
Abdullah Tahiri
2022-05-16 16:10:18 +02:00
parent 7842d78ff1
commit 12a2de626a
5 changed files with 132 additions and 65 deletions

View File

@@ -195,9 +195,9 @@ public:
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Line");
return QString::fromLatin1("Sketcher_Pointer_Create_Line");
}
protected:
@@ -503,9 +503,9 @@ public:
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Box");
return QString::fromLatin1("Sketcher_Pointer_Create_Box");
}
protected:
BoxMode Mode;
@@ -870,9 +870,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Oblong");
return QString::fromLatin1("Sketcher_Pointer_Oblong");
}
protected:
@@ -1627,9 +1627,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Lineset");
return QString::fromLatin1("Sketcher_Pointer_Create_Lineset");
}
protected:
@@ -1917,9 +1917,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Arc");
return QString::fromLatin1("Sketcher_Pointer_Create_Arc");
}
protected:
SelectMode Mode;
@@ -2187,9 +2187,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_3PointArc");
return QString::fromLatin1("Sketcher_Pointer_Create_3PointArc");
}
protected:
@@ -2453,9 +2453,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Circle");
return QString::fromLatin1("Sketcher_Pointer_Create_Circle");
}
protected:
@@ -2719,7 +2719,6 @@ private:
*/
virtual void activated() override
{
setCrosshairCursor("Sketcher_Pointer_Create_Ellipse");
if (constrMethod == 0) {
method = CENTER_PERIAPSIS_B;
mode = STATUS_SEEK_CENTROID;
@@ -2728,6 +2727,10 @@ private:
mode = STATUS_SEEK_PERIAPSIS;
}
}
virtual QString getCrosshairCursorSVGName() const override
{
return QString::fromLatin1("Sketcher_Pointer_Create_Ellipse");
}
protected:
std::vector<AutoConstraint> sugConstr1, sugConstr2, sugConstr3;
@@ -3610,9 +3613,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_ArcOfEllipse");
return QString::fromLatin1("Sketcher_Pointer_Create_ArcOfEllipse");
}
protected:
@@ -3955,9 +3958,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_ArcOfHyperbola");
return QString::fromLatin1("Sketcher_Pointer_Create_ArcOfHyperbola");
}
protected:
@@ -4256,9 +4259,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_ArcOfParabola");
return QString::fromLatin1("Sketcher_Pointer_Create_ArcOfParabola");
}
protected:
@@ -4745,9 +4748,9 @@ private:
IsClosed = false;
}
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_BSpline");
return QString::fromLatin1("Sketcher_Pointer_Create_BSpline");
}
void addSugConstraint() {
@@ -5261,9 +5264,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_3PointCircle");
return QString::fromLatin1("Sketcher_Pointer_Create_3PointCircle");
}
protected:
@@ -5472,9 +5475,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Create_Point");
return QString::fromLatin1("Sketcher_Pointer_Create_Point");
}
protected:
@@ -5752,11 +5755,11 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
Gui::Selection().rmvSelectionGate();
Gui::Selection().addSelectionGate(new FilletSelection(sketchgui->getObject()));
setCrosshairCursor("Sketcher_Pointer_Create_Fillet");
return QString::fromLatin1("Sketcher_Pointer_Create_Fillet");
}
protected:
@@ -6046,12 +6049,12 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
Gui::Selection().clearSelection();
Gui::Selection().rmvSelectionGate();
Gui::Selection().addSelectionGate(new TrimmingSelection(sketchgui->getObject()));
setCrosshairCursor("Sketcher_Pointer_Trimming");
return QString::fromLatin1("Sketcher_Pointer_Trimming");
}
private:
@@ -6353,7 +6356,11 @@ private:
Gui::Selection().rmvSelectionGate();
filterGate = new ExtendSelection(sketchgui->getObject());
Gui::Selection().addSelectionGate(filterGate);
setCrosshairCursor("Sketcher_Pointer_Extension");
}
virtual QString getCrosshairCursorSVGName() const override
{
return QString::fromLatin1("Sketcher_Pointer_Extension");
}
protected:
@@ -6483,12 +6490,12 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
Gui::Selection().clearSelection();
Gui::Selection().rmvSelectionGate();
Gui::Selection().addSelectionGate(new SplittingSelection(sketchgui->getObject()));
setCrosshairCursor("Sketcher_Pointer_Splitting");
return QString::fromLatin1("Sketcher_Pointer_Splitting");
}
};
@@ -6669,7 +6676,11 @@ private:
Gui::Selection().clearSelection();
Gui::Selection().rmvSelectionGate();
Gui::Selection().addSelectionGate(new ExternalSelection(sketchgui->getObject()));
setCrosshairCursor("Sketcher_Pointer_External");
}
virtual QString getCrosshairCursorSVGName() const override
{
return QString::fromLatin1("Sketcher_Pointer_External");
}
virtual void deactivated() override
@@ -6847,7 +6858,11 @@ private:
Gui::Selection().clearSelection();
Gui::Selection().rmvSelectionGate();
Gui::Selection().addSelectionGate(new CarbonCopySelection(sketchgui->getObject()));
setCrosshairCursor("Sketcher_Pointer_CarbonCopy");
}
virtual QString getCrosshairCursorSVGName() const override
{
return QString::fromLatin1("Sketcher_Pointer_CarbonCopy");
}
virtual void deactivated() override
@@ -7154,9 +7169,9 @@ public:
return true;
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Slot");
return QString::fromLatin1("Sketcher_Pointer_Slot");
}
protected:
@@ -7348,9 +7363,9 @@ public:
}
private:
virtual void activated() override
virtual QString getCrosshairCursorSVGName() const override
{
setCrosshairCursor("Sketcher_Pointer_Regular_Polygon");
return QString::fromLatin1("Sketcher_Pointer_Regular_Polygon");
}
protected:
const size_t Corners;

View File

@@ -1124,12 +1124,10 @@ public:
}
private:
virtual void activated() override
{
setCrosshairCursor("Sketcher_Pointer_InsertKnot");
virtual QString getCrosshairCursorSVGName() const override {
return QString::fromLatin1("Sketcher_Pointer_InsertKnot");
}
protected:
Sketcher::SketchObject* Obj;
int GeoId;

View File

@@ -100,6 +100,16 @@ inline void ViewProviderSketchDrawSketchHandlerAttorney::setAxisPickStyle(ViewPr
vp.setAxisPickStyle(on);
}
inline void ViewProviderSketchDrawSketchHandlerAttorney::moveCursorToSketchPoint(ViewProviderSketch &vp, Base::Vector2d point)
{
vp.moveCursorToSketchPoint(point);
}
inline void ViewProviderSketchDrawSketchHandlerAttorney::preselectAtPoint(ViewProviderSketch &vp, Base::Vector2d point)
{
vp.preselectAtPoint(point);
}
inline int ViewProviderSketchDrawSketchHandlerAttorney::getPreselectPoint(const ViewProviderSketch &vp)
{
return vp.getPreselectPoint();
@@ -220,7 +230,7 @@ DrawSketchHandler::DrawSketchHandler() : sketchgui(nullptr) {}
DrawSketchHandler::~DrawSketchHandler() {}
QString DrawSketchHandler::getCrosshairCursorString() const
QString DrawSketchHandler::getCrosshairCursorSVGName() const
{
return QString::fromLatin1("None");
}
@@ -229,6 +239,11 @@ void DrawSketchHandler::activate(ViewProviderSketch * vp)
{
sketchgui = vp;
// save the cursor at the time the DSH is activated
Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
oldCursor = viewer->getWidget()->cursor();
updateCursor();
this->preActivated();
@@ -240,6 +255,11 @@ void DrawSketchHandler::deactivate()
this->deactivated();
this->postDeactivated();
ViewProviderSketchDrawSketchHandlerAttorney::setConstraintSelectability(*sketchgui, true);
// clear temporary Curve and Markers from the scenograph
drawEdit(std::vector<Base::Vector2d>());
drawEditMarkers(std::vector<Base::Vector2d>());
resetPositionText();
unsetCursor();
}
@@ -251,14 +271,10 @@ void DrawSketchHandler::preActivated()
void DrawSketchHandler::quit(void)
{
assert(sketchgui);
drawEdit(std::vector<Base::Vector2d>());
drawEditMarkers(std::vector<Base::Vector2d>());
resetPositionText();
Gui::Selection().rmvSelectionGate();
Gui::Selection().rmvPreselect();
unsetCursor();
sketchgui->purgeHandler();
}
@@ -335,8 +351,6 @@ void DrawSketchHandler::setCursor(const QPixmap &p,int x,int y, bool autoScale)
if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
oldCursor = viewer->getWidget()->cursor();
QCursor cursor;
QPixmap p1(p);
// TODO remove autoScale after all cursors are SVG-based
@@ -424,7 +438,7 @@ void DrawSketchHandler::addCursorTail( std::vector<QPixmap> &pixmaps ) {
void DrawSketchHandler::updateCursor()
{
auto cursorstring = getCrosshairCursorString();
auto cursorstring = getCrosshairCursorSVGName();
if(cursorstring != QString::fromLatin1("None"))
setCrosshairCursor(cursorstring);
@@ -958,6 +972,16 @@ void DrawSketchHandler::setAxisPickStyle(bool on)
ViewProviderSketchDrawSketchHandlerAttorney::setAxisPickStyle(*sketchgui, on);
}
void DrawSketchHandler::moveCursorToSketchPoint(Base::Vector2d point)
{
ViewProviderSketchDrawSketchHandlerAttorney::moveCursorToSketchPoint(*sketchgui, point);
}
void DrawSketchHandler::preselectAtPoint(Base::Vector2d point)
{
ViewProviderSketchDrawSketchHandlerAttorney::preselectAtPoint(*sketchgui, point);
}
int DrawSketchHandler::getPreselectPoint(void) const
{
return ViewProviderSketchDrawSketchHandlerAttorney::getPreselectPoint(*sketchgui);
@@ -972,3 +996,9 @@ int DrawSketchHandler::getPreselectCross(void) const
{
return ViewProviderSketchDrawSketchHandlerAttorney::getPreselectCross(*sketchgui);
}
Sketcher::SketchObject * DrawSketchHandler::getSketchObject()
{
return sketchgui->getSketchObject();
}

View File

@@ -83,6 +83,8 @@ private:
static inline void drawEdit(ViewProviderSketch &vp, const std::list<std::vector<Base::Vector2d>> &list);
static inline void drawEditMarkers(ViewProviderSketch &vp, const std::vector<Base::Vector2d> &EditMarkers, unsigned int augmentationlevel = 0);
static inline void setAxisPickStyle(ViewProviderSketch &vp, bool on);
static inline void moveCursorToSketchPoint(ViewProviderSketch &vp, Base::Vector2d point);
static inline void preselectAtPoint(ViewProviderSketch &vp, Base::Vector2d point);
static inline int getPreselectPoint(const ViewProviderSketch &vp);
static inline int getPreselectCurve(const ViewProviderSketch &vp);
@@ -143,12 +145,14 @@ public:
void resetPositionText(void);
void renderSuggestConstraintsCursor(std::vector<AutoConstraint> &suggestedConstraints);
private:
private: // NVI
virtual void preActivated();
virtual void activated(){}
virtual void deactivated(){}
virtual void postDeactivated(){}
virtual void onWidgetChanged(){}
protected: // NVI requiring base implementation
virtual QString getCrosshairCursorSVGName() const;
protected:
// helpers
@@ -158,24 +162,36 @@ protected:
*
* \param autoScale - set this to false if pixmap already scaled for HiDPI
**/
/** @name Icon helpers */
//@{
void setCursor(const QPixmap &pixmap, int x,int y, bool autoScale=true);
void setSvgCursor(const QString &svgName, int x, int y,
const std::map<unsigned long, unsigned long>& colorMapping = std::map<unsigned long, unsigned long>());
void addCursorTail(std::vector<QPixmap> &pixmaps);
/// updates the actCursor with the icon by calling getCrosshairCursorSVGName(),
/// enabling to set data member dependent icons (i.e. for different construction methods)
void updateCursor();
/// restitutes the cursor that was in use at the moment of starting the DrawSketchHandler (i.e. oldCursor)
void unsetCursor(void);
/// restitutes the DSH cached cursor (e.g. without any tail due to autoconstraints, ...)
void applyCursor(void);
void applyCursor(QCursor &newCursor);
/// returns the color to be used for the crosshair (configurable as a parameter)
unsigned long getCrosshairColor();
/// functions to set the cursor to a given svgName (to be migrated to NVI style)
qreal devicePixelRatio();
void setCrosshairCursor(const QString & svgName);
void setCrosshairCursor(const char* svgName);
//@}
void drawEdit(const std::vector<Base::Vector2d> &EditCurve);
void drawEdit(const std::list<std::vector<Base::Vector2d>> &list);
void drawEdit(const std::vector<Part::Geometry *> &geometries);
void drawEditMarkers(const std::vector<Base::Vector2d> &EditMarkers, unsigned int augmentationlevel = 0);
void setAxisPickStyle(bool on);
void moveCursorToSketchPoint(Base::Vector2d point);
void preselectAtPoint(Base::Vector2d point);
void drawPositionAtCursor(const Base::Vector2d & position);
void drawDirectionAtCursor(const Base::Vector2d & position, const Base::Vector2d & origin);
@@ -184,8 +200,20 @@ protected:
int getPreselectCurve(void) const;
int getPreselectCross(void) const;
virtual QString getCrosshairCursorString() const;
Sketcher::SketchObject * getSketchObject();
private:
void setSvgCursor(const QString &svgName, int x, int y,
const std::map<unsigned long, unsigned long>& colorMapping = std::map<unsigned long, unsigned long>());
void addCursorTail(std::vector<QPixmap> &pixmaps);
void applyCursor(QCursor &newCursor);
void setCrosshairCursor(const QString & svgName);
void setCrosshairCursor(const char* svgName);
protected:
/**
* Returns constraints icons scaled to width.
**/

View File

@@ -369,10 +369,6 @@ void ViewProviderSketch::deactivateHandler()
{
assert(isInEditMode());
if(sketchHandler){
std::vector<Base::Vector2d> editCurve;
editCurve.clear();
drawEdit(editCurve); // erase any line
resetPositionText();
sketchHandler->deactivate();
sketchHandler = nullptr;
}