iMesh *cylin_uv_decomp(Prim *p, Real level) { int i, j, nu = 20 * level, nv = 20 * level; Real u, v, iu = ULEN/(Real)nu, iv = VLEN/(Real)nv; Vector3 *pts = NEWARRAY((nu+3)*(nv+1), Vector3); Vector3 *pvals = NEWARRAY((nu+3)*(nv+1), Vector3); iTri *tl = NULL; iMesh *m = NULL; for (u = UMIN - iu, i = 0; i <= nu+2; u += iu, i++) { for (v = VMIN, j = 0; j <= nv; v += iv, j++) { pts[IDX2(i,j,nu+3)] = v3_make(u,v,0); pvals[IDX2(i,j,nu+3)] = prim_point(p,u,v); } } m = imesh_alloc((nu+3) * (nv+1), NULL, NULL); m->m = pts; m->p = pvals; for (i = 0; i < nu+2; i++) { for (j = 0; j < nv; j++) { tl = itri_insert(tl, itri_make(IDX2(i,j,nu+3),IDX2(i,j+1,nu+3),IDX2(i+1,j,nu+3), m)); tl = itri_insert(tl, itri_make(IDX2(i+1,j+1,nu+3),IDX2(i+1,j,nu+3),IDX2(i,j+1,nu+3), m)); } } m->t = tl; return m; }
LEG* New_LEG(int size){ LEG *newLEG = malloc(sizeof(LEG)); assert(newLEG != NULL); NEWARRAY(newLEG->L,size); NEWARRAY(newLEG->E,size); NEWARRAY(newLEG->G,size); return newLEG; }
Hpoly *hpoly_alloc(int n) { Hpoly *p = NEWSTRUCT(Hpoly); p->n = n; p->v = NEWARRAY(n, Vector4); return p; }
Matrix4 *affine_group(int l, int m, char *t, Real **p) { int v; Matrix4 *h = NEWARRAY(m, Matrix4); for (v = 0; v < m; v++) h[v] = m4_compxform(l, t, p, v); return h; }
Stack4 *s4_initstack(int size) { int i; Matrix4 *m; Stack4 *s = NEWSTRUCT(Stack4); s->size = size; s->mbot = NEWARRAY(size, Matrix4); s->ibot = NEWARRAY(size, Matrix4); for (m = s->mbot, i = 0; i < s->size; i++) *m++ = m4_ident(); for (m = s->ibot, i = 0; i < s->size; i++) *m++ = m4_ident(); s->mtop = s->mbot; s->itop = s->ibot; return s; }
void initialize_gc(void) { int x; astMem = NEWARRAY(AST, AST_MEM_SIZE); for(x = 0; x < AST_MEM_SIZE; x++) { astMem[x] = NEW(ASTNODE); freelist = addFreeNode(freelist,astMem[x]); } }
Poly *gener_affine(int n, Vector3 *g, int m, Matrix4 *h) { int u, v; Poly *tl = NULL; Vector3 *a = NEWARRAY(n, Vector3); Vector3 *b = NEWARRAY(n, Vector3); for (v = 0; v < m; v++) { for (u = 0; u < n; u++) { b[u] = v3_m4mult(g[u], h[v]); if (u == 0 || v == 0) continue; tl = poly_insert(tl, poly3_make(a[u-1], a[u], b[u-1])); tl = poly_insert(tl, poly3_make(a[u], b[u], b[u-1])); } SWAP(a, b, Vector3 *); } efree(a); efree(b); return tl; }
wxVariant LuaInputStream::Read() { wxVariant res; int type = (unsigned char)m_is->GetC(); switch (type) { case TYPE_BOOLEAN: res = (m_is->GetC() == 0) ? false : true; break; case TYPE_TRUE: res = true; break; case TYPE_FALSE: res = false; break; case TYPE_NUMBER: { double d; m_is->Read((void *)&d, sizeof(d)); res = d; break; } case TYPE_BYTE: { tchar_t b; m_is->Read((void *)&b, sizeof(b)); res = (long)b; break; } case TYPE_WORD: { short w; m_is->Read((void *)&w, sizeof(w)); res = (long)w; break; } case TYPE_INT: case TYPE_DWORD: { int i; m_is->Read((void *)&i, sizeof(i)); res = (long)i; break; } case TYPE_STRING: { int len; m_is->Read((void *)&len, sizeof(len)); tchar_t *str = NEWARRAY(tchar_t, len + 1); m_is->Read((void *)str, len); str[len] = 0; res = str; DESTROYARRAY(str); break; } case TYPE_STRING2: { int len = (int)ReadNumber(); tchar_t *str = NEWARRAY(tchar_t, len + 1); m_is->Read((void *)str, len); str[len] = 0; res = str; DESTROYARRAY(str); break; } default: if (type >= TYPE_STR_0 && type <= TYPE_STR_127) { int len = type - TYPE_STR_0; tchar_t *str = NEWARRAY(tchar_t, len + 1); m_is->Read((void *)str, len); str[len] = 0; res = str; DESTROYARRAY(str); break; } break; } return res; }