示例#1
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_xbox(Expr* a, Expr* b) {
  Expr* wa = expr_sub(a->xmax,a->xmin);
  Expr* wb = expr_sub(b->xmax,b->xmin);
  Expr* r = expr_mul(expr_lit(0.5),expr_add(wa,wb));
  auto tg = expr_or(expr_xmov(expr_sub(expr_neg(r),a->xmin),a),expr_xmov(expr_sub(expr_add(expr_neg(r),wa),b->xmin),b));
  tg->xmin = expr_neg(r);
  tg->xmax = r;
  tg->ymin = expr_min(a->ymin, b->ymin);
  tg->ymax = expr_max(a->ymax, b->ymax);
  if (a->zmin != NULL && b->zmin != NULL) {
    tg->zmin = expr_min(a->zmin, b->zmin);
    tg->zmax = expr_max(a->zmax, b->zmax);
  }
  return tg;
}
示例#2
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_extrude(Expr* d, Expr* g) {
  auto r  = expr_mul(expr_lit(0.5), d);
  auto lo = expr_neg(r);
  auto hi = r;
  auto tg = expr_and(expr_and(expr_sub(lo,expr_z()), expr_sub(expr_z(),r)), g);
  tg->xmin = g->xmin;
  tg->xmax = g->xmax;
  tg->ymin = g->ymin;
  tg->ymax = g->ymax;
  tg->zmin = lo;
  tg->zmax = hi;
  // printf("CHECKING EXT TG %p INF XMIN %p YMIN %p ZMIN %p XMAX %p YMAX %p ZMAX %p \n", 
  //        tg, tg->xmin, tg->ymin, tg->zmin, tg->xmax, tg->ymax, tg->zmax);
  return tg;
}
示例#3
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_align_zmax(Expr* a, Expr* b) {
  auto del = expr_sub(a->zmax,b->zmax);
  auto tg  = expr_zmov(del,b);
  tg->copy_bbox(b);
  tg->zmin = expr_add(b->zmin, del);
  tg->zmax = expr_add(b->zmax, del);
  return tg;
}
示例#4
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_align_ymin(Expr* a, Expr* b) {
  auto del = expr_sub(a->ymin,b->ymin);
  auto tg  = expr_ymov(del,b);
  tg->copy_bbox(b);
  tg->ymin = expr_add(b->ymin, del);
  tg->ymax = expr_add(b->ymax, del);
  return tg;
}
示例#5
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_circle(Expr* d) {
  auto r = expr_mul(expr_lit(0.5), d);
  auto g = expr_sub(expr_sqrt(expr_add(expr_sqr(expr_x()), expr_sqr(expr_y()))),r);
  g->xmin = expr_neg(r);
  g->xmax = r;
  g->ymin = expr_neg(r);
  g->ymax = r;
  return g;
}
示例#6
0
static void test_arithmetic()
{
    double d0 = 0.0;
    double d1 = 0.0;

    Expr *e_isum = expr_sum(expr_int(2), expr_int(2));
    Expr *e_lsum = expr_sum(expr_long(2), expr_long(2));
    Expr *e_rsum = expr_sum(expr_real(2.2), expr_real(2.2));

    Expr *e_isub = expr_sub(expr_int(3), expr_int(7));
    Expr *e_lsub = expr_sub(expr_long(3), expr_long(7));
    Expr *e_rsub = expr_sub(expr_real(1.3), expr_real(0.3));

    Expr *e_idiv = expr_div(expr_int(8), expr_int(4));
    Expr *e_ldiv = expr_div(expr_long(8), expr_long(4));
    Expr *e_rdiv = expr_div(expr_real(3.0), expr_real(0.1));

    Expr *e_imul = expr_mul(expr_int(5), expr_int(5));
    Expr *e_lmul = expr_mul(expr_long(5), expr_long(5));
    Expr *e_rmul = expr_mul(expr_real(5.0), expr_real(0.5));

    if (4 != val_int(expr_new_val(e_isum, NULL, NULL)))
        fail();
    if (4LL != val_long(expr_new_val(e_lsum, NULL, NULL)))
        fail();

    d0 = val_real(expr_new_val(e_rsum, NULL, NULL));
    d1 = 4.4;
    if (d1 != d0)
        fail();

    if (-4 != val_int(expr_new_val(e_isub, NULL, NULL)))
        fail();
    if (-4LL != val_long(expr_new_val(e_lsub, NULL, NULL)))
        fail();

    d0 = val_real(expr_new_val(e_rsub, NULL, NULL));
    d1 = 1.0;
    if (d1 != d0)
        fail();

    if (2 != val_int(expr_new_val(e_idiv, NULL, NULL)))
        fail();
    if (2LL != val_long(expr_new_val(e_ldiv, NULL, NULL)))
        fail();

    d0 = val_real(expr_new_val(e_rdiv, NULL, NULL));
    d1 = 30;
    if (d1 != d0)
        fail();

    if (25 != val_int(expr_new_val(e_imul, NULL, NULL)))
        fail();
    if (25 != val_long(expr_new_val(e_lmul, NULL, NULL)))
        fail();

    d0 = val_real(expr_new_val(e_rmul, NULL, NULL));
    d1 = 2.5;
    if (d1 != d0)
        fail();

    expr_free(e_isum);
    expr_free(e_lsum);
    expr_free(e_rsum);

    expr_free(e_isub);
    expr_free(e_lsub);
    expr_free(e_rsub);

    expr_free(e_idiv);
    expr_free(e_ldiv);
    expr_free(e_rdiv);

    expr_free(e_imul);
    expr_free(e_lmul);
    expr_free(e_rmul);
}
示例#7
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_blend(Expr* g1, Expr* g2, Expr* amount) {
  auto j = expr_add(g1, g2);
  auto f = expr_sub(expr_add(expr_sqrt(expr_abs(g1)), expr_sqrt(expr_abs(g2))), amount);
  return expr_add(j, f);
}
示例#8
0
文件: expr.cpp 项目: jackbackrack/cad
Expr* expr_half(Expr* nx, Expr* ny, Expr* nz, Expr* d) {
  return expr_sub(d, expr_add(expr_mul(expr_x(), nx), expr_add(expr_mul(expr_y(), ny), expr_mul(expr_z(), nz))));
}