|
@@ -815,9 +815,9 @@ int la_EdgeShouldDeleteVert(tnsMVert* mv){
|
|
|
tnsMEdge* me=lip->p;
|
|
|
tnsMVert* av=tnsMMeshEdgeAnotherVert(me,mv);
|
|
|
if(av->flags&TNS_MESH_FLAG_SELECTED){ NearSelected=1; } else { NearUnselected=1; }
|
|
|
- if(NearUnselected && NearSelected) return 1;
|
|
|
+ if(NearUnselected && NearSelected) return 0;
|
|
|
}
|
|
|
- return 0;
|
|
|
+ if(NearSelected&&(!NearUnselected)) return 1; return 0;
|
|
|
}
|
|
|
int la_FaceShouldDeleteVert(tnsMVert* mv){
|
|
|
if(!mv->elink.pFirst) return 0;
|
|
@@ -936,7 +936,7 @@ STRUCTURE(MMakeData){
|
|
|
#define M_SHOULD_INCL_PRIM(m)\
|
|
|
((!(m->flags&TNS_MESH_FLAG_PICKED)) && (m->flags&TNS_MESH_FLAG_SELECTED))
|
|
|
#define M_SHOULD_USE_OE(oe,sf)\
|
|
|
- (((!oe->fl)&&(oe->fr!=sf))||((!oe->fr)&&(oe->fl!=sf)))
|
|
|
+ (((!oe->fl)&&((!sf)||(oe->fr!=sf)))||((!oe->fr)&&((!sf)||(oe->fl!=sf))))
|
|
|
|
|
|
MIslandInfo* la_NewMIsland(MMakeData* md){ MIslandInfo* ii=memAcquireSimple(sizeof(MIslandInfo)); lstAppendItem(&md->Islands, ii); md->NumIslands++; return ii; }
|
|
|
void la_FillIslandFromVert(MIslandInfo* ii, tnsMVert* mv, int SelectMode){
|
|
@@ -965,7 +965,7 @@ tnsMFace* la_MakeFacesFrom1Vert(tnsMeshObject* mo, tnsMVert* mv){
|
|
|
} if(!oe1||!oe2) return 0;
|
|
|
ov1=tnsMMeshEdgeAnotherVert(oe1,mv); ov2=tnsMMeshEdgeAnotherVert(oe2,mv);
|
|
|
laListHandle vl={0}; lstAppendPointer(&vl,ov1); lstAppendPointer(&vl,mv); lstAppendPointer(&vl,ov2);
|
|
|
- tnsMFace* f=tnsMMeshMakeFaceN(mo, 3, &vl); while(lstPopPointer(&vl)); return f;
|
|
|
+ tnsMFace* f=tnsMMeshMakeFaceN(mo, 3, &vl, 0); while(lstPopPointer(&vl)); return f;
|
|
|
}
|
|
|
tnsMFace* la_MakeFacesFrom2Verts(tnsMeshObject* mo, tnsMVert* mv1, tnsMVert* mv2){
|
|
|
tnsMEdge* oe1=0,*oe2=0; tnsMVert* ov1,*ov2; tnsMFace* sf=0;
|
|
@@ -980,7 +980,7 @@ tnsMFace* la_MakeFacesFrom2Verts(tnsMeshObject* mo, tnsMVert* mv1, tnsMVert* mv2
|
|
|
ov1=tnsMMeshEdgeAnotherVert(oe1,mv1); ov2=tnsMMeshEdgeAnotherVert(oe2,mv2);
|
|
|
ov1->flags|=TNS_MESH_FLAG_SELECTED;ov2->flags|=TNS_MESH_FLAG_SELECTED; mv1->flags&=(~TNS_MESH_FLAG_SELECTED);mv2->flags&=(~TNS_MESH_FLAG_SELECTED);
|
|
|
laListHandle vl={0}; lstAppendPointer(&vl,ov1); lstAppendPointer(&vl,mv1); lstAppendPointer(&vl,mv2); lstAppendPointer(&vl,ov2);
|
|
|
- tnsMFace* f=tnsMMeshMakeFaceN(mo, 4, &vl); while(lstPopPointer(&vl)); return f;
|
|
|
+ tnsMFace* f=tnsMMeshMakeFaceN(mo, 4, &vl, 0); while(lstPopPointer(&vl)); return f;
|
|
|
}
|
|
|
int la_IsEndingVert(tnsMVert* mv){
|
|
|
int sel=0; for(laListItemPointer*lip=mv->elink.pFirst;lip;lip=lip->pNext){ tnsMEdge* me=lip->p;
|
|
@@ -1015,7 +1015,7 @@ int la_MakeFacesFromIslands(tnsMeshObject* mo, MMakeData* md){
|
|
|
MIslandInfo* ii=md->Islands.pFirst; if(ii->HasBranches) return 0;
|
|
|
if(ii->numv==1){ laListItemPointer*lip=ii->v.pFirst; if(la_MakeFacesFrom1Vert(mo,lip->p)) success++; }
|
|
|
elif(ii->numv==2){ laListItemPointer*lip=ii->v.pFirst,*lip2=ii->v.pLast; if(la_MakeFacesFrom2Verts(mo,lip->p, lip2->p)) success++; }
|
|
|
- else{ la_EnsureIslandVertsSequence(ii); if(tnsMMeshMakeFaceN(mo, ii->numv, &ii->v)) success++; }
|
|
|
+ else{ la_EnsureIslandVertsSequence(ii); if(tnsMMeshMakeFaceN(mo, ii->numv, &ii->v, 0)) success++; }
|
|
|
}else{
|
|
|
for(MIslandInfo* ii=md->Islands.pFirst;ii;ii=ii->Item.pNext){ if(ii->HasBranches) return 0; la_EnsureIslandVertsSequence(ii); }
|
|
|
laListHandle final={0}; int vcount=0;
|
|
@@ -1023,7 +1023,8 @@ int la_MakeFacesFromIslands(tnsMeshObject* mo, MMakeData* md){
|
|
|
while((ii=la_GetNeighborIsland(((laListItemPointer*)ii->v.pLast)->p, md))){
|
|
|
for(laListItemPointer* lip=ii->v.pFirst;lip;lip=lip->pNext){ lstAppendPointer(&final, lip->p); vcount++; }
|
|
|
}
|
|
|
- if(tnsMMeshMakeFaceN(mo,vcount,&final)) success++;
|
|
|
+ tnsMEdge* fallback_e=0;
|
|
|
+ if(tnsMMeshMakeFaceN(mo,vcount,&final, &fallback_e) || fallback_e) success++;
|
|
|
while(lstPopPointer(&final));
|
|
|
}
|
|
|
return success;
|
|
@@ -1041,7 +1042,6 @@ int OPINV_Make(laOperator *a, laEvent *e){
|
|
|
int success=la_MakeFacesFromIslands(mo,&md);
|
|
|
la_ClearIslands(&md);
|
|
|
|
|
|
- //tnsMMeshDeselectAll(mo);
|
|
|
tnsMMeshRefreshIndex(mo);
|
|
|
tnsMMeshEnsureSelection(mo,ex->SelectMode);
|
|
|
tnsInvaliateMeshBatch(mo);
|