Add CountIf method to IdList to simplify some call sites. NFC.
This also changes GetNumConstraints to return size_t.pull/420/head
parent
43c9cba7dd
commit
39c348090b
|
@ -400,6 +400,11 @@ public:
|
|||
const T *begin() const { return &elem[0]; }
|
||||
const T *end() const { return &elem[n]; }
|
||||
|
||||
template<typename F>
|
||||
size_t CountIf(F &&predicate) const {
|
||||
return std::count_if(begin(), end(), std::forward<F&&>(predicate));
|
||||
}
|
||||
|
||||
void ClearTags() {
|
||||
int i;
|
||||
for(i = 0; i < n; i++) {
|
||||
|
|
|
@ -49,14 +49,8 @@ bool Group::IsVisible() {
|
|||
return true;
|
||||
}
|
||||
|
||||
int Group::GetNumConstraints(void) {
|
||||
int num = 0;
|
||||
for(int i = 0; i < SK.constraint.n; i++) {
|
||||
Constraint *c = &SK.constraint.elem[i];
|
||||
if(c->group.v != h.v) continue;
|
||||
num++;
|
||||
}
|
||||
return num;
|
||||
size_t Group::GetNumConstraints(void) {
|
||||
return SK.constraint.CountIf([&](Constraint const & c) { return c.group.v == h.v; });
|
||||
}
|
||||
|
||||
Vector Group::ExtrusionGetVector() {
|
||||
|
|
|
@ -264,7 +264,7 @@ public:
|
|||
void AddEq(IdList<Equation,hEquation> *l, Expr *expr, int index);
|
||||
void GenerateEquations(IdList<Equation,hEquation> *l);
|
||||
bool IsVisible();
|
||||
int GetNumConstraints();
|
||||
size_t GetNumConstraints();
|
||||
Vector ExtrusionGetVector();
|
||||
void ExtrusionForceVectorTo(const Vector &v);
|
||||
|
||||
|
|
|
@ -698,16 +698,12 @@ void TextWindow::EditControlDone(std::string s) {
|
|||
g->valA = ev;
|
||||
|
||||
if(g->type == Group::Type::ROTATE) {
|
||||
int i, c = 0;
|
||||
for(i = 0; i < SK.constraint.n; i++) {
|
||||
if(SK.constraint.elem[i].group.v == g->h.v) c++;
|
||||
}
|
||||
// If the group does not contain any constraints, then
|
||||
// set the numerical guess to space the copies uniformly
|
||||
// over one rotation. Don't touch the guess if we're
|
||||
// already constrained, because that would break
|
||||
// convergence.
|
||||
if(c == 0) {
|
||||
if(g->GetNumConstraints() == 0) {
|
||||
double copies = (g->skipFirst) ? (ev + 1) : ev;
|
||||
SK.GetParam(g->h.param(3))->val = PI/(2*copies);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue