* remove the MFace parts of join (we only need polygon data)
* other minor cleanups
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user