* remove the MFace parts of join (we only need polygon data)

* other minor cleanups
This commit is contained in:
2012-02-12 19:11:09 +00:00
parent 5b2ea6f8a4
commit 59d45d0ea6
11 changed files with 34 additions and 71 deletions

View File

@@ -268,9 +268,9 @@ void BKE_mesh_calc_edges(struct Mesh *mesh, int update);
void BKE_mesh_ensure_navmesh(struct Mesh *me);
void BKE_mesh_calc_tessface(struct Mesh *mesh);
void BKE_mesh_ensure_tessface(struct Mesh *mesh);
void BKE_mesh_clear_tessface(struct Mesh *mesh);
void BKE_mesh_tessface_calc(struct Mesh *mesh);
void BKE_mesh_tessface_ensure(struct Mesh *mesh);
void BKE_mesh_tessface_clear(struct Mesh *mesh);
/*convert a triangle of loop facedata to mface facedata*/
void mesh_loops_to_mface_corners(struct CustomData *fdata, struct CustomData *ldata,

View File

@@ -446,7 +446,7 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob)
/* yes, must be before _and_ after tesselate */
mesh_update_customdata_pointers(&tmp, TRUE);
BKE_mesh_calc_tessface(&tmp);
BKE_mesh_tessface_calc(&tmp);
CustomData_free(&me->vdata, me->totvert);
CustomData_free(&me->edata, me->totedge);

View File

@@ -232,7 +232,7 @@ static ListBase *cdDM_getFaceMap(Object *ob, DerivedMesh *dm)
Mesh *me= ob->data;
create_vert_face_map(&cddm->fmap, &cddm->fmap_mem, me->mface,
me->totvert, me->totface);
me->totvert, me->totface);
}
return cddm->fmap;

View File

@@ -315,7 +315,7 @@ static void mesh_ensure_tesselation_customdata(Mesh *me)
if (tottex_tessface != tottex_original ||
totcol_tessface != totcol_original )
{
BKE_mesh_clear_tessface(me);
BKE_mesh_tessface_clear(me);
CustomData_from_bmeshpoly(&me->fdata, &me->pdata, &me->ldata, me->totface);
@@ -2949,7 +2949,7 @@ void BKE_mesh_ensure_navmesh(Mesh *me)
}
}
void BKE_mesh_calc_tessface(Mesh *mesh)
void BKE_mesh_tessface_calc(Mesh *mesh)
{
mesh->totface = mesh_recalcTesselation(&mesh->fdata, &mesh->ldata, &mesh->pdata,
mesh->mvert,
@@ -2960,14 +2960,14 @@ void BKE_mesh_calc_tessface(Mesh *mesh)
mesh_update_customdata_pointers(mesh, TRUE);
}
void BKE_mesh_ensure_tessface(Mesh *mesh)
void BKE_mesh_tessface_ensure(Mesh *mesh)
{
if (mesh->totpoly && mesh->totface == 0) {
BKE_mesh_calc_tessface(mesh);
BKE_mesh_tessface_calc(mesh);
}
}
void BKE_mesh_clear_tessface(Mesh *mesh)
void BKE_mesh_tessface_clear(Mesh *mesh)
{
CustomData_free(&mesh->fdata, mesh->totface);

View File

@@ -3703,7 +3703,7 @@ static void lib_link_mesh(FileData *fd, Main *main)
* waiting until edit mode has been entered/exited, making it easier
* to recognize problems that would otherwise only show up after edits).
*/
BKE_mesh_calc_tessface(me);
BKE_mesh_tessface_calc(me);
me->id.flag -= LIB_NEEDLINK;
}

View File

@@ -647,7 +647,7 @@ void bmesh_to_mesh_exec(BMesh *bm, BMOperator *op)
}
if (dotess) {
BKE_mesh_calc_tessface(me);
BKE_mesh_tessface_calc(me);
}
mesh_update_customdata_pointers(me, dotess);

View File

