compile fix
This commit is contained in:
@@ -318,13 +318,13 @@ static void *shellWalker_step(BMWalker *walker)
|
||||
int restrictpass = 1;
|
||||
shellWalker *shellWalk = walker->currentstate;
|
||||
|
||||
if (!BLI_ghash_lookup(walker->visithash, shellWalk->base))
|
||||
if (!BLI_ghash_haskey(walker->visithash, shellWalk->base))
|
||||
BLI_ghash_insert(walker->visithash, shellWalk->base, NULL);
|
||||
|
||||
/*find the next edge whose other vertex has not been visited*/
|
||||
curedge = shellWalk->curedge;
|
||||
do{
|
||||
if (!BLI_ghash_lookup(walker->visithash, curedge)) {
|
||||
if (!BLI_ghash_haskey(walker->visithash, curedge)) {
|
||||
BLI_ghash_insert(walker->visithash, curedge, NULL);
|
||||
if(walker->restrictflag &&
|
||||
(!BMO_TestFlag(walker->bm, curedge, walker->restrictflag)))
|
||||
|
||||
@@ -1485,3 +1485,80 @@ void MESH_OT_select_inverse(wmOperatorType *ot)
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
|
||||
static int select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ViewContext vc;
|
||||
BMWalker walker;
|
||||
BMEditMesh *em;
|
||||
BMVert *eve;
|
||||
BMEdge *e, *eed;
|
||||
BMFace *efa;
|
||||
short done=1, toggle=0;
|
||||
int sel= !RNA_boolean_get(op->ptr, "deselect");
|
||||
int limit= RNA_boolean_get(op->ptr, "limit");
|
||||
|
||||
/* unified_finednearest needs ogl */
|
||||
view3d_operator_needs_opengl(C);
|
||||
|
||||
/* setup view context for argument to callbacks */
|
||||
em_setup_viewcontext(C, &vc);
|
||||
em = vc.em;
|
||||
|
||||
if(vc.em->bm->totedge==0)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
vc.mval[0]= event->mval[0];
|
||||
vc.mval[1]= event->mval[1];
|
||||
|
||||
/* return warning! */
|
||||
|
||||
/*if(limit) {
|
||||
int retval= select_linked_limited_invoke(&vc, 0, sel);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
return retval;
|
||||
}*/
|
||||
|
||||
if( unified_findnearest(&vc, &eve, &eed, &efa)==0 ) {
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
if (efa) {
|
||||
eed = efa->loopbase->e;
|
||||
} else if (!eed) {
|
||||
if (!eve || !eve->edge)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
eed = eve->edge;
|
||||
}
|
||||
|
||||
BMW_Init(&walker, em->bm, BMW_SHELL, 0);
|
||||
e = BMW_Begin(&walker, eed);
|
||||
for (; e; e=BMW_Step(&walker)) {
|
||||
BM_Select(em->bm, e, sel);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void MESH_OT_select_linked_pick(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Linked";
|
||||
ot->idname= "MESH_OT_select_linked_pick";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= select_linked_pick_invoke;
|
||||
ot->poll= ED_operator_editmesh;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "");
|
||||
RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "");
|
||||
}
|
||||
|
||||
@@ -1855,114 +1855,6 @@ static int select_linked_limited_invoke(ViewContext *vc, short all, short sel)
|
||||
#undef is_face_tag
|
||||
#undef face_tag
|
||||
|
||||
static int select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
#if 0 //BMESH_TODO
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ViewContext vc;
|
||||
EditVert *eve, *v1, *v2;
|
||||
EditEdge *eed;
|
||||
EditFace *efa;
|
||||
short done=1, toggle=0;
|
||||
int sel= !RNA_boolean_get(op->ptr, "deselect");
|
||||
int limit= RNA_boolean_get(op->ptr, "limit");
|
||||
|
||||
/* unified_finednearest needs ogl */
|
||||
view3d_operator_needs_opengl(C);
|
||||
|
||||
/* setup view context for argument to callbacks */
|
||||
em_setup_viewcontext(C, &vc);
|
||||
|
||||
if(vc.em->edges.first==0) return OPERATOR_CANCELLED;
|
||||
|
||||
vc.mval[0]= event->mval[0];
|
||||
vc.mval[1]= event->mval[1];
|
||||
|
||||
/* return warning! */
|
||||
if(limit) {
|
||||
int retval= select_linked_limited_invoke(&vc, 0, sel);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
return retval;
|
||||
}
|
||||
|
||||
if( unified_findnearest(&vc, &eve, &eed, &efa)==0 ) {
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
/* clear test flags */
|
||||
for(v1= vc.em->verts.first; v1; v1= v1->next) v1->f1= 0;
|
||||
|
||||
/* start vertex/face/edge */
|
||||
if(eve) eve->f1= 1;
|
||||
else if(eed) eed->v1->f1= eed->v2->f1= 1;
|
||||
else efa->v1->f1= efa->v2->f1= efa->v3->f1= 1;
|
||||
|
||||
/* set flag f1 if affected */
|
||||
while(done==1) {
|
||||
done= 0;
|
||||
toggle++;
|
||||
|
||||
if(toggle & 1) eed= vc.em->edges.first;
|
||||
else eed= vc.em->edges.last;
|
||||
|
||||
while(eed) {
|
||||
v1= eed->v1;
|
||||
v2= eed->v2;
|
||||
|
||||
if(eed->h==0) {
|
||||
if(v1->f1 && v2->f1==0) {
|
||||
v2->f1= 1;
|
||||
done= 1;
|
||||
}
|
||||
else if(v1->f1==0 && v2->f1) {
|
||||
v1->f1= 1;
|
||||
done= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(toggle & 1) eed= eed->next;
|
||||
else eed= eed->prev;
|
||||
}
|
||||
}
|
||||
|
||||
/* now use vertex f1 flag to select/deselect */
|
||||
for(eed= vc.em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->v1->f1 && eed->v2->f1)
|
||||
EM_select_edge(eed, sel);
|
||||
}
|
||||
for(efa= vc.em->faces.first; efa; efa= efa->next) {
|
||||
if(efa->v1->f1 && efa->v2->f1 && efa->v3->f1 && (efa->v4==NULL || efa->v4->f1))
|
||||
EM_select_face(efa, sel);
|
||||
}
|
||||
/* no flush needed, connected geometry is done */
|
||||
|
||||
// if (EM_texFaceCheck())
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
return OPERATOR_FINISHED;
|
||||
#endif
|
||||
}
|
||||
|
||||
void MESH_OT_select_linked_pick(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Linked";
|
||||
ot->idname= "MESH_OT_select_linked_pick";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= select_linked_pick_invoke;
|
||||
ot->poll= ED_operator_editmesh;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "");
|
||||
RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "");
|
||||
}
|
||||
|
||||
|
||||
/* ************************* */
|
||||
|
||||
void selectconnected_mesh_all(EditMesh *em)
|
||||
|
||||
@@ -727,8 +727,10 @@ static PEdge *p_edge_lookup(PHandle *handle, PHashKey *vkeys)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int p_face_exists(PHandle *handle, PHashKey *vkeys, int i1, int i2, int i3)
|
||||
int p_face_exists(ParamHandle *phandle, ParamKey *pvkeys, int i1, int i2, int i3)
|
||||
{
|
||||
PHandle *handle = (PHandle*)phandle;
|
||||
PHashKey *vkeys = (PHashKey*)pvkeys;
|
||||
PHashKey key = PHASH_edge(vkeys[i1], vkeys[i2]);
|
||||
PEdge *e = (PEdge*)phash_lookup(handle->hash_edges, key);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user