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