diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2006-10-16 09:40:03 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2006-10-16 09:40:03 +0000 |
| commit | 8f2c1dc45dee1da38a41386fee45feb5cce3718c (patch) | |
| tree | 4507fa56f7f990f3ef3b9953b5a8033ee61fe0d2 /src/grid-snapper.cpp | |
| parent | another canvas repaint optimization: if the new rect and the rect aborted las... (diff) | |
| download | inkscape-8f2c1dc45dee1da38a41386fee45feb5cce3718c.tar.gz inkscape-8f2c1dc45dee1da38a41386fee45feb5cce3718c.zip | |
hack*ahum*infrastructure to implement axonometric grid snapping. horizontal snapping already implemented.
(bzr r1806)
Diffstat (limited to 'src/grid-snapper.cpp')
| -rw-r--r-- | src/grid-snapper.cpp | 68 |
1 files changed, 66 insertions, 2 deletions
diff --git a/src/grid-snapper.cpp b/src/grid-snapper.cpp index 5c94b9a97..03f6c9d3a 100644 --- a/src/grid-snapper.cpp +++ b/src/grid-snapper.cpp @@ -7,6 +7,7 @@ * Frank Felfe <innerspace@iname.com> * Carl Hetherington <inkscape@carlh.net> * + * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl> * Copyright (C) 1999-2002 Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -16,6 +17,7 @@ #include "inkscape.h" #include "desktop.h" #include "display/canvas-grid.h" +#include "display/canvas-axonomgrid.h" /** * \return x rounded to the nearest multiple of c1 plus c0. @@ -37,7 +39,8 @@ Inkscape::GridSnapper::GridSnapper(SPNamedView const *nv, NR::Coord const d) : L } -Inkscape::LineSnapper::LineList Inkscape::GridSnapper::_getSnapLines(NR::Point const &p) const +Inkscape::LineSnapper::LineList +Inkscape::GridSnapper::_getSnapLines(NR::Point const &p) const { LineList s; @@ -52,7 +55,9 @@ Inkscape::LineSnapper::LineList Inkscape::GridSnapper::_getSnapLines(NR::Point c // must be rethought and maybe only the current view // should give back it's SHOWN lines to snap to // For now, the last SPCGrid in _named_view->gridviews will be used. - griditem = SP_CGRID(l->data); + if ( SP_IS_CGRID(GTK_OBJECT(l->data)) ) { + griditem = SP_CGRID(l->data); + } } g_assert(griditem != NULL); @@ -78,6 +83,65 @@ Inkscape::LineSnapper::LineList Inkscape::GridSnapper::_getSnapLines(NR::Point c return s; } + + +Inkscape::AxonomGridSnapper::AxonomGridSnapper(SPNamedView const *nv, NR::Coord const d) : LineSnapper(nv, d) +{ + +} + + +Inkscape::LineSnapper::LineList +Inkscape::AxonomGridSnapper::_getSnapLines(NR::Point const &p) const +{ + LineList s; + + if ( NULL == _named_view ) { + return s; + } + + SPCAxonomGrid *griditem = NULL; + for (GSList *l = _named_view->gridviews; l != NULL; l = l->next) { + // FIXME : this is a hack since there is only one view for now + // but when we'll handle multiple views, snapping should + // must be rethought and maybe only the current view + // should give back it's SHOWN lines to snap to + // For now, the last SPCAxonomGrid in _named_view->gridviews will be used. + if ( SP_IS_CAXONOMGRID(GTK_OBJECT(l->data)) ) { + griditem = SP_CAXONOMGRID(l->data); + } + } + + g_assert(griditem != NULL); + + // add vertical line. + + + // This is to make sure we snap to only visible grid lines + double scaled_spacing = griditem->spacing_ylines; // this is spacing of visible lines if screen pixels + // convert screen pixels to px + // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary + if (SP_ACTIVE_DESKTOP) { + scaled_spacing /= SP_ACTIVE_DESKTOP->current_zoom(); + } + + NR::Coord const rounded = round_to_nearest_multiple_plus(p[0], scaled_spacing, griditem->origin[0]); + + int a = round(scaled_spacing); + int b = round(p[0]); + int c = round(rounded); + + g_message("hier %d; %d; %d",a,b,c); + + + s.push_back(std::make_pair(NR::Dim2(0), rounded)); + + + return s; +} + + + /* Local Variables: mode:c++ |
