compile fix

This commit is contained in:
Joseph Eagar
2009-08-01 00:53:04 +00:00
parent 928ba541cf
commit 4936ec8afc
4 changed files with 82 additions and 111 deletions

View File

@@ -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)))

View File

@@ -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", "");
}

View File

@@ -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)

View File

@@ -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);