DrawSketchHandler: Cursor rework and preselect at point functionalities
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
**/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user