@@ -759,7 +759,7 @@ void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges)
BKE_mesh_calc_edges(mesh, calc_edges);
/* TODO, make this optional, we dont always want this! */
BKE_mesh_calc_tessface(mesh);
BKE_mesh_tessface_calc(mesh);
polyindex = CustomData_get_layer(&mesh->fdata, CD_POLYINDEX);
/* add a normals layer for tesselated faces, a tessface normal will

View File

@@ -98,15 +98,14 @@ int join_mesh_exec(bContext *C, wmOperator *op)
Mesh *me;
MVert *mvert, *mv;
MEdge *medge = NULL;
MFace *mface = NULL;
MPoly *mpoly = NULL;
MLoop *mloop = NULL;
Key *key, *nkey=NULL;
KeyBlock *kb, *okb, *kbn;
float imat[4][4], cmat[4][4], *fp1, *fp2, curpos;
int a, b, totcol, totmat=0, totedge=0, totvert=0, totface=0, ok=0;
int a, b, totcol, totmat=0, totedge=0, totvert=0, ok=0;
int totloop=0, totpoly=0, vertofs, *matmap=NULL;
int i, j, index, haskey=0, edgeofs, faceofs, loopofs, polyofs;
int i, j, index, haskey=0, edgeofs, loopofs, polyofs;
bDeformGroup *dg, *odg;
MDeformVert *dvert;
CustomData vdata, edata, fdata, ldata, pdata;
@@ -129,7 +128,6 @@ int join_mesh_exec(bContext *C, wmOperator *op)
totvert+= me->totvert;
totedge+= me->totedge;
totface+= me->totface;
totloop+= me->totloop;
totpoly+= me->totpoly;
totmat+= base->object->totcol;
@@ -290,13 +288,11 @@ int join_mesh_exec(bContext *C, wmOperator *op)
mvert= CustomData_add_layer(&vdata, CD_MVERT, CD_CALLOC, NULL, totvert);
medge= CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge);
mface= CustomData_add_layer(&fdata, CD_MFACE, CD_CALLOC, NULL, totface);
mloop= CustomData_add_layer(&ldata, CD_MLOOP, CD_CALLOC, NULL, totloop);
mpoly= CustomData_add_layer(&pdata, CD_MPOLY, CD_CALLOC, NULL, totpoly);
vertofs= 0;
edgeofs= 0;
faceofs= 0;
loopofs= 0;
polyofs= 0;
@@ -409,37 +405,6 @@ int join_mesh_exec(bContext *C, wmOperator *op)
mvert+= me->totvert;
}
if(me->totface) {
/* make mapping for materials */
for(a=1; a<=base->object->totcol; a++) {
ma= give_current_material(base->object, a);
for(b=0; b<totcol; b++) {
if(ma == matar[b]) {
matmap[a-1]= b;
break;
}
}
}
CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface);
CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface);
for(a=0; a<me->totface; a++, mface++) {
mface->v1+= vertofs;
mface->v2+= vertofs;
mface->v3+= vertofs;
if(mface->v4) mface->v4+= vertofs;
if (matmap)
mface->mat_nr= matmap[(int)mface->mat_nr];
else
mface->mat_nr= 0;
}
faceofs += me->totface;
}
if(me->totedge) {
CustomData_merge(&me->edata, &edata, CD_MASK_MESH, CD_DEFAULT, totedge);
CustomData_copy_data(&me->edata, &edata, 0, edgeofs, me->totedge);
@@ -506,19 +471,16 @@ int join_mesh_exec(bContext *C, wmOperator *op)
CustomData_free(&me->vdata, me->totvert);
CustomData_free(&me->edata, me->totedge);
CustomData_free(&me->fdata, me->totface);
CustomData_free(&me->ldata, me->totloop);
CustomData_free(&me->pdata, me->totpoly);
me->totvert= totvert;
me->totedge= totedge;
me->totface= totface;
me->totloop= totloop;
me->totpoly= totpoly;
me->vdata= vdata;
me->edata= edata;
me->fdata= fdata;
me->ldata= ldata;
me->pdata= pdata;

View File

@@ -375,13 +375,13 @@ static void make_vertexcol(Object *ob) /* single ob */
}
/* create tessfaces because they will be used for drawing & fast updates*/
BKE_mesh_calc_tessface(me); /* does own call to update pointers */
BKE_mesh_tessface_calc(me); /* does own call to update pointers */
}
}
else {
if (me->totface) {
/* this wont be used, theres no need to keep it */
BKE_mesh_clear_tessface(me);
BKE_mesh_tessface_clear(me);
}
}
@@ -489,7 +489,7 @@ void vpaint_fill(Object *ob, unsigned int paintcol)
}
/* remove stale me->mcol, will be added later */
BKE_mesh_clear_tessface(me);
BKE_mesh_tessface_clear(me);
DAG_id_tag_update(&me->id, 0);
}

