void GriString::draw(double xcm, double ycm, gr_textStyle s, double angle) const { if (strlen(this->c_str()) == 0) return; gr_show_at(this->c_str(), xcm, ycm, s, angle); // Figure bounding box double width, ascent, descent; gr_stringwidth(this->c_str(), &width, &ascent, &descent); //printf("GriString::draw on `%s' xcm=%.1f ycm=%.1f width=%.1f ascent=%.1f descent=%.1f angle=%.1f\n", this->c_str(), xcm,ycm,width,ascent, descent, angle); double tmpx[4], tmpy[4]; // 0123 from lower-left anticlockwise switch (s) { case TEXT_LJUST: gr_rotate_xy( 0.0, -descent, angle, tmpx + 0, tmpy + 0); gr_rotate_xy( width, -descent, angle, tmpx + 1, tmpy + 1); gr_rotate_xy( width, ascent, angle, tmpx + 2, tmpy + 2); gr_rotate_xy( 0.0, ascent, angle, tmpx + 3, tmpy + 3); break; case TEXT_RJUST: gr_rotate_xy( -width, -descent, angle, tmpx + 0, tmpy + 0); gr_rotate_xy( 0.0, -descent, angle, tmpx + 1, tmpy + 1); gr_rotate_xy( 0.0, ascent, angle, tmpx + 2, tmpy + 2); gr_rotate_xy( -width, ascent, angle, tmpx + 3, tmpy + 3); break; case TEXT_CENTERED: gr_rotate_xy(-width/2, -descent, angle, tmpx + 0, tmpy + 0); gr_rotate_xy( width/2, -descent, angle, tmpx + 1, tmpy + 1); gr_rotate_xy( width/2, ascent, angle, tmpx + 2, tmpy + 2); gr_rotate_xy(-width/2, ascent, angle, tmpx + 3, tmpy + 3); break; } tmpx[0] += xcm, tmpy[0] += ycm; tmpx[1] += xcm, tmpy[1] += ycm; tmpx[2] += xcm, tmpy[2] += ycm; tmpx[3] += xcm, tmpy[3] += ycm; rectangle box(vector_min(tmpx, 4), vector_min(tmpy, 4), vector_max(tmpx, 4), vector_max(tmpy, 4)); bounding_box_update(box); }
int toScalarR(int code, KDVEC(x), DVEC(r)) { REQUIRES(rn==1,BAD_SIZE); DEBUGMSG("toScalarR"); double res; integer one = 1; integer n = xn; switch(code) { case 0: { res = dnrm2_(&n,xp,&one); break; } case 1: { res = dasum_(&n,xp,&one); break; } case 2: { res = vector_max_index(V(x)); break; } case 3: { res = vector_max(V(x)); break; } case 4: { res = vector_min_index(V(x)); break; } case 5: { res = vector_min(V(x)); break; } default: ERROR(BAD_CODE); } rp[0] = res; OK }
int32_t FALM(struct Struct_FALM *s) { _SDEBUG("I'm in FALM()\n"); // Make z0 feasible if(!s->info->ub_is_inf) vector_min(s->prob->ub,s->prob->z0,s->prob->z0,N); if(!s->info->lb_is_inf) vector_max(s->prob->lb,s->prob->z0,s->prob->z0,N); // Initialize the "inner" problem struct Struct_FGM p_in; init_inner_problem(s, &p_in); if (solve_FALM(s,&p_in) == -1){ ERROR("Error in solving solveFALM()\n"); clean_up_inner_problem(&p_in); return -1; }; clean_up_inner_problem(&p_in); _SDEBUG("End of FALM()\n"); return 0; }