// Part of the Architektonas Project
// Originally part of QCad Community Edition by Andrew Mustun
// Extensively rewritten and refactored by James L. Hammons
-// (C) 2010 Underground Software
+// Portions copyright (C) 2001-2003 RibbonSoft
+// Copyright (C) 2010 Underground Software
+// See the README and GPLv2 files for licensing and warranty information
//
// JLH = James L. Hammons <jlhamm@acm.org>
//
#include "graphicview.h"
#include "rs_grid.h"
#include "rs_information.h"
-#include "paintintf.h"
+#include "paintinterface.h"
#include "settings.h"
/**
finished = true;
}
+//bleh
void RS_Snapper::SetContainer(RS_EntityContainer * c)
{
container = c;
}
/**
- * @return Pointer to the entity which was the key entity for the
- * last successful snapping action. If the snap mode is "end point"
- * the key entity is the entity whos end point was caught.
- * If the snap mode didn't require an entity (e.g. free, grid) this
- * method will return NULL.
+ * @return Pointer to the entity which was the key entity for the last
+ * successful snapping action. If the snap mode is "end point" the key entity
+ * is the entity whos end point was caught. If the snap mode didn't require an
+ * entity (e.g. free, grid) this method will return NULL.
*/
RS_Entity * RS_Snapper::getKeyEntity()
{
this->snapRes = snapRes;
}
+RS2::SnapMode RS_Snapper::getSnapMode(void)
+{
+ return snapMode;
+}
+
+RS2::SnapRestriction RS_Snapper::getSnapRestriction(void)
+{
+ return snapRes;
+}
+
/**
-* Sets the snap range in pixels for catchEntity().
-*
-* @see catchEntity()
-*/
+ * Sets the snap range in pixels for catchEntity().
+ *
+ * @see catchEntity()
+ */
void RS_Snapper::setSnapRange(int r)
{
snapRange = r;
Vector RS_Snapper::snapPoint(QMouseEvent * e)
{
RS_DEBUG->print("RS_Snapper::snapPoint");
-
-//meh deleteSnapper();
snapSpot = Vector(false);
if (!e)
break;
}
- // handle snap restrictions that can be activated in addition
- // to the ones above:
+ // Handle snap restrictions that can be activated in addition to the ones above:
switch (snapRes)
{
case RS2::RestrictOrthogonal:
break;
}
-//#warning "!!! THIS IS WHERE THE SNAPPER IS BEING DRAWN... !!!"
-// drawSnapper();
-
if (RS_DIALOGFACTORY)
RS_DIALOGFACTORY->updateCoordinateWidget(snapCoord, snapCoord - graphicView->getRelativeZero());
Vector RS_Snapper::snapEndpoint(Vector coord)
{
Vector vec(false);
- vec = container->getNearestEndpoint(coord, NULL/*, &keyEntity*/);
+ vec = container->getNearestEndpoint(coord, NULL);
return vec;
}
Vector RS_Snapper::restrictHorizontal(Vector coord)
{
Vector rz = graphicView->getRelativeZero();
-// 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;
+
return Vector(rz.x, coord.y);
}
*/
/*virtual*/ void RS_Snapper::suspend()
{
- deleteSnapper();
+#warning "!!! This may need to have SetVisibility() called !!!"
+// deleteSnapper();
snapSpot = snapCoord = Vector(false);
}
*/
/*virtual*/ void RS_Snapper::resume()
{
- drawSnapper();
+#warning "!!! This may need to have SetVisibility() called !!!"
+// drawSnapper();
}
/**
RS_DIALOGFACTORY->requestSnapDistOptions(distance, true);
}
-/**
- * Draws the snapper on the screen.
- */
-void RS_Snapper::drawSnapper()
-{
-printf("RS_Snapper::drawSnapper(): Using DEPRECATED function!!!\n");
- if (!visible)
- xorSnapper();
-}
-
-/**
- * Deletes the snapper from the screen.
- */
-void RS_Snapper::deleteSnapper()
-{
-printf("RS_Snapper::deleteSnapper(): Using DEPRECATED function!!!\n");
- if (visible)
- {
- xorSnapper();
- snapSpot = Vector(false);
- snapCoord = Vector(false);
- }
-}
-
-/**
- * Draws / deletes the current snapper spot.
- */
-void RS_Snapper::xorSnapper()
-{
-//Not completely true...
-//#warning "!!! xorSnapper() not working AT ALL !!!"
-#if 0
- if (!finished && snapSpot.valid)
- {
- RS_Painter * painter = graphicView->createDirectPainter();
- painter->setPreviewMode();
-
- if (snapCoord.valid)
- {
- // snap point
- painter->drawCircle(graphicView->toGui(snapCoord), 4);
-
- // crosshairs:
- if (showCrosshairs == true)
- {
- painter->setPen(RS_Pen(RS_Color(0, 255, 255), RS2::Width00, RS2::DashLine));
- painter->drawLine(Vector(0, graphicView->toGuiY(snapCoord.y)),
- Vector(graphicView->getWidth(), graphicView->toGuiY(snapCoord.y)));
- painter->drawLine(Vector(graphicView->toGuiX(snapCoord.x), 0),
- Vector(graphicView->toGuiX(snapCoord.x), graphicView->getHeight()));
- }
- }
-
- if (snapCoord.valid && snapCoord != snapSpot)
- {
- painter->drawLine(graphicView->toGui(snapSpot) + Vector(-5, 0),
- graphicView->toGui(snapSpot) + Vector(-1, 4));
- painter->drawLine(graphicView->toGui(snapSpot) + Vector(0, 5),
- graphicView->toGui(snapSpot) + Vector(4, 1));
- painter->drawLine(graphicView->toGui(snapSpot) + Vector(5, 0),
- graphicView->toGui(snapSpot) + Vector(1, -4));
- painter->drawLine(graphicView->toGui(snapSpot) + Vector(0, -5),
- graphicView->toGui(snapSpot) + Vector(-4, -1));
- }
-
- graphicView->destroyPainter();
- visible = !visible;
- }
-#else
- if (finished || !snapSpot.valid || !graphicView)
- return;
-
- graphicView->SetSnapperDraw(true);
- graphicView->SetSnapperVars(snapSpot, snapCoord, showCrosshairs);
-//Apparently, this gets hit anyway by the preview code...
-// graphicView->redraw();
-
- visible = !visible;
-#endif
-}
-
void RS_Snapper::SetVisible(bool visibility/*= true*/)
{
-// graphicView->SetSnapperDraw(visibility);
visible = visibility;
}
bool RS_Snapper::Visible(void)
{
-// 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 !!!?
if (snapCoord.valid)
{
// snap point
+ painter->setPen(RS_Pen(RS_Color(0, 127, 255), RS2::Width00, RS2::DashLine));
painter->drawCircle(view->toGui(snapCoord), 4);
- // crosshairs:
+ // crosshairs
if (showCrosshairs)
{
painter->setPen(RS_Pen(RS_Color(0, 255, 255), RS2::Width00, RS2::DashLine));