View File

@@ -2724,7 +2724,7 @@ void sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob, int need_
}
/* BMESH ONLY --- at some point we should move sculpt code to use polygons only - but for now it needs tessfaces */
BKE_mesh_ensure_tessface(ob->data);
BKE_mesh_tessface_ensure(ob->data);
ss->pbvh = dm->getPBVH(ob, dm);
ss->pmap = (need_pmap && dm->getPolyMap)? dm->getPolyMap(ob, dm): NULL;

View File

@@ -183,7 +183,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
/* check for defgroups */
if(evedef)
dvert= CustomData_bmesh_get(&em->bm->vdata, evedef->head.data, CD_MDEFORMVERT);
dvert= CustomData_bmesh_get(&bm->vdata, evedef->head.data, CD_MDEFORMVERT);
if(tot==1 && dvert && dvert->totweight) {
bDeformGroup *dg;
int i, max=1, init=1;
@@ -413,12 +413,13 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
if(ob->type==OB_MESH) {
Mesh *me= ob->data;
BMEditMesh *em = me->edit_btmesh;
BMesh *bm = em->bm;
BMVert *eve;
BMIter iter;
if(len_v3(median) > 0.000001f) {
BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
if(BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
add_v3_v3(eve->co, median);
}
@@ -434,9 +435,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
if(fixed_crease != FLT_MAX) {
/* simple case */
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT)) {
float *crease = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_CREASE);
float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE);
if (!crease) break;
*crease= fixed_crease;
@@ -456,9 +457,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
/* scale down */
const float sca= median_new / median_orig;
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
float *crease = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_CREASE);
float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE);
if (!crease) break;
@@ -471,9 +472,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
/* scale up */
const float sca= (1.0f - median_new) / (1.0f - median_orig);
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
float *crease = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_CREASE);
float *crease = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_CREASE);
if (!crease) break;
*crease = 1.0f - ((1.0f - *crease) * sca);
@@ -491,9 +492,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
if(fixed_bweight != FLT_MAX) {
/* simple case */
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT)) {
float *bweight = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_BWEIGHT);
float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT);
if(!bweight) break;
*bweight = fixed_bweight;
@@ -513,9 +514,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
/* scale down */
const float sca = median_new / median_orig;
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
float *bweight = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_BWEIGHT);
float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT);
if(!bweight) break;
*bweight *= sca;
@@ -527,9 +528,9 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
/* scale up */
const float sca = (1.0f - median_new) / (1.0f - median_orig);
BM_ITER(eed, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_ITER(eed, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if(BM_elem_flag_test(eed, BM_ELEM_SELECT) && !BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
float *bweight = (float *)CustomData_bmesh_get(&em->bm->edata, eed->head.data, CD_BWEIGHT);
float *bweight = (float *)CustomData_bmesh_get(&bm->edata, eed->head.data, CD_BWEIGHT);
if(!bweight) break;
*bweight = 1.0f - ((1.0f - *bweight) * sca);