Minor API Edits.

added BM_mesh_elem_flag_enable_all (only had disable function), and add
argunt for vert/edge/face type.

use these functions from EDBM_flag_enable/disable_all (had duplicate
code).
This commit is contained in:
2012-02-13 06:59:25 +00:00
parent 7d18115e14
commit db173f6ef8
5 changed files with 41 additions and 43 deletions

View File

@@ -47,7 +47,8 @@ void BM_elem_select_set(struct BMesh *bm, void *element, int select);
* chuck it.*/
int BM_elem_select_test(BMesh *bm, const void *element);
void BM_mesh_flag_disable_all(BMesh *bm, const char hflag);
void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag);
void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag);
/* individual element select functions, BM_elem_select_set is a shortcut for these
* that automatically detects which one to use*/

View File

@@ -754,7 +754,7 @@ void BM_select_history_validate(BMesh *bm)
}
}
void BM_mesh_flag_disable_all(BMesh *bm, const char hflag)
void BM_mesh_elem_flag_disable_all(BMesh *bm, const char htype, const char hflag)
{
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
@@ -768,14 +768,43 @@ void BM_mesh_flag_disable_all(BMesh *bm, const char hflag)
}
for (i = 0; i < 3; i++) {
ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
for ( ; ele; ele = BM_iter_step(&iter)) {
if (hflag & BM_ELEM_SELECT) BM_elem_select_set(bm, ele, FALSE);
BM_elem_flag_disable(ele, hflag);
if (htype & iter_types[i]) {
ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
for ( ; ele; ele = BM_iter_step(&iter)) {
if (hflag & BM_ELEM_SELECT) {
BM_elem_select_set(bm, ele, FALSE);
}
BM_elem_flag_disable(ele, hflag);
}
}
}
}
void BM_mesh_elem_flag_enable_all(BMesh *bm, const char htype, const char hflag)
{
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
BM_FACES_OF_MESH};
BMIter iter;
BMHeader *ele;
int i;
if (hflag & BM_ELEM_SELECT) {
BM_select_history_clear(bm);
}
for (i = 0; i < 3; i++) {
if (htype & iter_types[i]) {
ele = BM_iter_new(&iter, bm, iter_types[i], NULL);
for ( ; ele; ele = BM_iter_step(&iter)) {
if (hflag & BM_ELEM_SELECT) {
BM_elem_select_set(bm, ele, TRUE);
}
BM_elem_flag_enable(ele, hflag);
}
}
}
}
/***************** Mesh Hiding stuff *********** */

View File

@@ -1044,8 +1044,8 @@ void BM_mesh_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float s
BMHeader *ele;
// int i;
/* deselect inpu */
BM_mesh_flag_disable_all(bm, BM_ELEM_SELECT);
/* deselect input */
BM_mesh_elem_flag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
ele = BMO_iter_new(&iter, bm, &op, "outinner", BM_EDGE|BM_VERT);
for ( ; ele; ele = BMO_iter_step(&iter)) {

View File

@@ -3563,7 +3563,7 @@ static int split_mesh_exec(bContext *C, wmOperator *op)
EDBM_InitOpf(em, &bmop, op, "split geom=%hvef", BM_ELEM_SELECT);
BMO_op_exec(em->bm, &bmop);
BM_mesh_flag_disable_all(em->bm, BM_ELEM_SELECT);
BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ELEM_SELECT, BM_ALL);
if (!EDBM_FinishOp(em, &bmop, op, TRUE)) {
return OPERATOR_CANCELLED;

View File

@@ -468,44 +468,12 @@ int EDBM_get_actSelection(BMEditMesh *em, BMEditSelection *ese)
void EDBM_flag_disable_all(BMEditMesh *em, const char hflag)
{
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
BM_FACES_OF_MESH};
BMIter iter;
BMHeader *ele;
int i;
if (hflag & BM_ELEM_SELECT)
BM_select_history_clear(em->bm);
for (i = 0; i < 3; i++) {
BM_ITER(ele, &iter, em->bm, iter_types[i], NULL) {
if (hflag & BM_ELEM_SELECT) BM_elem_select_set(em->bm, ele, FALSE);
BM_elem_flag_disable(ele, hflag);
}
}
BM_mesh_elem_flag_disable_all(em->bm, BM_VERT|BM_EDGE|BM_FACE, hflag);
}
void EDBM_flag_enable_all(BMEditMesh *em, const char hflag)
{
const char iter_types[3] = {BM_VERTS_OF_MESH,
BM_EDGES_OF_MESH,
BM_FACES_OF_MESH};
BMIter iter;
BMHeader *ele;
int i;
for (i = 0; i < 3; i++) {
ele = BM_iter_new(&iter, em->bm, iter_types[i], NULL);
for ( ; ele; ele = BM_iter_step(&iter)) {
if (hflag & BM_ELEM_SELECT) {
BM_elem_select_set(em->bm, ele, TRUE);
}
else {
BM_elem_flag_enable(ele, hflag);
}
}
}
BM_mesh_elem_flag_enable_all(em->bm, BM_VERT|BM_EDGE|BM_FACE, hflag);
}
/**************-------------- Undo ------------*****************/