static void heat_laplacian_create(LaplacianSystem *sys) { const MLoopTri *mlooptri = sys->heat.mlooptri, *lt; const MLoop *mloop = sys->heat.mloop; int tottri = sys->heat.tottri; int totvert = sys->heat.totvert; int a; /* heat specific definitions */ sys->heat.mindist = MEM_callocN(sizeof(float) * totvert, "HeatMinDist"); sys->heat.H = MEM_callocN(sizeof(float) * totvert, "HeatH"); sys->heat.p = MEM_callocN(sizeof(float) * totvert, "HeatP"); /* add verts and faces to laplacian */ for (a = 0; a < totvert; a++) laplacian_add_vertex(sys, sys->heat.verts[a], 0); for (a = 0, lt = mlooptri; a < tottri; a++, lt++) { int vtri[3]; vtri[0] = mloop[lt->tri[0]].v; vtri[1] = mloop[lt->tri[1]].v; vtri[2] = mloop[lt->tri[2]].v; laplacian_add_triangle(sys, UNPACK3(vtri)); } /* for distance computation in set_H */ heat_calc_vnormals(sys); for (a = 0; a < totvert; a++) heat_set_H(sys, a); }
static void heat_laplacian_create(LaplacianSystem *sys) { MFace *mface = sys->heat.mface, *mf; int totface= sys->heat.totface; int totvert= sys->heat.totvert; int a; /* heat specific definitions */ sys->heat.mindist= MEM_callocN(sizeof(float)*totvert, "HeatMinDist"); sys->heat.H= MEM_callocN(sizeof(float)*totvert, "HeatH"); sys->heat.p= MEM_callocN(sizeof(float)*totvert, "HeatP"); /* add verts and faces to laplacian */ for(a=0; a<totvert; a++) laplacian_add_vertex(sys, sys->heat.verts[a], 0); for(a=0, mf=mface; a<totface; a++, mf++) { laplacian_add_triangle(sys, mf->v1, mf->v2, mf->v3); if(mf->v4) laplacian_add_triangle(sys, mf->v1, mf->v3, mf->v4); } /* for distance computation in set_H */ heat_calc_vnormals(sys); for(a=0; a<totvert; a++) heat_set_H(sys, a); }