argument for CDDM_from_BMEditMesh() so creating tessface data is optional, no functional changes since all callers use this so far.
This commit is contained in:
@@ -57,7 +57,7 @@ int CDDM_Check(struct DerivedMesh *dm);
|
|||||||
struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh, struct Object *ob);
|
struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh, struct Object *ob);
|
||||||
|
|
||||||
/* creates a CDDerivedMesh from the given BMEditMesh */
|
/* creates a CDDerivedMesh from the given BMEditMesh */
|
||||||
DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps);
|
DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps, int use_tessface);
|
||||||
|
|
||||||
/* merge verts */
|
/* merge verts */
|
||||||
DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap);
|
DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap);
|
||||||
|
@@ -807,7 +807,7 @@ static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em, int lay
|
|||||||
float (*orco)[3];
|
float (*orco)[3];
|
||||||
int free;
|
int free;
|
||||||
|
|
||||||
if(em) dm= CDDM_from_BMEditMesh(em, me, 0);
|
if(em) dm= CDDM_from_BMEditMesh(em, me, FALSE, TRUE);
|
||||||
else dm= CDDM_from_mesh(me, ob);
|
else dm= CDDM_from_mesh(me, ob);
|
||||||
|
|
||||||
orco= get_orco_coords_dm(ob, em, layer, &free);
|
orco= get_orco_coords_dm(ob, em, layer, &free);
|
||||||
@@ -1680,7 +1680,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
dm = CDDM_from_BMEditMesh(em, ob->data, 0);
|
dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE);
|
||||||
|
|
||||||
if(deformedVerts) {
|
if(deformedVerts) {
|
||||||
CDDM_apply_vert_coords(dm, deformedVerts);
|
CDDM_apply_vert_coords(dm, deformedVerts);
|
||||||
|
@@ -945,7 +945,6 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
|
|||||||
else dvert = NULL;
|
else dvert = NULL;
|
||||||
} else
|
} else
|
||||||
dvert = NULL;
|
dvert = NULL;
|
||||||
|
|
||||||
if(armature_def_nr >= 0 && dvert) {
|
if(armature_def_nr >= 0 && dvert) {
|
||||||
armature_weight= defvert_find_weight(dvert, armature_def_nr);
|
armature_weight= defvert_find_weight(dvert, armature_def_nr);
|
||||||
|
|
||||||
|
@@ -1963,7 +1963,7 @@ static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps)
|
DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps, int use_tessface)
|
||||||
{
|
{
|
||||||
DerivedMesh *dm = CDDM_new(em->bm->totvert, em->bm->totedge,
|
DerivedMesh *dm = CDDM_new(em->bm->totvert, em->bm->totedge,
|
||||||
em->tottri, em->bm->totloop, em->bm->totface);
|
em->tottri, em->bm->totloop, em->bm->totface);
|
||||||
@@ -1980,7 +1980,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis
|
|||||||
MPoly *mpoly = cddm->mpoly;
|
MPoly *mpoly = cddm->mpoly;
|
||||||
int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
|
int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
|
||||||
int numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
|
int numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
|
||||||
int *index, *polyindex, add_orig;
|
int *index, add_orig;
|
||||||
int has_crease, has_edge_bweight, has_vert_bweight;
|
int has_crease, has_edge_bweight, has_vert_bweight;
|
||||||
CustomDataMask mask;
|
CustomDataMask mask;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
@@ -2009,7 +2009,9 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis
|
|||||||
CD_CALLOC, dm->numPolyData);
|
CD_CALLOC, dm->numPolyData);
|
||||||
|
|
||||||
/*add tesselation mface layers*/
|
/*add tesselation mface layers*/
|
||||||
CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri);
|
if (use_tessface) {
|
||||||
|
CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri);
|
||||||
|
}
|
||||||
|
|
||||||
index = dm->getVertDataArray(dm, CD_ORIGINDEX);
|
index = dm->getVertDataArray(dm, CD_ORIGINDEX);
|
||||||
|
|
||||||
@@ -2056,27 +2058,32 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis
|
|||||||
}
|
}
|
||||||
bm->elem_index_dirty &= ~BM_EDGE;
|
bm->elem_index_dirty &= ~BM_EDGE;
|
||||||
|
|
||||||
BM_ElemIndex_Ensure(bm, BM_FACE);
|
/* avoid this where possiblem, takes extra memory */
|
||||||
|
if (use_tessface) {
|
||||||
|
int *polyindex;
|
||||||
|
|
||||||
polyindex = dm->getTessFaceDataArray(dm, CD_POLYINDEX);
|
BM_ElemIndex_Ensure(bm, BM_FACE);
|
||||||
index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
|
|
||||||
for(i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) {
|
|
||||||
MFace *mf = &mface[i];
|
|
||||||
BMLoop **l = em->looptris[i];
|
|
||||||
efa = l[0]->f;
|
|
||||||
|
|
||||||
mf->v1 = BM_GetIndex(l[0]->v);
|
polyindex = dm->getTessFaceDataArray(dm, CD_POLYINDEX);
|
||||||
mf->v2 = BM_GetIndex(l[1]->v);
|
index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
|
||||||
mf->v3 = BM_GetIndex(l[2]->v);
|
for(i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) {
|
||||||
mf->v4 = 0;
|
MFace *mf = &mface[i];
|
||||||
mf->mat_nr = efa->mat_nr;
|
BMLoop **l = em->looptris[i];
|
||||||
mf->flag = BM_Face_Flag_To_MEFlag(efa);
|
efa = l[0]->f;
|
||||||
|
|
||||||
*index = add_orig ? BM_GetIndex(efa) : *(int*)CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_ORIGINDEX);
|
|
||||||
*polyindex = BM_GetIndex(efa);
|
|
||||||
|
|
||||||
loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numTex);
|
mf->v1 = BM_GetIndex(l[0]->v);
|
||||||
test_index_face(mf, &dm->faceData, i, 3);
|
mf->v2 = BM_GetIndex(l[1]->v);
|
||||||
|
mf->v3 = BM_GetIndex(l[2]->v);
|
||||||
|
mf->v4 = 0;
|
||||||
|
mf->mat_nr = efa->mat_nr;
|
||||||
|
mf->flag = BM_Face_Flag_To_MEFlag(efa);
|
||||||
|
|
||||||
|
*index = add_orig ? BM_GetIndex(efa) : *(int*)CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_ORIGINDEX);
|
||||||
|
*polyindex = BM_GetIndex(efa);
|
||||||
|
|
||||||
|
loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numTex);
|
||||||
|
test_index_face(mf, &dm->faceData, i, 3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX);
|
index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX);
|
||||||
@@ -2086,6 +2093,8 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis
|
|||||||
BMLoop *l;
|
BMLoop *l;
|
||||||
MPoly *mp = &mpoly[i];
|
MPoly *mp = &mpoly[i];
|
||||||
|
|
||||||
|
BM_SetIndex(efa, i); /* set_inline */
|
||||||
|
|
||||||
mp->totloop = efa->len;
|
mp->totloop = efa->len;
|
||||||
mp->flag = BM_Face_Flag_To_MEFlag(efa);
|
mp->flag = BM_Face_Flag_To_MEFlag(efa);
|
||||||
mp->loopstart = j;
|
mp->loopstart = j;
|
||||||
@@ -2104,6 +2113,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis
|
|||||||
|
|
||||||
if (add_orig) *index = i;
|
if (add_orig) *index = i;
|
||||||
}
|
}
|
||||||
|
bm->elem_index_dirty &= ~BM_FACE;
|
||||||
|
|
||||||
return dm;
|
return dm;
|
||||||
}
|
}
|
||||||
|
@@ -454,7 +454,7 @@ static void contarget_get_mesh_mat (Object *ob, const char *substring, float mat
|
|||||||
/* get DerivedMesh */
|
/* get DerivedMesh */
|
||||||
if (em) {
|
if (em) {
|
||||||
/* target is in editmode, so get a special derived mesh */
|
/* target is in editmode, so get a special derived mesh */
|
||||||
dm = CDDM_from_BMEditMesh(em, ob->data, 0);
|
dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE);
|
||||||
freeDM= 1;
|
freeDM= 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -375,7 +375,7 @@ static void bmesh_set_mdisps_space(BMesh *bm, int from, int to)
|
|||||||
if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
|
if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
|
||||||
Object *ob = bm->ob;
|
Object *ob = bm->ob;
|
||||||
BMEditMesh *em = BMEdit_Create(bm);
|
BMEditMesh *em = BMEdit_Create(bm);
|
||||||
DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, 1);
|
DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE);
|
||||||
MDisps *mdisps;
|
MDisps *mdisps;
|
||||||
BMFace *f;
|
BMFace *f;
|
||||||
BMIter iter;
|
BMIter iter;
|
||||||
|
@@ -159,7 +159,7 @@ static BMOpDefine def_edgerotate = {
|
|||||||
"edgerotate",
|
"edgerotate",
|
||||||
{{BMOP_OPSLOT_ELEMENT_BUF, "edges"}, //input edges
|
{{BMOP_OPSLOT_ELEMENT_BUF, "edges"}, //input edges
|
||||||
{BMOP_OPSLOT_ELEMENT_BUF, "edgeout"}, //newly spun edges
|
{BMOP_OPSLOT_ELEMENT_BUF, "edgeout"}, //newly spun edges
|
||||||
{BMOP_OPSLOT_INT, "ccw"}, //rotate edge counter-clockwise if true, othewise clockwise
|
{BMOP_OPSLOT_INT, "ccw"}, //rotate edge counter-clockwise if true, othewise clockwise
|
||||||
{0} /*null-terminating sentinel*/,
|
{0} /*null-terminating sentinel*/,
|
||||||
},
|
},
|
||||||
bmesh_edgerotate_exec,
|
bmesh_edgerotate_exec,
|
||||||
|
@@ -142,7 +142,7 @@ static void deformVertsEM(
|
|||||||
ArmatureModifierData *amd = (ArmatureModifierData*) md;
|
ArmatureModifierData *amd = (ArmatureModifierData*) md;
|
||||||
DerivedMesh *dm = derivedData;
|
DerivedMesh *dm = derivedData;
|
||||||
|
|
||||||
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0);
|
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
|
||||||
|
|
||||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ static void deformMatricesEM(
|
|||||||
ArmatureModifierData *amd = (ArmatureModifierData*) md;
|
ArmatureModifierData *amd = (ArmatureModifierData*) md;
|
||||||
DerivedMesh *dm = derivedData;
|
DerivedMesh *dm = derivedData;
|
||||||
|
|
||||||
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0);
|
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
|
||||||
|
|
||||||
armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
|
armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
|
||||||
amd->deformflag, NULL, amd->defgrp_name);
|
amd->deformflag, NULL, amd->defgrp_name);
|
||||||
|
@@ -389,7 +389,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
|
|||||||
BMO_pop(em->bm);
|
BMO_pop(em->bm);
|
||||||
|
|
||||||
BMEdit_RecalcTesselation(em);
|
BMEdit_RecalcTesselation(em);
|
||||||
cddm = CDDM_from_BMEditMesh(em, NULL, 0);
|
cddm = CDDM_from_BMEditMesh(em, NULL, FALSE, TRUE);
|
||||||
|
|
||||||
BMEdit_Free(em);
|
BMEdit_Free(em);
|
||||||
MEM_freeN(em);
|
MEM_freeN(em);
|
||||||
|
@@ -159,7 +159,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob,
|
|||||||
cddm->release(cddm);
|
cddm->release(cddm);
|
||||||
}
|
}
|
||||||
|
|
||||||
cddm = CDDM_from_BMEditMesh(em, NULL, 1);
|
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE);
|
||||||
BMEdit_Free(em);
|
BMEdit_Free(em);
|
||||||
MEM_freeN(em);
|
MEM_freeN(em);
|
||||||
|
|
||||||
|
@@ -129,7 +129,7 @@ static void deformVertsEM(
|
|||||||
{
|
{
|
||||||
DerivedMesh *dm = derivedData;
|
DerivedMesh *dm = derivedData;
|
||||||
|
|
||||||
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0);
|
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
|
||||||
|
|
||||||
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
||||||
|
|
||||||
|
@@ -108,7 +108,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj
|
|||||||
cddm->release(cddm);
|
cddm->release(cddm);
|
||||||
}
|
}
|
||||||
|
|
||||||
cddm = CDDM_from_BMEditMesh(em, NULL, 1);
|
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE);
|
||||||
BMEdit_Free(em);
|
BMEdit_Free(em);
|
||||||
MEM_freeN(em);
|
MEM_freeN(em);
|
||||||
|
|
||||||
|
@@ -124,7 +124,7 @@ static void deformVertsEM(
|
|||||||
{
|
{
|
||||||
DerivedMesh *dm = derivedData;
|
DerivedMesh *dm = derivedData;
|
||||||
|
|
||||||
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0);
|
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
|
||||||
|
|
||||||
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
||||||
|
|
||||||
|
@@ -185,7 +185,7 @@ DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*
|
|||||||
return dm;
|
return dm;
|
||||||
|
|
||||||
if(ob->type==OB_MESH) {
|
if(ob->type==OB_MESH) {
|
||||||
if(em) dm= CDDM_from_BMEditMesh(em, ob->data, 0);
|
if(em) dm= CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE);
|
||||||
else dm = CDDM_from_mesh((struct Mesh *)(ob->data), ob);
|
else dm = CDDM_from_mesh((struct Mesh *)(ob->data), ob);
|
||||||
|
|
||||||
if(vertexCos) {
|
if(vertexCos) {
|
||||||
|
@@ -338,7 +338,7 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editD
|
|||||||
|
|
||||||
if(use_dm) {
|
if(use_dm) {
|
||||||
if(!derivedData)
|
if(!derivedData)
|
||||||
dm = CDDM_from_BMEditMesh(editData, ob->data, 0);
|
dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
|
||||||
|
@@ -451,7 +451,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
|||||||
else if (obr->type == OB_MESH) {
|
else if (obr->type == OB_MESH) {
|
||||||
Mesh *me = (Mesh*)obr->data;
|
Mesh *me = (Mesh*)obr->data;
|
||||||
if (me->edit_btmesh)
|
if (me->edit_btmesh)
|
||||||
target_dm = CDDM_from_BMEditMesh(me->edit_btmesh, me, 0);
|
target_dm = CDDM_from_BMEditMesh(me->edit_btmesh, me, FALSE, TRUE);
|
||||||
else
|
else
|
||||||
target_dm = CDDM_from_mesh(me, obr);
|
target_dm = CDDM_from_mesh(me, obr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user