diff --git a/bedstead.c b/bedstead.c index cebed0e..fc1b078 100644 --- a/bedstead.c +++ b/bedstead.c @@ -2750,27 +2750,36 @@ adjust_weight() { int i; point *p; + struct vec moves[MAXPOINTS]; for (i = 0; i < nextpoint; i++) { p = &points[i]; if (p->next == NULL) continue; assert(p->prev != NULL); + moves[i].x = moves[i].y = 0; /* Move left-edge points horizontally */ if (p->prev->v.y <= p->v.y && p->v.y <= p->next->v.y) - p->v.x -= weight->weight; + moves[i].x -= weight->weight; /* Move top inner corner points along NE/SW diagonal */ if (p->prev->v.y < p->v.y && p->v.y > p->next->v.y && p->prev->v.x > p->v.x && p->v.x > p->next->v.x) { - p->v.x -= weight->weight/2; - p->v.y -= weight->weight/2; + moves[i].x -= weight->weight/2; + moves[i].y -= weight->weight/2; } /* Move bottom inner corner points along NW/SE diagonal */ if (p->prev->v.y > p->v.y && p->v.y < p->next->v.y && p->prev->v.x < p->v.x && p->v.x < p->next->v.x) { - p->v.x -= weight->weight/2; - p->v.y += weight->weight/2; + moves[i].x -= weight->weight/2; + moves[i].y += weight->weight/2; } } + for (i = 0; i < nextpoint; i++) { + p = &points[i]; + if (p->next == NULL) continue; + assert(p->prev != NULL); + p->v.x += moves[i].x; + p->v.y += moves[i].y; + } } static void