- float polarity = ((j->type&SELF_DIM) ? -1 : 1);
- if(j->type&SELF_POS)
- row[(*i)->index*5] = polarity;
- if(j->type&SELF_DIM)
- row[(*i)->index*5+1] = polarity;
- if(j->type&TARGET_POS)
- row[j->target.index*5] = -polarity;
- if(j->type&TARGET_DIM)
- row[j->target.index*5+1] = -polarity;
- if(j->type&SPACING)
- row.back() = (j->spacing>=0 ? j->spacing : this->*(ptrs.spacing));
- if(j->type&SLACK)
+ float polarity = ((c.type&SELF_DIM) ? -1 : 1);
+ float dim_weight = ((c.type&HALF_DIM) ? 0.5f : 1);
+ if(c.type&SELF_POS)
+ row[s->index*5] = polarity;
+ if(c.type&SELF_DIM)
+ row[s->index*5+1] = polarity*dim_weight;
+ if(c.type&TARGET_POS)
+ row[c.target->index*5] = -polarity;
+ if(c.type&TARGET_DIM)
+ row[c.target->index*5+1] = -polarity*dim_weight;
+ if(c.type&SPACING)
+ row.back() = (c.spacing>=0 ? c.spacing : this->*(ptrs.spacing));
+ if(c.type&SLACK)