static void bodyVelocityCallback(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt) { VALUE vbody = (VALUE)(body->data); VALUE block = rb_iv_get(vbody, "velocity_func"); VALUE vgravity = VNEW(gravity); VALUE vdamping = rb_float_new(damping); VALUE vdt = rb_float_new(dt); rb_funcall(block, rb_intern("call"), 4, vbody, vgravity, vdamping, vdt); }
static VALUE rb_cpCentroidForPoly(VALUE self, VALUE arr) { Check_Type(arr, T_ARRAY); long numVerts = RARRAY_LEN(arr); VALUE *ary_ptr = RARRAY_PTR(arr); cpVect verts[numVerts]; for(long i = 0; i < numVerts; i++) verts[i] = *VGET(ary_ptr[i]); return VNEW(cpCentroidForPoly(numVerts, verts)); }
static int Gather_VectorFlags (DDD_OBJ obj, void *data) { VECTOR *pv = (VECTOR *)obj; INT *idata = (INT *)data; idata[0] = VECSKIP(pv); idata[1] = VCLASS(pv); idata[2] = VNCLASS(pv); idata[3] = NEW_DEFECT(pv); idata[4] = FINE_GRID_DOF(pv); idata[5] = VTYPE(pv); idata[6] = VOTYPE(pv); idata[7] = VDATATYPE(pv); idata[8] = VNEW(pv); idata[9] = VECTORSIDE(pv); idata[10] = VPART(pv); return (0); }
static VALUE rb_cpBBWrapVect(VALUE self, VALUE v) { return VNEW(cpBBWrapVect(*BBGET(self), *VGET(v))); }
static int Scatter_VectorFlags (DDD_OBJ obj, void *data) { VECTOR *pv = (VECTOR *)obj; INT *idata = (INT *)data; if (idata[0] != VECSKIP(pv)) { printf(PFMT "ERROR:" " VECSKIP not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VECSKIP(pv),idata[0]); pcheck++; ASSERT(0); } if (idata[1] != VCLASS(pv)) { printf(PFMT "ERROR:" " VCLASS not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VCLASS(pv),idata[1]); ASSERT(0); } if (idata[2] != VNCLASS(pv)) { printf(PFMT "ERROR:" " VNCLASS not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VNCLASS(pv),idata[2]); pcheck++; ASSERT(0); } if (idata[3] != NEW_DEFECT(pv)) { printf(PFMT "ERROR:" " NEW_DEFECT not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),NEW_DEFECT(pv),idata[3]); pcheck++; ASSERT(0); } if (idata[4] != FINE_GRID_DOF(pv)) { printf(PFMT "ERROR:" " FINE_GRID_DOF not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),FINE_GRID_DOF(pv),idata[4]); pcheck++; ASSERT(0); } if (idata[5] != VTYPE(pv)) { printf(PFMT "ERROR:" " VTYPE not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VTYPE(pv),idata[5]); pcheck++; ASSERT(0); } if (idata[6] != VOTYPE(pv)) { printf(PFMT "ERROR:" " VOTYPE not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VOTYPE(pv),idata[6]); pcheck++; ASSERT(0); } if (idata[7] != VDATATYPE(pv)) { printf(PFMT "ERROR:" " VDATATYPE not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VDATATYPE(pv),idata[7]); pcheck++; ASSERT(0); } if (idata[8] != VNEW(pv)) { printf(PFMT "ERROR:" " VNEW not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VNEW(pv),idata[8]); pcheck++; ASSERT(0); } if (idata[9] != VECTORSIDE(pv)) { printf(PFMT "ERROR:" " VECTORSIDE not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VECTORSIDE(pv),idata[9]); pcheck++; ASSERT(0); } if (idata[10] != VPART(pv)) { printf(PFMT "ERROR:" " VPART not matches vec=" VINDEX_FMTX " %d master %d\n",me, VINDEX_PRTX(pv),VPART(pv),idata[10]); pcheck++; ASSERT(0); } return (0); }
static VALUE rb_cpBodyWorld2Local(VALUE self, VALUE v) { return VNEW(cpBodyWorld2Local(BODY(self), *VGET(v))); }