#include "graphicview.h"
#include "rs_grid.h"
#include "rs_information.h"
+#include "paintintf.h"
#include "settings.h"
/**
init();
}
+RS_Snapper::RS_Snapper(void):
+ container(NULL), graphicView(NULL), finished(false)
+{
+ init();
+}
+
/**
* Destructor.
*/
*/
void RS_Snapper::init()
{
- snapMode = graphicView->getDefaultSnapMode();
- snapRes = graphicView->getSnapRestriction();
+ if (graphicView)
+ {
+ snapMode = graphicView->getDefaultSnapMode();
+ snapRes = graphicView->getSnapRestriction();
+ }
+
keyEntity = NULL;
snapSpot = Vector(false);
snapCoord = Vector(false);
finished = true;
}
+void RS_Snapper::SetContainer(RS_EntityContainer * c)
+{
+ container = c;
+}
+
+//bleh
+void RS_Snapper::SetGraphicView(GraphicView * v)
+{
+ graphicView = v;
+}
+
/**
* @return Pointer to the entity which was the key entity for the
* last successful snapping action. If the snap mode is "end point"
{
RS_DEBUG->print("RS_Snapper::snapPoint");
- deleteSnapper();
+//meh deleteSnapper();
snapSpot = Vector(false);
- if (e == NULL)
+ if (!e)
{
RS_DEBUG->print(RS_Debug::D_WARNING, "RS_Snapper::snapPoint: event is NULL");
return snapSpot;
break;
}
-#warning "!!! THIS IS WHERE THE SNAPPER IS BEING DRAWN... !!!"
- drawSnapper();
+//#warning "!!! THIS IS WHERE THE SNAPPER IS BEING DRAWN... !!!"
+// drawSnapper();
if (RS_DIALOGFACTORY)
RS_DIALOGFACTORY->updateCoordinateWidget(snapCoord, snapCoord - graphicView->getRelativeZero());
RS_DEBUG->print("RS_Snapper::snapGrid 001");
- if (grid != NULL)
+ if (grid)
{
RS_DEBUG->print("RS_Snapper::snapGrid 002");
Vector * pts = grid->getPoints();
Vector RS_Snapper::restrictHorizontal(Vector coord)
{
Vector rz = graphicView->getRelativeZero();
- Vector ret = Vector(coord.x, rz.y);
- return ret;
+// Vector ret = Vector(coord.x, rz.y);
+// return ret;
+ return Vector(coord.x, rz.y);
}
/**
Vector RS_Snapper::restrictVertical(Vector coord)
{
Vector rz = graphicView->getRelativeZero();
- Vector ret = Vector(rz.x, coord.y);
- return ret;
+// Vector ret = Vector(rz.x, coord.y);
+// return ret;
+ return Vector(rz.x, coord.y);
}
/**
/**
* Suspends this snapper while another action takes place.
*/
-void RS_Snapper::suspend()
+/*virtual*/ void RS_Snapper::suspend()
{
deleteSnapper();
snapSpot = snapCoord = Vector(false);
/**
* Resumes this snapper after it has been suspended.
*/
-void RS_Snapper::resume()
+/*virtual*/ void RS_Snapper::resume()
{
drawSnapper();
}
/**
- * Hides the snapper options. Default implementation does nothing.
+ * Hides the snapper options.
*/
-void RS_Snapper::hideOptions()
+/*virtual*/ void RS_Snapper::hideOptions()
{
if (snapMode == RS2::SnapDist && RS_DIALOGFACTORY)
RS_DIALOGFACTORY->requestSnapDistOptions(distance, false);
}
/**
- * Shows the snapper options. Default implementation does nothing.
+ * Shows the snapper options.
*/
-void RS_Snapper::showOptions()
+/*virtual*/ void RS_Snapper::showOptions()
{
if (snapMode == RS2::SnapDist && RS_DIALOGFACTORY)
RS_DIALOGFACTORY->requestSnapDistOptions(distance, true);
visible = !visible;
}
#else
- if (finished || !snapSpot.valid || graphicView == NULL)
+ if (finished || !snapSpot.valid || !graphicView)
return;
graphicView->SetSnapperDraw(true);
#endif
}
-void RS_Snapper::SetSnapperVisible(bool visibility/*= true*/)
+void RS_Snapper::SetVisible(bool visibility/*= true*/)
{
- graphicView->SetSnapperDraw(visibility);
+// graphicView->SetSnapperDraw(visibility);
+ visible = visibility;
}
-//Hmm, not sure this is necessary...
-#warning "!!! Not sure this is necessary... !!!"
-void RS_Snapper::SetSnapperCoords(Vector snapCoord, Vector snapSpot)
+bool RS_Snapper::Visible(void)
{
- graphicView->SetSnapperVars(snapSpot, snapCoord, showCrosshairs);
+// graphicView->SetSnapperDraw(visibility);
+ return visible;
+}
+
+void RS_Snapper::Draw(GraphicView * view, PaintInterface * painter)
+{
+//printf("RS_Snapper::Draw()...");
+ if (finished || !snapSpot.valid)
+ return;
+//printf("{D}\n");
+
+//meh painter->setPreviewMode();
+
+//hm, I don't like graphicView kicking around in here, especially since it now
+//lives inside GraphicView... How to !!! FIX !!!?
+//We'll pass it in for now...
+ if (snapCoord.valid)
+ {
+ // snap point
+ painter->drawCircle(view->toGui(snapCoord), 4);
+
+ // crosshairs:
+ if (showCrosshairs)
+ {
+ painter->setPen(RS_Pen(RS_Color(0, 255, 255), RS2::Width00, RS2::DashLine));
+ painter->drawLine(Vector(0, view->toGuiY(snapCoord.y)),
+ Vector(view->getWidth(), view->toGuiY(snapCoord.y)));
+ painter->drawLine(Vector(view->toGuiX(snapCoord.x), 0),
+ Vector(view->toGuiX(snapCoord.x), view->getHeight()));
+ }
+ }
+
+ if (snapCoord.valid && snapCoord != snapSpot)
+ {
+ painter->drawLine(view->toGui(snapSpot) + Vector(-5, 0),
+ view->toGui(snapSpot) + Vector(-1, 4));
+ painter->drawLine(view->toGui(snapSpot) + Vector(0, 5),
+ view->toGui(snapSpot) + Vector(4, 1));
+ painter->drawLine(view->toGui(snapSpot) + Vector(5, 0),
+ view->toGui(snapSpot) + Vector(1, -4));
+ painter->drawLine(view->toGui(snapSpot) + Vector(0, -5),
+ view->toGui(snapSpot) + Vector(-4, -1));
+ }
}