diff options
| author | Tim Dwyer <tgdwyer@gmail.com> | 2006-05-10 07:13:45 +0000 |
|---|---|---|
| committer | tgdwyer <tgdwyer@users.sourceforge.net> | 2006-05-10 07:13:45 +0000 |
| commit | 0623102c16ecbf5ade1a7ef195659826a6f92548 (patch) | |
| tree | c5d847af5fbb9733a406251c3575bc912da0ab17 /src/removeoverlap/constraint.cpp | |
| parent | patch 1484602 by Niko Kiirala (diff) | |
| download | inkscape-0623102c16ecbf5ade1a7ef195659826a6f92548.tar.gz inkscape-0623102c16ecbf5ade1a7ef195659826a6f92548.zip | |
Apparently a problem was reported with one of the test cases.
I can't reproduce the problem, however solve_VPSC code in inkscape
was getting quite out of date with that in www.sf.net/projects/adaptagrams.
I've updated the code, which may fix the problem, or at least if it's
reported again then I'll know it's still an issue.
(bzr r803)
Diffstat (limited to 'src/removeoverlap/constraint.cpp')
| -rw-r--r-- | src/removeoverlap/constraint.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/removeoverlap/constraint.cpp b/src/removeoverlap/constraint.cpp index bb889c4d9..7c200878b 100644 --- a/src/removeoverlap/constraint.cpp +++ b/src/removeoverlap/constraint.cpp @@ -1,29 +1,47 @@ /** - * \brief Remove overlaps function + * \brief A constraint determines a minimum or exact spacing required between + * two variables. * * Authors: * Tim Dwyer <tgdwyer@gmail.com> * * Copyright (C) 2005 Authors * - * Released under GNU GPL. Read the file 'COPYING' for more information. + * Released under GNU LGPL. Read the file 'COPYING' for more information. */ #include "constraint.h" #include <cassert> -Constraint::Constraint(Variable *left, Variable *right, double gap) +Constraint::Constraint(Variable *left, Variable *right, double gap, bool equality) : left(left), right(right), gap(gap), timeStamp(0), active(false), - visited(false) + visited(false), + equality(equality) { left->out.push_back(this); right->in.push_back(this); } +Constraint::~Constraint() { + Constraints::iterator i; + for(i=left->out.begin(); i!=left->out.end(); i++) { + if(*i==this) break; + } + left->out.erase(i); + for(i=right->in.begin(); i!=right->in.end(); i++) { + if(*i==this) break; + } + right->in.erase(i); +} std::ostream& operator <<(std::ostream &os, const Constraint &c) { - os<<*c.left<<"+"<<c.gap<<"<="<<*c.right<<"("<<c.slack()<<"):lts="<<c.left->block->timeStamp<<",cts="<<c.timeStamp; + if(&c==NULL) { + os<<"NULL"; + } else { + const char *type=c.equality?"=":"<="; + os<<*c.left<<"+"<<c.gap<<type<<*c.right<<"("<<c.slack()<<")"<<(c.active?"-active":""); + } return os; } |
